![](/img/trans.png)
[英]PlatformException(no_fragment_activity, local_auth plugin requires activity to be a FragmentActivity., null) in flutter
[英]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
如果您使用的是 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.