最近flutter不是一般的火呀,但對于一些成熟的產品來說,完全摒棄原有App的歷史沉淀,全面轉向Flutter是不現實的,因此使用Flutter去統一Android、iOS技術堆疊,把它作為已有原生App的擴展能力,通過有序推進來提升移動端的開發效率
(1)創建flutter模塊,創建module后會AS會自動進行flutter的相關配置

(2)將FlutterActivity添加到AndroidManifest.xml
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:theme="@style/FlutterTheme"
android:windowSoftInputMode="adjustResize" />
(3)跳轉到flutter頁面
startActivity(FlutterActivity.withNewEngine().initialRoute("route").build(this))
(4)你也可以使用快取的FlutterEngine,可以減少加載延遲
在MyApplication中實體化一個FlutterEngine
class MyApplication : Application() {
lateinit var flutterEngine: FlutterEngine
override fun onCreate() {
super.onCreate()
flutterEngine = FlutterEngine(this)
flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine)
}
}
然后在Activity中跳轉
btn.setOnClickListener {
startActivity(FlutterActivity.withCachedEngine("my_engine_id").build(this))
}
注意:使用withCachedEngine()工廠方法時,請傳遞與快取所需的ID相同的ID FlutterEngine
設定快取引擎時也可以初始路由,修改MyApplication
flutterEngine = FlutterEngine(this)
flutterEngine.navigationChannel.setInitialRoute("route") //可以借此攜帶一些字串資料,可傳遞到flutter頁面
flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine)
對應的dart
import 'dart:ui';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: _widgetForRoute(window.defaultRouteName),
);
}
}
//路由的選擇
Widget _widgetForRoute(String route) {
switch (route) {
case 'route':
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter頁面'),
),
body: Center(
child: Text('行走的豬蹄',
style: TextStyle(color: Colors.red),
textDirection: TextDirection.ltr),
),
),
);
default:
return Center(
child: Text('Unknown route: $route',
style: TextStyle(color: Colors.red),
textDirection: TextDirection.ltr),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/177392.html
標籤:python
上一篇:微信invalid signature,微信IOS分享失效,微信重繪之后IOS不能分享,spa單頁面微信分享,wx.ready不執行?
