我试图通过套接字控制 dart 脚本,在隔离中运行我想出了一些(剧透警告)不起作用的代码:
import "dart:io";
import "dart:convert";
import "dart:isolate";
reader(SendPort sendPort) async {
  var serverSocket = await ServerSocket.bind("127.0.0.1", 83);
  print('connected');
  await for (var socket in serverSocket) {
    socket.transform(UTF8.decoder).listen((msg) => sendPort.send(msg));
  }
}
main() {
  bool start = false;
  bool stop = false;
  listener (message)
  {
    print ("message from isolate: $message");
    stop = start;
    start = true;
  }
  ReceivePort receive = new ReceivePort();
  receive.listen(listener);
Isolate.spawn(reader, receive.sendPort).then((Isolate) => print("Isolate started"));
  print("Waiting to start");
  while (!start) {}
  print("Waiting to stop");
  while (!stop) {} …我正在尝试将文件上传到独立的 Firebase 存储,但它似乎不起作用。我不断收到以下异常:
E/flutter ( 1527): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
E/flutter ( 1527): #0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
E/flutter ( 1527): #1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
E/flutter ( 1527): #2      FirebaseFirestore.instance (package:cloud_firestore/src/firestore.dart:43:21)
E/flutter ( 1527): #3      new ForumsProvider (package:trumate/src/providers/forums.provider.dart:31:41)
E/flutter ( 1527): #4      CommonProvider.videoPost (package:trumate/src/providers/common.provider.dart:100:29)
E/flutter ( 1527): <asynchronous suspension>
E/flutter ( 1527): #5      CommonProvider.backgroundVideoUpload (package:trumate/src/providers/common.provider.dart:112:5)
E/flutter ( 1527): #6      FlutterIsolate._isolateInitialize.<anonymous closure>.<anonymous closure> (package:flutter_isolate/flutter_isolate.dart:128
我正在使用 flutter_isolate: ^1.0.0+14 插件。但在隔离区中运行 Firebase 查询似乎是问题所在。
我的主要有,await Firebase.initializeApp();所以我不知道我遇到了这样的错误。
我正在将一个非常简单的标签打印应用程序转换为FlutterSwift。该应用程序的一个主要组件是本地缓存的数据库,用于离线访问产品。
虽然我可以在主线程上下载并缓存所有 12,000 多个产品,但对于如此繁重的操作来说,这是一个非常非常糟糕的解决方案,我真的很想避免这种情况,除非作为最后的手段。即使作为最后的手段,如果后台线程无法完成诸如将在线数据缓存到本地数据库等基本任务,我也很难说服雇主让我从 Swift 迁移到 Flutter。
因此,我一直在探索隔离。在此过程中,每当我
"'Window_sendPlatformMessage' (4 arguments) cannot be found"尝试在. 
现在我在github和stackoverflow上读到Isolates 不支持使用插件(可能是包?),除非以一种奇怪的解决方法。我尝试过一个插件,当我尝试使用它时,它只会使我的应用程序崩溃,并出现非常神秘的堆栈跟踪,因此看起来解决方法是唯一的方法。Isolate
我大约一周前才开始使用 flutter 进行构建,大约两天前才开始使用 Isolates,所以目前我对一切的基本了解还很肤浅。在 flutter 存储库上,有一条评论似乎概述了插件问题的解决方法,我希望它允许我使用path_provider和sqflite缓存从 Web API 获取的数据。
更有经验的 Flutter 开发人员能否为我将这个解释分解为婴儿咬伤?
正如下面的答案中所述,sqflite它已经是异步的,并且显然在与主线程不同的线程上运行,因此看起来我的具体情况将通过使用计算来解决我的 dart-pure API 调用以获取 JSON 数据并使用常规sqflite用于存储。尽管如此,仍然需要一个关于不稳定的隔离解决方法的初学者指南,所以我将这个问题留待解决。
我正在使用flutter_isolate插件,并且尝试从SharedPreferences隔离中删除项目。但这似乎不起作用。当我尝试访问该项目时,该项目仍然存在于主线程上。下面是我删除隔离中的项目的代码:
SharedPreferences pref = await SharedPreferences.getInstance();
bool x = await pref.remove('image_post_data');
if (x == true) print('removed image_post_data'); // This is printed out
但是当我尝试image_post_data在主线程上访问时,我仍然得到该值而不是空值。我缺少什么?
我正在开发一个 VoIP 应用程序,但后台处理程序有问题。我想要的是:发送类型为“call”的推送,然后应用程序将显示呼叫 UI,稍后如果收到推送类型“hangup”,应用程序将关闭该呼叫 UI。
在后台处理程序中,我使用单例全局类来通知 StreamController 的挂断事件,并且 CallScreen 小部件将侦听该流以关闭自身。
然后我发现 flutterfire 将为后台处理程序启动另一个隔离(关闭屏幕),因此它将创建另一个单例类 -> 我无法使用这个新的单例类关闭我的 CallScreen UI。
是否可以用 flutterfire 的背景隔离做这样的事情?
伪代码示例:
class SingletonGlobal {
  /// singleton class
  final hangUpStreamController = StreamController<HangUpEvent>.broadcast();
  void addHangupEvent(HangUpEvent event) {
    hangUpStreamController.add(event);
  }
}
class CallScreen extends StatefulWidget {
  //// ...
    @override
    void initState() {
      SingletonGlobal().hangUpStreamController.stream.listen((event) => closeCallUI(event));
    }
}
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  await appInit();
  if (message.data.type = 'hangup') {
    SingletonGlobal().addHangupEvent(hangUpEvent);
}
我尝试了 Nitrodon 的解决方案。但正如我提到的, _firebaseMessagingBackgroundHandler 将创建我的SingleGlobal类的另一个实例。我不知道为什么。 …
我正在使用flutter_downloader包通过我的应用程序下载文件。进度通知效果很好。但我的ReceivePort没有监听进度。
  final ReceivePort port = ReceivePort();
     @override
  void initState() {
    super.initState();
     IsolateNameServer.registerPortWithName(
        port.sendPort, 'downloader_sendport');
     port.listen((dynamic data) async {
       log('data: $data');  // don't work
     });
     FlutterDownloader.registerCallback(downloadCallback);
   }
@pragma('vm:entry-point')
  static void downloadCallback(
      String id, DownloadTaskStatus status, int progress) {
    log("downloadCallback => $id, $status, $progress"); // works
    final SendPort? send =
        IsolateNameServer.lookupPortByName('downloader_sendport');
   
    send?.send([id, status, progress]);
  }