自定义FlutterFragment的初始化路由没有生效
问题:在自定义FlutterFragment的configureFlutterEngine方法中初始化页面路由发现一直是'/'
原因:当 configureFlutterEngine
方法被调用时,Flutter 已经完成了初始化并设置了默认的初始路由(通常是 '/'
)。
在 Android 项目中,FlutterFragment
在 onAttach
方法中创建 FlutterEngine
。在 FlutterFragment
的生命周期中,onAttach
方法早于 configureFlutterEngine
方法。也就是说,在 configureFlutterEngine
被调用到之前,FlutterEngine
已经初始化完成并且已经解析了默认的初始路由。
因此,你在 configureFlutterEngine
中设置初始路由,这是在 FlutterEngine
解析默认初始路由之后的事情,这也解释了为什么你的设置没有生效。
也就是说,如果要在的 configureFlutterEngine
方法中设置初始路由,你需要创建自己的 FlutterFragment
并覆盖 provideFlutterEngine
方法。在这个方法中,先创建一个 FlutterEngine
,设置好初始路由,然后再返回它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class CustomFlutterFragment : FlutterFragment() { override fun provideFlutterEngine(context: Context): FlutterEngine { val flutterEngine = FlutterEngine(context) flutterEngine.navigationChannel.setInitialRoute( "/shoppingCart" ) flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) return flutterEngine } override fun configureFlutterEngine( @NonNull flutterEngine: FlutterEngine) { super .configureFlutterEngine(flutterEngine) //GeneratedPluginRegistrant.registerWith(flutterEngine) Log.d( "flutter" , "CustomFlutterFragment configureFlutterEngine: " ) } } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步