Bootstrap

Flutter混合开发二-FlutterBoost使用介绍(1)

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中的FirstPageSecondPage页面我们需要在原生中创建对应的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

;