无法在 Isolate 中执行 Firebase 查询

Posted

技术标签:

【中文标题】无法在 Isolate 中执行 Firebase 查询【英文标题】:Cannot execute Firebase Query within Isolate 【发布时间】:2020-03-25 23:14:25 【问题描述】:

我正在使用 Flutter 开发应用程序。我想使用 Isolate 执行一些 Firebase 查询。 但是每次我运行该应用程序时都会收到此错误并且没有显示任何内容。

这是我的代码

class HomePage extends StatefulWidget 
    HomePage(Key key, this.title) : super(key: key);
    final String title;

    @override
    HomePageState createState() => HomePageState();
 


class HomePageState extends State<HomePage>
    Isolate _isolate;
    ReceivePort _receivePort;
    String _data;

  @override
  Widget build(BuildContext context)
    return WillPopScope(
    child: Scaffold()
     child : Center(child:Text('$_data'))
     );
  


 //To start
  void _start() async 
  _receivePort = ReceivePort();
  _isolate = await Isolate.spawn(getData, _receivePort.sendPort);
  _receivePort.listen(_displayData, onDone: () 
     print("done!");
  );


 //Display data;
void _displayData(dynamic data) 
  setState(() 
    _data = data;
  );
 

  static void getData(SendPort sendPort) async
   var fire = Firestore.instance;
   fire.settings(persistenceEnabled: true); //I get an error here
   fire.document('MODEL/$id')
    .snapshots()
    .listen((d) //I get an error here
     sendPort.send(d);
    
 


 //I call the method _start in the initState
@override
 void initState() 
    _start();
   super.initState();
  

这是我得到的错误

E/flutter (14817): [ERROR:flutter/runtime/dart_isolate.cc(808)] 未处理的异常: E/flutter(14817):错误:找不到本机函数“Window_sendPlatformMessage”(4 个参数) E/flutter (14817): #0 Window.sendPlatformMessage (dart:ui/window.dart:1133:9) E/flutter (14817): #1 _DefaultBinaryMessenger._sendPlatformMessage (package:flutter/src/services/binary_messenger.dart:85:15) E/flutter (14817): #2 _DefaultBinaryMessenger.send (包:flutter/src/services/binary_messenger.dart:129:12) E/flutter (14817): #3 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:309:51) E/颤振(14817): E/flutter (14817):#4 Query.snapshots。 (包:cloud_firestore/src/query.dart:61:37) E/flutter (14817): #5 _runGuarded (dart:async/stream_controller.dart:805:24) E/flutter (14817): #6 _BroadcastStreamController._subscribe (dart:async/broadcast_stream_controller.dart:213:7) E/flutter (14817): #7 _ControllerStream._createSubscription (dart:async/stream_controller.dart:818:19) E/颤振(14817): E/flutter (14817): #4 Firestore.settings (package:cloud_firestore/src/firestore.dart:154:19) E/颤振(14817): E/flutter (14817): #5 HomePageState.getData (package:flutter_app/HelpFile/HomePage.dart:207:10) E/flutter (14817): #8 _StreamImpl.listen (dart:async/stream_impl.dart:472:9) E/flutter (14817): #9 HomePageState.getData (package:flutter_app/HomePage.dart:201:10) E/颤振(14817): E/颤振(14817):#10 _startIsolate。 (dart:isolate-patch/isolate_patch.dart:308:17) E/flutter (14817): #11 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

【问题讨论】:

您使用的是哪个平台? _getData是什么功能? 我使用 android 进行测试,使用 Windows 8.1 进行开发。我写的是 _getData 而不是 getData。 你找到解决这个问题的方法了吗? 【参考方案1】:

查看此链接https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseApp

任何 FirebaseApp 初始化都只能在应用的主进程中进行。不支持在主进程以外的进程中使用 Firebase,这可能会导致与资源争用相关的问题。

【讨论】:

以上是关于无法在 Isolate 中执行 Firebase 查询的主要内容,如果未能解决你的问题,请参考以下文章

Dart语言中的Isolate

Dart语言中的Isolate

Dart语言中的Isolate

Dart语言中的Isolate

Dart 异步编程之 Isolate 和事件循环

Firebase Cloud Functions:无法在“窗口”上执行“获取”:服务中的非法调用