一、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中添加以下代碼(具體用途將會在下面基礎使用中說明):
<activity
android:name="com.idlefish.flutterboost.containers.FlutterBoostActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|
layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:theme="@style/Theme.FlutterTheme"
android:windowSoftInputMode="adjustResize">
<!--低端機上flutter-boost仍會出現跳轉黑屏現象,這種方法可以解決,原理就是類似于原生閃屏頁-->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
(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<MyApp> {
///路由表
static Map<String, FlutterBoostRouteFactory> routerMap = {
'addDevicesPage': (settings, uniqueId) {
return PageRouteBuilder<dynamic>(
settings: settings,
pageBuilder: (_, __, ___) {
return AddDevicesPage(title: "添加設備");
});
},
'settingsPage': (settings, uniqueId) {
return PageRouteBuilder<dynamic>(
settings: settings,
pageBuilder: (_, __, ___) {
return SettingsPage(title: "設定");
});
},
'personalInfoPage': (settings, uniqueId) {
return PageRouteBuilder<dynamic>(
settings: settings,
pageBuilder: (_, __, ___) {
return SettingsPage(title: "個人資料");
});
},
};
Route<dynamic> 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學習程序,希望能和大家一起進步,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/292377.html
標籤:其他
