flutter_downloader插件不适用于现有项目

时间:2019-11-02 07:53:01

标签: java android flutter download

我想将下载功能实现到我现有的应用程序中,但是它引发了异常,我无法弄清原因。

我重新创建了一个新的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
  • 渐变版本:3.5.1

1 个答案:

答案 0 :(得分:0)

由于需要flutter引擎与依赖android生命周期的本机android通信(如果您查看FlutterActivity),因此插件的注册表应开始在活动上注册,而不是在应用程序类上注册

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

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