繁体   English   中英

错误:PlatformException(no_fragment_activity,local_auth 插件要求活动是 FragmentActivity。,null)

[英]Error: PlatformException(no_fragment_activity, local_auth plugin requires activity to be a FragmentActivity., null)

使用 local_auth 版本 0.6.0 时出现此错误 它对 iOS 工作正常,但在 android 中出现此错误。 已经实现class MainActivity: FlutterFragmentActivity()但仍然遇到这个问题

这就是我为解决这个问题所做的

更改MainActivity.kt如下

package com.[your.package]

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

但是,在更改此MainActivity.kt ,我还面临Theme.AppCompat其他一些问题。 请查看https://gist.github.com/akifarhan/f70a2c777651f2ea61a15eb92a5939c1以获取解决方案。

更改您的主要活动以覆盖 FlutterFragmentActivity

import android.os.Bundle
import io.flutter.app.FlutterFragmentActivity
import io.flutter.plugins.GeneratedPluginRegistrant

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

如果您使用的是颤振嵌入版本 2

import androidx.annotation.NonNull
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
   override fun configureFlutterEngine(@NonNull flutterEngine: 
     FlutterEngine) {
     GeneratedPluginRegistrant.registerWith(flutterEngine)
   }
}

我正在使用 local_auth 0.6.2+3

我的主活动.kt

 package xx.xx.xxx
 import androidx.annotation.NonNull;
 import io.flutter.embedding.android.FlutterFragmentActivity
 import io.flutter.embedding.engine.FlutterEngine
 import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
  override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
   }
}

我正在使用 SplashScreenUntilFirstFrame 元标记,从我的 main/AndroidManifest.xml 中删除它现在工作得很好。

<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true"/>

颤振细节

Flutter 1.22.4 版位于 /Users/macbookpro/Desktop/development/flutter

  • 框架修订 1aafb3a8b9(4 周前),2020-11-13 09:59:28 -0800
  • 引擎修订版 2c956a31c0
  • 飞镖版本 2.10.4
  • local_auth:^0.6.3+4

如果您使用的是 java,那么将您的主要活动更改为此

import androidx.annotation.NonNull;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterFragmentActivity{
}

如果我们删除@NotNull 之类的,第二个答案就可以正常工作

import androidx.annotation.NonNull
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
   override fun configureFlutterEngine( flutterEngine: 
     FlutterEngine) {
     GeneratedPluginRegistrant.registerWith(flutterEngine)
   }
}

build.gradle添加到应用级别build.gradle文件中的依赖build.gradle

dependencies{
    api "androidx.core:core:1.1.0-aplha03"
}

就我而言,我忘记更改 AndroidManifest.xml 文件。 完整修改供参考

主活动.java

import android.os.Bundle;
import io.flutter.app.FlutterFragmentActivity;
import io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin;
import io.flutter.plugins.localauth.LocalAuthPlugin;

public class MainActivity extends FlutterFragmentActivity  {
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FlutterAndroidLifecyclePlugin.registerWith(
                registrarFor(
                        "io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin"));
        LocalAuthPlugin.registerWith(registrarFor("io.flutter.plugins.localauth.LocalAuthPlugin"));
    }
}

然后

AndroidManifest.xml

  <application
        android:label="<name>"
        android:icon="@mipmap/ic_launcher">
        <activity
           android:name="io.flutter.embedding.android.FlutterActivity"
           ....

  <application
        android:label="<name>"
        android:icon="@mipmap/ic_launcher">
        <activity
           android:name="io.flutter.embedding.android.FlutterFragmentActivity"
           ....

我尝试在 MainActivity.kt 中添加代码。 出于某种原因,它没有从 MainActivity.kt 中获取代码而只搜索 MainActivity.java。 所以 MainActivity.java 中的以下代码为我解决了这个问题。

主活动.java

package com.<package_name>;

import android.os.Bundle;
import io.flutter.embedding.android.FlutterFragmentActivity;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin;
import io.flutter.plugins.localauth.LocalAuthPlugin;

public class MainActivity extends FlutterFragmentActivity {

    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) 
    {
      GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

来自文档-https://pub.dev/documentation/local_auth/latest/

只需在 MainActivity.kt 中使用以下代码

 package [package ID here]

    import io.flutter.embedding.android.FlutterFragmentActivity
    
    class MainActivity: FlutterFragmentActivity() {
    }

卸载当前版本的应用程序,然后再次重建

顺便说一句,确保您没有多次调用

 auth.authenticate(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM