https://github.com/alibaba/flutter_boost
第三方库
一.Flutter与Android 交互框架之flutter_boost使用(一)集成篇
二.Flutter与Android 交互框架之flutter_boost使用(二)冲突问题解决篇
三.Flutter与Android 交互框架之flutter_boost使用(三)交互篇
我们新建一个文件夹FlutterBoostExample,这个文件夹下面放置另外三个文件夹。 另外三个分别是您的Android工程,iOS工程,以及需要接入的flutter module, 这个地方注意,flutter一定是module,而不是工程项目,判断是不是module的方法就是看其是否有android和ios文件夹, 如果没有,那就是module,才是正确的
在这里我们命名为BoostTestAndroid
,BoostTestIOS
,以及flutter_module
注意:这三个工程在同级目录下
现在可以开始搞事情了
FlutterBoost
依赖到yaml
文件
默认版本: flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: 'v3.0-preview.18'
空安全版本:
flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: 'v3.0-null-safety-preview.18'
之后在flutter工程下运行flutter pub get
dart端就集成完毕了,然后可以在dart端放上一些代码,以下代码基于example3.0
//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding
的自定义Binding,则只需要将其with上BoostFlutterBinding
//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding
的做法 //BoostFlutterBinding
用于接管Flutter App的生命周期,必须得接入的
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 {
/// 由于很多同学说没有跳转动画,这里是因为之前exmaple里面用的是 [PageRouteBuilder],
/// 其实这里是可以自定义的,和Boost没太多关系,比如我想用类似iOS平台的动画,
/// 那么只需要像下面这样写成 [CupertinoPageRoute] 即可
/// (这里全写成[MaterialPageRoute]也行,这里只不过用[CupertinoPageRoute]举例子)
///
/// 注意,如果需要push的时候,两个页面都需要动的话,
/// (就是像iOS native那样,在push的时候,前面一个页面也会向左推一段距离)
/// 那么前后两个页面都必须是遵循CupertinoRouteTransitionMixin的路由
/// 简单来说,就两个页面都是CupertinoPageRoute就好
/// 如果用MaterialPageRoute的话同理
Map routerMap = {
'mainPage': (RouteSettings settings, String uniqueId) {
return CupertinoPageRoute(
settings: settings,
builder: (_) {
Map map = settings.arguments as Map ;
String data = map['data'] as String;
return MainPage(
data: data,
);
});
},
'simplePage': (settings, uniqueId) {
return CupertinoPageRoute(
settings: settings,
builder: (_) {
Map map = settings.arguments as Map;
String data = map['data'] as String;
return SimplePage(
data: data,
);
});
},
};
Route routeFactory(RouteSettings settings, String uniqueId) {
FlutterBoostRouteFactory func = routerMap[settings.name] as FlutterBoostRouteFactory;
return func(settings, uniqueId);
}
Widget appBuilder(Widget home) {
return MaterialApp(
home: home,
debugShowCheckedModeBanner: true,
///必须加上builder参数,否则showDialog等会出问题
builder: (_, __) {
return home;
},
);
}
@override
Widget build(BuildContext context) {
return FlutterBoostApp(
routeFactory,
appBuilder: appBuilder,
);
}
}
class MainPage extends StatelessWidget {
const MainPage({Object data});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('Main Page')),
);
}
}
class SimplePage extends StatelessWidget {
const SimplePage({Object data});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('SimplePage')),
);
}
}
到此dart端就集成完毕了
Binding
会报红,这个地方不管他,直接往下看
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'flutter_module/.android/include_flutter.groovy'
))
include ':flutter_module'
project(':flutter_module').projectDir = new File('../flutter_module')
然后在app的build.gradle下添加如下代码
implementation project(':flutter')
implementation project(':flutter_boost')
还需要在清单文件中添加以下内容直接粘贴到
标签包裹的内部即可,也就是和其他
标签同级
然后点击右上角的sync同步一下,就会开始一些下载和同步的进程,等待完成
在Application
中添加FlutterBoost
的启动流程,并设置代理
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {
@Override
public void pushNativeRoute(FlutterBoostRouteOptions options) {
//这里根据options.pageName来判断你想跳转哪个页面,这里简单给一个
Intent intent = new Intent(FlutterBoost.instance().currentActivity(), YourTargetAcitvity.class);
FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
}
@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 -> {
});
}
}
到此为止Android的集成流程就全部完成
环境配置结束后 相关配置问题 见第二篇文章
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)