Flutter中local_auth与google_ads插件兼容问题求助
解决Flutter中local_auth与google_ads插件的Activity冲突问题
问题背景
使用local_auth插件实现指纹认证时,必须将MainActivity的父类改为FlutterFragmentActivity才能避免“local_auth plugin requires activity to be a fragmentactivity flutter”错误;但同时使用google_ads插件注册原生广告时,原代码依赖context变量,改为FlutterFragmentActivity后会出现“Unresolved reference: context”错误。
解决方案
FlutterFragmentActivity本身继承自Context相关类,直接用当前Activity实例(this)替代原代码中的context即可解决冲突,具体修改步骤:
- 将MainActivity的父类从
FlutterActivity切换为FlutterFragmentActivity - 把注册原生广告时的
context参数替换为this - 清理无用的import语句
修改后的完整代码
package app.masarifi import io.flutter.embedding.android.FlutterFragmentActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin class MainActivity : FlutterFragmentActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) GoogleMobileAdsPlugin.registerNativeAdFactory( flutterEngine, "listTile", ListTileNativeAdFactory(this) ) GoogleMobileAdsPlugin.registerNativeAdFactory( flutterEngine, "mediumAd", MediumNativeAdFactory(this) ) } override fun cleanUpFlutterEngine(flutterEngine: FlutterEngine) { super.cleanUpFlutterEngine(flutterEngine) GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "listTile") GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "mediumAd") } }
说明
FlutterFragmentActivity是FragmentActivity的子类,完全兼容local_auth插件的要求- 在Activity类中,
this本身就是Context的实例,可直接传递给广告工厂类,无需额外的context变量
内容的提问来源于stack exchange,提问作者hesham shawky
相关产品推荐
相关产品推荐

