[英]Error: PlatformException(no_fragment_activity, local_auth plugin requires activity to be a FragmentActivity., null)
Getting this error while using local_auth version 0.6.0 It's working fine for iOS but getting this error in android.使用 local_auth 版本 0.6.0 时出现此错误 它对 iOS 工作正常,但在 android 中出现此错误。 Already have implemented
class MainActivity: FlutterFragmentActivity()
but still getting this issue已经实现
class MainActivity: FlutterFragmentActivity()
但仍然遇到这个问题
This is what i did to solve this issue这就是我为解决这个问题所做的
Change MainActivity.kt
as below更改
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);
}
}
However, after changing this MainActivity.kt
, I also faced some other issue with the Theme.AppCompat
.但是,在更改此
MainActivity.kt
,我还面临Theme.AppCompat
其他一些问题。 Check this out https://gist.github.com/akifarhan/f70a2c777651f2ea61a15eb92a5939c1 for the solution.请查看https://gist.github.com/akifarhan/f70a2c777651f2ea61a15eb92a5939c1以获取解决方案。
change your main activity to override FlutterFragmentActivity更改您的主要活动以覆盖 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)
}
}
if you are using flutter embedding version 2如果您使用的是颤振嵌入版本 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)
}
}
I am using local_auth 0.6.2+3我正在使用 local_auth 0.6.2+3
My MainActivity.kt我的主活动.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);
}
}
I was using SplashScreenUntilFirstFrame meta tag, Removing it from my main/AndroidManifest.xml works absolutely fine now.我正在使用 SplashScreenUntilFirstFrame 元标记,从我的 main/AndroidManifest.xml 中删除它现在工作得很好。
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true"/>
Flutter details颤振细节
Flutter version 1.22.4 at /Users/macbookpro/Desktop/development/flutter Flutter 1.22.4 版位于 /Users/macbookpro/Desktop/development/flutter
If you are using java then change your main activity to this如果您使用的是 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{
}
2nd answer worked fine if we remove @NotNull like如果我们删除@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)
}
}
Add the following line to the dependencies in your app level build.gradle
file: build.gradle
添加到应用级别build.gradle
文件中的依赖build.gradle
:
dependencies{
api "androidx.core:core:1.1.0-aplha03"
}
In my case, i forgot to change in AndroidManifest.xml file.就我而言,我忘记更改 AndroidManifest.xml 文件。 Complete changes for reference
完整修改供参考
MainActivity.java主活动.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"));
}
}
Then然后
AndroidManifest.xml AndroidManifest.xml
From从
<application
android:label="<name>"
android:icon="@mipmap/ic_launcher">
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
....
To到
<application
android:label="<name>"
android:icon="@mipmap/ic_launcher">
<activity
android:name="io.flutter.embedding.android.FlutterFragmentActivity"
....
I tried adding the code in MainActivity.kt.我尝试在 MainActivity.kt 中添加代码。 For some reason, it doesn't take the code from MainActivity.kt and only searches for MainActivity.java.
出于某种原因,它没有从 MainActivity.kt 中获取代码而只搜索 MainActivity.java。 So the following code in MainActivity.java fixed the issue for me.
所以 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);
}
}
From the docs -https://pub.dev/documentation/local_auth/latest/来自文档-https://pub.dev/documentation/local_auth/latest/
Simply use the code below in your MainActivity.kt只需在 MainActivity.kt 中使用以下代码
package [package ID here]
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
Uninstall your current build of the app and then rebuild again卸载当前版本的应用程序,然后再次重建
By the way, ensure you're not making multiple calls for顺便说一句,确保您没有多次调用
auth.authenticate(...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.