【问题标题】:flutter_downloader plugin is not working on existing projectflutter_downloader 插件不适用于现有项目
【发布时间】:2019-11-02 07:53:01
【问题描述】:

我想为现有应用实现下载功能,但它引发异常,我不知道为什么。

我刚刚创建了一个新的flutter项目并安装了flutter_downloader插件,它工作正常,但是当我在现有应用程序中以相同的方式实现该功能时,它会抛出一个错误。

堆栈跟踪在这里:

2019-11-02 13:11:44.655 13280-13280/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 13280
java.lang.IllegalStateException: registrar.activity() must not be null
    at co.paystack.flutterpaystack.FlutterPaystackPlugin$Companion.registerWith(FlutterPaystackPlugin.kt:18)
    at co.paystack.flutterpaystack.FlutterPaystackPlugin.registerWith(Unknown Source:2)
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:30)
    at com.example.app.FlutterCustomApp.registerWith(FlutterCustomApp.java:10)
    at vn.hunghd.flutterdownloader.DownloadWorker.startBackgroundIsolate(DownloadWorker.java:124)
    at vn.hunghd.flutterdownloader.DownloadWorker.access$000(DownloadWorker.java:59)
    at vn.hunghd.flutterdownloader.DownloadWorker$1.run(DownloadWorker.java:97)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:7000)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

这是我的自定义应用程序类:

public class FlutterCustomApp extends FlutterApplication implements PluginRegistry.PluginRegistrantCallback {
@Override
public void registerWith(PluginRegistry registry) {
    GeneratedPluginRegistrant.registerWith(registry);
}

}

我也在AndroidManifest.xml文件中指定了类名。

但是当我启动下载任务时,会抛出上述异常并且应用程序崩溃。我还是不明白为什么会这样。

  • compileSdkVersion: 28
  • compileSdkVersion: 21
  • targetSdkVersion:28
  • gradle 版本:3.5.1

【问题讨论】:

    标签: java android flutter download


    【解决方案1】:

    由于 Flutter 引擎需要与依赖于 android 生命周期的原生 android 通信(如果您查看 FlutterActivity),插件的注册表应该开始在 Activity 而不是应用程序类上注册。

    如果没有其他具体问题或原因,如 JNI 初始化或 Flutter 引擎相关的配置更改,您应该在第一个 Splash Activity 或 BaseActivity onCreate 上调用插件注册:

    class MainActivity: FlutterActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        GeneratedPluginRegistrant.registerWith(this)
      }
    }
    

    【讨论】:

    • 那么这个新创建的flutter项目是如何工作的而不是现有项目呢?我在我的旧项目和新项目上遵循了相同的文档,新项目有效,但旧项目有效。这两个项目也都支持 AndroidX。
    • 这很奇怪。只是想确认您的flutter项目中自动生成的android项目是使用Application类注册还是您尝试使用与flutter项目一起运行的自定义应用程序类成功?通常自动项目创建应该像我粘贴的那样在 Activity 类上注册。
    • 在我成功的项目中,我手动创建了 Application 类并在 AndroidManifest.xml 中指定了它的名称。
    • 在我失败的项目中,我尝试了 2 种方法。一种是我之前提到的相同方法。下一个是使用相同的 MainActivity 类来实现上述方法。两者都因不同的错误而失败
    • 您介意粘贴其他错误日志吗?只是想比较一下是否有任何提示。?
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2021-03-21
    • 2021-03-25
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多