我最近一直在使用一些flutter插件。许多工具运行良好,但是我几次遇到令人沮丧的错误,通常导致放弃了插件。
这是我最后得到的schedule_notifications:
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range
SO和GitHub上有许多类似问题的示例(请参阅我的帖子),但唯一建议解决这些问题的方法是“使用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
,{{ 1}},flutter clean
,然后是flutter upgrade
”。 有时可能就足够了,但并不总是-在我的情况下,我仍然会得到完全相同的错误。
值得注意的是,如果我克隆了插件的整个GitHub存储库,并从此目录中运行示例,那么它将很好地工作。但是,如果我尝试重新创建示例项目,则不会,所以我认为我丢失了一些东西,但是呢?
以下是我重新创建示例的步骤:
在Android Studio中创建一个新的Flutter项目
添加依赖项flutter packages get
在Android Studio中单击Flutter命令flutter run
和schedule_notifications: ^0.1.8 in pubspec.yaml
在Android Studio中点击弹出Packages get
将https://github.com/serralvo/schedule_notifications/blob/master/example/lib/main.dart中的代码粘贴到我的Packages upgrade
文件中
将行Get packages
更改为main.dart
,以解决我从Android Studio中收到的错误
在import 'package:schedule_notifications_example/time_picker.dart';
旁边创建文件import 'time_picker.dart';
并将其粘贴到https://github.com/serralvo/schedule_notifications/blob/master/example/lib/time_picker.dart中的代码
在Android Studio中执行项目并获得上述错误
启动Flutter控制台并进入我的项目目录
在控制台中执行命令time_picker.dart
,main.dart
,flutter clean
在控制台中执行命令flutter upgrade
仍然会得到相同的错误
那么,到底发生了什么?对于某些开发人员或某些项目,某些插件会产生这种行为的原因是什么?我在做什么错了?
类似问题的示例:
答案 0 :(得分:5)
经过12个小时的不懈努力,在一个扑朔迷离的android项目中解决了这个问题...终于解决了-受到“ @rahulserver”解决方案的启发,如下所示
只需在“ MainActivity.java”中合并以下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
}
注意:MainActivity扩展了FlutterActivity
答案 1 :(得分:3)
我遇到了同样的问题,花了我一段时间了解它为什么会发生。 该解决方案很简单,只需杀死该应用程序并运行一个新的应用程序即可。
答案 2 :(得分:1)
好的,我正在发布我发现的内容,以防将来可能对某人有所帮助。 但是我仍然对进一步的解释感兴趣。
因此,要使schedule_notifications插件起作用,我必须在example project中打开文件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);
}
}
});
当我将这些行复制并粘贴到自己的MainActivity.java
文件中(带有正确的导入)时,我的项目终于可以工作了。
您会注意到,在main.dart
中,我们有以下几行:
static const _platform = const MethodChannel('schedule_notifications_app');
和
iconResourceId = await _platform.invokeMethod('getIconResourceId');
这些链接到MainActivity.java
中的新行。这就是问题的根源。
执行这些步骤可以使插件正常工作,但是我不确定这是好方法还是糟糕的方法。如果真的是我们应该做的,我必须说一下相当不明显!我认为至少插件安装文档应该对此进行解释。
答案 3 :(得分:0)
添加新插件时,需要重新构建应用程序,热重启不会构建应用程序,并且除非重新构建,否则新添加的项目将不包含在项目中。
答案 4 :(得分:0)
就我而言,我(错误地)从MainActivity.kt
(在onCreate
挂钩内)删除了这一行
GeneratedPluginRegistrant.registerWith(this)
可能是个错误,但花了我很多时间。希望可以帮助某人。
答案 5 :(得分:0)
执行flutter clean
和flutter pub get
。在pubspec.yaml
文件中添加任何插件语句后,您需要执行flutter packages get
命令。停止运行应用程序,卸载然后重新构建对我来说是有效的。