void initState() {
super.initState();
FlutterBoost.singleton.registerPageBuilders({
‘flutterbus://flutterFirstPage’: (pageName, params, _) {
print(“first flutterPage params:KaTeX parse error: Expected 'EOF', got '}' at position 35: …n FirstPage(); }̲, 'flutterbus:/…params”);
…
return SecondPage();
},
});
FlutterBoost.handleOnStartPage();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‘Flutter Boost example’,
builder: FlutterBoost.init(),
home: Container());
}
安卓原生项目中使用FlutterBoost
Flutter引擎加载及FlutterBoostPlugin初始化
首先,根据FlutterBoost给的例子我们原生项目的Application需要继承FlutterApplication
,其实这个不是必须的,FlutterApplication
中主要是在onCreate方法中初始化加载flutter.so库,该操作我们可以在适当的地方自己来加即可。
其次,FlutterBoost的example中在自定义的Application的onCreate方法中初始化FlutterBoostPlugin,这个我们可以提取出来放到一个单独的类里。
基于以上两点我实现了一个工具类用来执行FlutterBoost的初始化
public class FlutterMediator {
public static void init(final Application app) {
//此处必须启动初始化,主要是载入Flutter引擎文件
FlutterMain.startInitialization(app);
FlutterBoostPlugin.init(new IPlatform() {
@Override
public Application getApplication() {
return app;
}
@Override
public Activity getMainActivity() {
return MainActivity.sRef.get();
}
@Override
public boolean isDebug() {
return true;
}
@Override
public boolean startActivity(Context context, String url, int requestCode) {
Debuger.log(“startActivity url=”+url);
return PageRouter.openPageByUrl(context,url,requestCode);
}
@Override
public Map getSettings() {
return null;
}
});
}
}
这样,我们在原生项目中的自定义Application的onCreate方法中只需要调用FlutterMediator.init(this);
方法即可完成FlutterBoost的初始化了。其中MainActivity
应该是一直存在栈底的Activity,一般是我们的首页。
Flutter页面对应Native容器
FlutterBoost初始化完成之后,针对Flutter中的FirstPage
和SecondPage
页面我们需要在原生中创建对应的Native容器,即FlutterBoost中定义的Container,可以是Activity也可以是Fragment,这里我们使用Activity实现,
// Flutter中FirstPage对应的Native container
public class FlutterFirstPageActivity extends BoostFlutterActivity {
private int id = 0;
private String name;
@Override
protected void onCreate(Bundle savedInstanceSt