我最近一直在使用一些flutter插件。许多工具运行完美,但是我几次遇到令人沮丧的错误,通常导致放弃了插件。
这是我得到的最后一个,带有schedule_notifications:
E/flutter (24758): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (24758): MissingPluginException(No implementation found for method getIconResourceId on channel schedule_notifications_app)
E/flutter (24758): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:278:7)
E/flutter (24758): <asynchronous suspension>
E/flutter (24758): #1 _MyAppState._getIconResourceId (<my path>/sandbox/lib/main.dart:67:40)
E/flutter (24758): <asynchronous suspension>
E/flutter (24758): #2 _MyAppState.initState (<my path>/sandbox/lib/main.dart:24:7)
E/flutter (24758): #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3751:58)
E/flutter (24758): #4 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3617:5)
E/flutter (24758): #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2907:14)
E/flutter (24758): #6 Element.updateChild (package:flutter/src/widgets/framework.dart:2710:12)
E/flutter (24758): #7 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:857:16)
E/flutter (24758): #8 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:828:5)
E/flutter (24758): #9 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:774:17)
E/flutter (24758): #10 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2222:19)
E/flutter (24758): #11 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:773:13)
E/flutter (24758): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:662:7)
E/flutter (24758): #13 runApp (package:flutter/src/widgets/binding.dart:704:7)
E/flutter (24758): #14 main (<my path>/sandbox/lib/main.dart:8:16)
E/flutter (24758): #15 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:279:19)
E/flutter (24758): #16 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
D/libGLESv2(24758): DTS_GLAPI : DTS is not allowed for Package : <my package>
D/libGLESv1(24758): DTS_GLAPI : DTS is not allowed for Package : <my package>
D/ViewRootImpl(24758): ViewPostImeInputStage processPointer 0
D/ViewRootImpl(24758): ViewPostImeInputStage processPointer 1
Run Code Online (Sandbox Code Playgroud)
有对SO和GitHub上(类似的问题很多例子看我帖子的结尾),但唯一的东西是永远不会提出解决这些问题是“使用flutter clean,flutter upgrade,flutter packages get然后flutter run”。有时可能就足够了,但并非总是如此 -在我的特殊情况下,我仍然会得到完全相同的错误。
值得注意的是,如果我克隆了插件的整个GitHub存储库,并从此目录中运行示例,那么它确实可以正常工作。但是,如果我尝试重新创建示例项目,则不会,因此我认为我丢失了一些东西,但是呢?
这是我重新创建示例的步骤:
在Android Studio中创建一个新的Flutter项目
添加依赖项 schedule_notifications: ^0.1.8 in pubspec.yaml
单击Flutter命令Packages get并Packages upgrade在Android Studio中
Get packages在出现的Android Studio中单击弹出窗口
将https://github.com/serralvo/schedule_notifications/blob/master/example/lib/main.dart中的代码粘贴到我的main.dart文件中
更改线路import 'package:schedule_notifications_example/time_picker.dart';为import 'time_picker.dart';解决我从Android Studio中得到了错误
在time_picker.dart旁边创建一个文件,main.dart并将其粘贴在https://github.com/serralvo/schedule_notifications/blob/master/example/lib/time_picker.dart中的代码中
在Android Studio中执行项目并获得上述错误
启动Flutter控制台并进入我的项目目录
执行命令flutter clean,flutter upgrade,flutter packages get在控制台
flutter run在控制台中执行命令,仍然出现相同的错误
那么,到底发生了什么?对于某些开发人员或某些项目,某些插件会产生这种行为的原因是什么?我究竟做错了什么 ?
类似问题的示例:
就我而言,我已经(错误地)从MainActivity.kt(onCreate钩子内)删除了这条线
GeneratedPluginRegistrant.registerWith(this)
Run Code Online (Sandbox Code Playgroud)
可能是一个错误,但花费了我很多时间。希望能帮助某人。
小智 5
经过 12 个小时的持续努力在 flutter android 项目中解决这个问题......终于解决了 - 受到“@rahulserver”解决方案的启发,如下
只需将以下代码合并到“MainActivity.java”中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
}
Run Code Online (Sandbox Code Playgroud)
注意:MainActivity 扩展了 FlutterActivity
好吧,我将发布我发现的内容,以防将来对某人有所帮助。但我仍然对进一步的解释感兴趣。
因此,为了使Schedule_notifications插件正常工作,我必须打开示例项目MainActivity.java中的文件。在那里,我注意到一些在我自己的项目中不存在的行:
MethodChannel methodChannel = new MethodChannel(getFlutterView(), "schedule_notifications_app");
methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if (methodCall.method.equals("getIconResourceId")) {
result.success(R.mipmap.ic_launcher);
}
}
});
Run Code Online (Sandbox Code Playgroud)
当我将这些行复制并粘贴到我自己的MainActivity.java文件中(使用正确的导入)时,我的项目终于成功了。
您会注意到,在 中main.dart,我们有以下几行:
static const _platform = const MethodChannel('schedule_notifications_app');
Run Code Online (Sandbox Code Playgroud)
和
iconResourceId = await _platform.invokeMethod('getIconResourceId');
Run Code Online (Sandbox Code Playgroud)
这些链接到 中的新行MainActivity.java。这就是问题的由来。
执行这些步骤会使插件正常工作,但我不确定这是好还是坏的做法。如果这确实是我们应该做的,我必须说这并不明显!我认为至少插件安装文档应该解释它。
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |