使用Flutter_Boost进行混合开发-Android
- 创建Flutter项目,用 flutter create -t module fluttr_test 命令来创建,flutter_test为我们的Flutter的工程名
用Android studio打开刚才创建的功能,我们刚创建好的时候不会有.android与.ios这两个目录的,用Android studio打开构建一下就出来了(也可以用flutter make-host-app-editable命令来创建出来),.android与.ios中都存在一个Flutter目录,这个很重要,我试过只有通过flutter create -t module XXX命令生成出来的才有这个Flutter的文件夹,直接创建出来的没有,Flutter这个是我们flutter的库项目,Android用来生成aar,iOS用来生成framework
2.接下来就是依赖了,添加flutter的依赖
这里要注意层级关系,要和flutter:一个层级
flutter_boost: ^0.0.415
添加完依赖后,在flutter中初始化flutter_boost,配置路由
import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart';
import 'package:fluttr_test/firstpage.dart';
import 'package:fluttr_test/second.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyApp> {
@override
void initState() {
// TODO: implement initState
super.initState();
FlutterBoost.singleton.registerPageBuilders({
'first':(pageName,params,_){//格式为路由名称:(pageName,params,_)pageName是路由名称,params为原生传递过来的参数
return FirstPage();//返回一个widget
},
'second':(pageNmae,params,_){
return Second();
},
});
FlutterBoost.handleOnStartPage();//查询当前的顶层页面,并加载它
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'oa',
builder: FlutterBoost.init(),
home: Container(),
);
}
}
- flutter配置完了,接下来就是配置Android
- settings.gradle中添加,这里我是把flutter_test工程放在和Android工程同一级目录下的(是与project同一级,不是与module同一级),这里如果报文件找不到那就是你的路径写错了,重新检查一下路径
这里切记flutter一定要生成出.android与.ios两个文件
setBinding(new Binding(gradle:this))
evaluate(new File('../flutter_test/.android/include_flutter.groovy'))
- app.gradle中配置flutter与flutter_boost
implementation project(path:':flutter')
implementation project(":flutter_boost")
- Application中进行初始化
FlutterMain.startInitialization(this);
FlutterBoostPlugin.init(new IPlatform() {
@Override
public Application getApplication() {
return FunnyApplication.this;
}
/**
* 获取应用入口的Activity,这个Activity在应用交互期间应该是一直在栈底的
* @return
*/
@Override
public Activity getMainActivity() {
if (MainActivity.sRef != null) {
return MainActivity.sRef.get