gpt4 book ai didi

flutter - 我在 flutter 中使用了 isolate.spawnUri() 并导致了 fatal error

转载 作者:行者123 更新时间:2023-12-03 02:59:16 26 4
gpt4 key购买 nike

这是我的鳕鱼:

  void callTask()async{
Uri uri = Uri.parse('package:flutter_bedrock/base_framework/utils/isolate/factory/proxy_isolate.dart');

final ReceivePort receivePort = ReceivePort();
Isolate isolate = await Isolate.spawnUri(uri,
[], receivePort.sendPort);
SendPort childPort;
receivePort.listen((message) {
print('msg from proxy $message');
if(message[0] == kSendPortKey){
childPort = message[1];
childPort.send([kTaskKey,'test']);
}
});



}
我在 flutter 时调用 callTask​​() ,并记录以下内容:
E/flutter (14779): [ERROR:flutter/runtime/dart_isolate.cc(864)] Unhandled exception:
E/flutter (14779): error: native function 'Window_setNeedsReportTimings' (2 arguments) cannot be found
E/flutter (14779): #0 Window.onReportTimings= (dart:ui/window.dart:964:29)
E/flutter (14779): #1 SchedulerBinding.addTimingsCallback (package:flutter/src/scheduler/binding.dart:234:14)
E/flutter (14779): #2 SchedulerBinding.initInstances (package:flutter/src/scheduler/binding.dart:210:7)
E/flutter (14779): #3 PaintingBinding.initInstances (package:flutter/src/painting/binding.dart:21:11)
E/flutter (14779): #4 SemanticsBinding.initInstances (package:flutter/src/semantics/binding.dart:22:11)
E/flutter (14779): #5 RendererBinding.initInstances (package:flutter/src/rendering/binding.dart:30:11)
E/flutter (14779): #6 WidgetsBinding.initInstances (package:flutter/src/widgets/binding.dart:255:11)
E/flutter (14779): #7 new BindingBase (package:flutter/src/foundation/binding.dart:57:5)
E/flutter (14779): #8 new _WidgetsFlutterBinding&BindingBase&GestureBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #9 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #10 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #11 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #12 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #13 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #14 new _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #15 new WidgetsFlutterBinding (package:flutter/src/widgets/binding.dart)
E/flutter (14779): #16 WidgetsFlutterBinding.ensureInitialized (package:flutter/src/widgets/binding.dart:1203:7)
E/flutter (14779): #17 main (package:flutter_bedrock/main.dart:24:25)
E/flutter (14779): #18 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter (14779): #19 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
在主要隔离中:

void main(){
WidgetsFlutterBinding.ensureInitialized();
IsolatePoolProxy.getInstance().callTask();
}


import 'dart:isolate';


const int kSendPortKey = 6633;

const int kTaskKey = 8844;
///
const String kMethodName = 'kMethodName';
const String kNameArgs = 'kNameArgs';

class IsolatePoolProxy{

IsolatePoolProxy._();

static IsolatePoolProxy _instance;

factory IsolatePoolProxy() => getInstance();

static IsolatePoolProxy getInstance(){
if(_instance == null){
_instance = IsolatePoolProxy._();
}
return _instance;
}


void callTask()async{
Uri uri = Uri.parse('package:flutter_bedrock/base_framework/utils/isolate/factory/proxy_isolate.dart');

final ReceivePort receivePort = ReceivePort();
Isolate isolate = await Isolate.spawnUri(uri,
[], receivePort.sendPort);
SendPort childPort;
receivePort.listen((message) {
print('msg from proxy $message');
if(message[0] == kSendPortKey){
childPort = message[1];
childPort.send([kTaskKey,'test']);
}
});



}


}

在 proxy_isolate.dart 文件的子隔离中:
import 'dart:async';
import 'dart:isolate';


const int kSendPortKey = 6633;

const int kTaskKey = 8844;

///
const String kMethodName = 'kMethodName';
const String kNameArgs = 'kNameArgs';



final List<String> orders = [];

void main( args,SendPort mainPort)async{

///connect with main isolate
final ReceivePort receivePort = ReceivePort();
final SendPort sendPort = receivePort.sendPort;
receivePort.listen((message) {
print('msg from main $message');
if(message[0] == kTaskKey){
orders.add(message[1]);
}

});

mainPort.send([kSendPortKey,sendPort]);

}
E/flutter(14779):[错误:flutter/runtime/dart_isolate.cc(864)]未处理的异常:
E/flutter(14779):错误:找不到 native 函数“Window_setNeedsReportTimings”(2 个参数)

最佳答案

您不能使用 dart:ui在隔离物中。
this issue在 flutter 的 github 上。
似乎没有解决方法。你不能那样做,找到另一种方法来做你想做的事。

关于flutter - 我在 flutter 中使用了 isolate.spawnUri() 并导致了 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com