一、flutter-boost的集成:
截至今日,flutter-boost的最新版本应该是V3.0-preview.9,所以接下来将会在该版本的基础上简单介绍它的集成与使用。
flutter端所需要做的:
(1)在flutter module下的pubspec.yaml中添加flutter-boost的依赖,如下图:
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.0
flutter_boost:
git:
url: 'https://github.com/alibaba/flutter_boost.git'
ref: 'v3.0-preview.9'
(2)如果工程中已经存在一个你自定义的WidgetsFlutterBinding,那么可直接将BoostFlutterBinding混入你已实现的类;如果没有自定义的需求那么以下代码可供参考:
class CustomFlutterBinding extends WidgetsFlutterBinding
with BoostFlutterBinding {}
BoostFlutterBinding用于接管flutter app的生命周期,务必接入!!!
(3)在dart入口函数中初始化BoostFlutterBinding,如下所示:
class CustomFlutterBinding extends WidgetsFlutterBinding
with BoostFlutterBinding {}
void main() {
//在runApp之前确保BoostFlutterBinding初始化
CustomFlutterBinding();
runApp(MyApp());
if (Platform.isAndroid) {
SystemUiOverlayStyle systemUiOverlayStyle =
SystemUiOverlayStyle(statusBarColor: Colors.blue);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
}
至此,flutter部分的flutter-boost已经集成完毕。
android端需要做的:
(1)在app的build.gradle中增加以下依赖:
implementation project(':flutter_boost')
implementation project(path: ':flutter_boost')
(2)在androidmanifest中添加以下代码(具体用途将会在下面基础使用中说明):
(3)在MyApplication(自己定义的application中)的onCreate()方法中添加以下代码:
//alibaba flutter_booster android端配置集成
FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {
@Override
public void pushNativeRoute(FlutterBoostRouteOptions options) {
//这里的ToAndroidActivity是自己定义的,作为flutter跳原生的页面
Intent intent = new Intent(FlutterBoost.instance().currentActivity(), ToAndroidActivity.class);
FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
}
@Override
public void pushFlutterRoute(FlutterBoostRouteOptions options) {
//这里的ToFlutterActivity是自己定义的,作为原生跳flutter页面的容器
Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(ToFlutterActivity.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 -> {
});
到此android端就集成完毕了,接下来会说他的使用。
注意:flutter-boost暂不支持null-safety,如果想要使用请保证dart sdk版本低于2.9以及flutter版本低于flutter2.0!!!!!
二、flutter-boost的使用:
使用包含基础使用(单纯跳转和携带参数),以及结合methodChannel进行跳转后的与安卓原生的方法交互及数据传递。
(1)基础使用:
这里不做太多介绍,给出alibaba的文档:
https://github.com/alibaba/flutter_boost/blob/master/docs/routeAPI.md
唯一想说的就是,路由跳转的声明,代码如下:
//flutter页面入口
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
///路由表
static Map routerMap = {
'addDevicesPage': (settings, uniqueId) {
return PageRouteBuilder(
settings: settings,
pageBuilder: (_, __, ___) {
return AddDevicesPage(title: "添加设备");
});
},
'settingsPage': (settings, uniqueId) {
return PageRouteBuilder(
settings: settings,
pageBuilder: (_, __, ___) {
return SettingsPage(title: "设置");
});
},
'personalInfoPage': (settings, uniqueId) {
return PageRouteBuilder(
settings: settings,
pageBuilder: (_, __, ___) {
return SettingsPage(title: "个人资料");
});
},
};
Route routeFactory(RouteSettings settings, String uniqueId) {
FlutterBoostRouteFactory func = routerMap[settings.name];
if (func == null) {
return null;
}
return func(settings, uniqueId);
}
@override
Widget build(BuildContext context) {
return FlutterBoostApp(routeFactory);
}
}
(2)结合methodChannel进行跳转后的与安卓原生的方法交互及数据传递:
大部分场景不会只做简单的跳转,虽然flutter也提供了网络请求框架,但是个人还是倾向于使用android原生进行数据层的 *** 作,这样就涉及到了利用MethodChannel进行原生方法的调用,具体的用法,在我另一篇文章《糅合flutter-boost与MethodChannel的使用方法》。
最后,本人也是flutter初学者,在踩坑中学习,记录自己的flutter学习过程。希望能和大家一起进步。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)