Flutter:没有声明顶级 getter 'onStart'

Kat*_* Jo 4 onstart background-service flutter

我修改了包中给出的示例代码flutter_background_service: ^2.4.5来获取BuildContext。从那时起,我收到此错误消息

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: NoSuchMethodError: No top-level getter 'onStart' declared.
E/flutter (26872): Receiver: top-level
E/flutter (26872): Tried calling: onStart
E/flutter (26872): #0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:216:5)
E/flutter (26872): #1      _getCallbackFromHandle (dart:ui/natives.dart:94:76)
E/flutter (26872): #2      PluginUtilities.getCallbackFromHandle.<anonymous closure> (dart:ui/plugins.dart:82:23)
E/flutter (26872): #3      _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:524:23)
E/flutter (26872): #4      PluginUtilities.getCallbackFromHandle (dart:ui/plugins.dart:81:27)
E/flutter (26872): #5      _entrypoint (package:flutter_background_service_android/flutter_background_service_android.dart:13:35)
E/flutter (26872): <asynchronous suspension>
Run Code Online (Sandbox Code Playgroud)

我猜是因为我改变了onStart方法的结构?但我确实需要访问 BuildContext,所以我不知道如何解决这个错误。

我的代码:

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: NoSuchMethodError: No top-level getter 'onStart' declared.
E/flutter (26872): Receiver: top-level
E/flutter (26872): Tried calling: onStart
E/flutter (26872): #0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:216:5)
E/flutter (26872): #1      _getCallbackFromHandle (dart:ui/natives.dart:94:76)
E/flutter (26872): #2      PluginUtilities.getCallbackFromHandle.<anonymous closure> (dart:ui/plugins.dart:82:23)
E/flutter (26872): #3      _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:524:23)
E/flutter (26872): #4      PluginUtilities.getCallbackFromHandle (dart:ui/plugins.dart:81:27)
E/flutter (26872): #5      _entrypoint (package:flutter_background_service_android/flutter_background_service_android.dart:13:35)
E/flutter (26872): <asynchronous suspension>
Run Code Online (Sandbox Code Playgroud)

我搜索了其他答案,他们说“将处理程序置于全局范围内”,但没有解释我如何做到这一点。关于如何解决这个问题有什么想法吗?

小智 5

我在尝试在发布模式下使用该应用程序时遇到了同样的错误,但在调试模式下使用该应用程序时它可以工作。当你将 onStart 函数设置为全局时会发生什么?

另一种解决方案(我认为最好的解决方案)是在 onStart 函数上方添加 @pragma('vm:entry-point') ,它给出:

@pragma('vm:entry-point')
void onStart(ServiceInstance service){
...
} 
Run Code Online (Sandbox Code Playgroud)

通常应该可以解决您的问题。

让我知道它是否有效:)