1.创建flutter module
flutter create -t module flutter_module
2.flutter模块配置flutter_boost框架
flutter_boost:
git:
url: 'https://github.com/alibaba/flutter_boost.git'
ref: '5.0.1'
3. 执行flutter脚本,更新组件
flutter pub get
4.配置项目setting.gradle,注意项目目录路径
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'./[project root ]/[flutter file dir path]/.android/include_flutter.groovy'
))
include ':flutter_ntt'
project(':flutter_ntt').projectDir = new File('./flutter_ntt')
5.app.gradle中配置flutter
implementation project(':flutter')
implementation project(':flutter_boost')
6.在app的Androidmanifest.xml中配置
<activity
android:name="com.idlefish.flutterboost.containers.FlutterBoostActivity"
android:theme="@style/Theme.AppCompat"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize" >
</activity>
<meta-data android:name="flutterEmbedding"
android:value="2">
</meta-data>
7.同步 gradle 目前flutter对应的gradle版本只能小于8.0
8.flutter main.dart代码,已适配 flutter boost:5.0.1
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart';
void main() {
///这里的CustomFlutterBinding调用务必不可缺少,用于控制Boost状态的resume和pause
CustomFlutterBinding();
runApp(MyApp());
}
///创建一个自定义的Binding,继承和with的关系如下,里面什么都不用写
class CustomFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
/// 由于很多同学说没有跳转动画,这里是因为之前exmaple里面用的是 [PageRouteBuilder],
/// 其实这里是可以自定义的,和Boost没太多关系,比如我想用类似iOS平台的动画,
/// 那么只需要像下面这样写成 [CupertinoPageRoute] 即可
/// (这里全写成[MaterialPageRoute]也行,这里只不过用[CupertinoPageRoute]举例子)
///
/// 注意,如果需要push的时候,两个页面都需要动的话,
/// (就是像iOS native那样,在push的时候,前面一个页面也会向左推一段距离)
/// 那么前后两个页面都必须是遵循CupertinoRouteTransitionMixin的路由
/// 简单来说,就两个页面都是CupertinoPageRoute就好
/// 如果用MaterialPageRoute的话同理
Map<String, dynamic> routerMap = {
'/': (settings, uniqueId) {
return CupertinoPageRoute(
settings: settings,
builder: (_) {
Map<String, dynamic> data = settings.arguments as Map<String, dynamic>;
return MainPage(
data: data,
);
});
},
'mainPage': (settings, uniqueId) {
return CupertinoPageRoute(
settings: settings,
builder: (_) {
Map<String, dynamic> data = settings.arguments as Map<String, dynamic>;
return MainPage(
data: data,
);
});
},
'simplePage': (settings, uniqueId) {
return CupertinoPageRoute(
settings: settings,
builder: (_) {
Map<String, dynamic> data = settings.arguments as Map<String, dynamic>;
return SimplePage(
data: data,
);
});
},
};
Route<dynamic>? routeFactory(RouteSettings settings, String uniqueId) {
Logger.error('routeFactory =====> settings ${settings}, uniqueId ${uniqueId}');
FlutterBoostRouteFactory func = routerMap[settings.name] as FlutterBoostRouteFactory;
if (func == null) return null;
return func(settings, uniqueId);
}
Widget appBuilder(Widget home) {
return MaterialApp(
home: home,
debugShowCheckedModeBanner: true,
///必须加上builder参数,否则showDialog等会出问题
builder: (_, __) {
return home;
},
);
}
@override
Widget build(BuildContext context) {
Logger.error('build =====> 1111111 ');
return FlutterBoostApp((settings, uniqueId) => routeFactory(settings, uniqueId!), appBuilder: appBuilder, initialRoute: 'mainPage');
}
}
class MainPage extends StatelessWidget {
const MainPage({super.key, required Object data});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('Main Page')),
);
}
}
class SimplePage extends StatelessWidget {
const SimplePage({super.key, required Object data});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('SimplePage')),
);
}
}
9.Application中添加初始化
@Override
public void onCreate() {
super.onCreate();
//
initFlutter();
}
/**
* 初始化FlutterBoost
*/
private void initFlutter() {
FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {
@Override
public void pushNativeRoute(FlutterBoostRouteOptions options) {
Log.d("FlutterBoost", "pushNativeRoute: " + options.pageName());
}
@Override
public void pushFlutterRoute(FlutterBoostRouteOptions options) {
Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class)
.backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
.destroyEngineWithActivity(false)
.uniqueId(options.uniqueId())
.url(options.pageName())
.urlParams(options.arguments())
.build(FlutterBoost.instance().currentActivity());
FlutterBoost.instance().currentActivity().startActivity(intent);
}
}, engine -> {
});
}
10.测试代码
private void test(){
//打开一个页
FlutterBoostRouteOptions options = new FlutterBoostRouteOptions.Builder()
.pageName("mainPage")
.arguments(new HashMap<>())
.requestCode(1111)
.uniqueId(UUID.randomUUID().toString())
.build();
FlutterBoost.instance().open(options);
}
11.其他flutter boost功能请参考官方开源文档