針對以上,咱們連續作了兩個版本迭代,終於解決了大部分問題,目前版本相對於1.0.0作了大部分重構與優化git
支持 AndroidX 目前flutter 的 compileSdkVersion 最低要求爲 28,1.0.0
咱們採起了老的27進行開發,目前已經全面升級到28, 升級方法能夠參考,目前dev分支不太適合做爲開發分支,小米機型頻繁崩潰,連接通道
Firebase crashlytics 接入,能夠更好了解app的崩潰狀況,後面能夠針對crash進行快速定位github
針對海量訴求說 1.0.0
ui過於醜陋,咱們也探索了幾個方法去優化,借鑑了掘金交互,咱們完成了ui的重構,而且引用了 Material UI color 的樣式定義了多主題適配方案,讓更多同窗能夠定義本身的風格redux
lib/main.dart 咱們使用 scopedModel
進行了數據監聽而且更新根節點的方式進行熱更主題的效果,redux,bloc以及state 均可以實現
bash
@override
Widget build(BuildContext context) {
return Store.init(
model: model,
child: Store.connect(builder: (context, child, model) {
return MaterialApp(
......
theme: AppTheme.getThemeData(model.config.state.theme),//關鍵操做部分
......
);
}),
);
}
複製代碼
開發過程當中,咱們忽略了本地化的問題,1.0.2
已經fixedapp
爲了更人性化的進行迭代推送,咱們加入了版本檢測功能,踩過了很多的坑位,目前最大的是權限檢測crash 新版本flutter 已經解決了這個問題,老的版本仍然存在
async
lib/dart 代碼實現片斷ide
import 'package:package_info/package_info.dart'; //檢測當前包是否與遠程包版本一致
import 'package:efox_flutter/store/http.dart' as Http;
import 'package:path_provider/path_provider.dart'; //讀取app路徑
import 'package:flutter_downloader/flutter_downloader.dart';// 下載庫
import 'package:open_file/open_file.dart';// 打開apk
import 'package:permission_handler/permission_handler.dart';// 獲取並授予權限
// 權限檢測 確保獲取存儲權限
Future<bool> _checkPermission() async {
...
}
// 獲取安裝地址
Future<String> get _apkLocalPath async {
final directory = await getExternalStorageDirectory();
return directory.path;
}
// 檢查app版本
Future<Null> check(context, {showTips: false}) async {
......
}
// 下載並打開apk進行安裝
Future _downAndInstall(String version) async {
......
}
複製代碼
android/app/src/main/res/AndroidManifest.xml 加入測試
<!-- Flutterdownloader configuration -->
<provider
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
android:authorities="${applicationId}.flutter_downloader.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:enabled="false"
android:exported="false" />
<provider
android:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"
android:authorities="${applicationId}.flutter-downloader-init"
android:exported="false">
<meta-data
android:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"
android:value="5" />
</provider>
<!-- Flutterdownloader configuration end -->
複製代碼
通過以上優化後,目前 flutter ui
已經進入了相對穩定的版本,後續迭代與更新能夠無縫對接,而且針對IOS 也做出了兼容性方案處理,通過測試流暢度也獲得了比較不錯的提高,優化
持續推動中
加入版本迭代規劃中
如你們有興趣能夠一塊兒加入討論,幫助咱們作得更好!