??Flutter是一個全新的跨平臺開發(fā)的語言性锭,我在實際項目開發(fā)中也有幸使用到 Flutter 進(jìn)行完整開發(fā)赠潦,在這個開發(fā)過程中也是一步步的實驗,在這其中也遇到了各種各樣的坑草冈, 網(wǎng)上通過各種谷歌她奥,stackoverflow瓮增,F(xiàn)lutter官網(wǎng)等查資料,有些問題是解決哩俭,但還是有些問題不能及時解決绷跑,于是就自己慢慢的嘗試著摸索除了一些解決方案,所以在這里就整理一下分享給大家携茂,跟大家一起學(xué)習(xí)你踩、討論。
1讳苦、Waiting for another flutter command to release the startup lock...
問題描述
在項目中使用Flutter Packages get時或命令行執(zhí)行flutter build 時 會 出現(xiàn): Waiting for another flutter command to release the startup lock...
解決方案:
找到\bin\cache中的lockfile文件刪除带膜,如果還是不行則重啟IDE重新試下。
2鸳谜、The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.
問題描述
在頁面 initState膝藕、build、或者頁面返回沒辦法直接使用 context 或 setState
解決辦法
使用
Future.delayed(Duration.zero).then((e) {
....
});
3咐扭、PageView保存狀態(tài)報錯
問題描述
Build functions must never return null. To return an empty space that causes the building widget to fill available room, return "new Container()". To return an empty space that takes as little room as possible, return "new Container(width: 0.0, height: 0.0)"
解決辦法
在 build 方法必須加上super.build
@override
Widget build(BuildContext context) {
super.build(context); //保存狀態(tài)必須加上
[...]
}
4芭挽、EventManager使用問題
post : 發(fā)送消息
on : 監(jiān)聽消息
destroy : 銷毀
問題描述
錯誤的使用destory 使得整個應(yīng)用沒辦法監(jiān)聽消息
解決辦法
在 BaseWidget 的 dispose不能 destory EventManager。EventManager是單例蝗肪,基類取消就全部取消了袜爪。
5、IOS 調(diào)起相機(jī)/相冊點(diǎn)擊事件穿透
問題描述
在調(diào)起相機(jī)薛闪、相冊選擇圖片時辛馆,點(diǎn)擊相機(jī)區(qū)域、圖片選擇區(qū)域會響應(yīng)下層 flutter 界面的點(diǎn)擊事件
具體參與:https://github.com/flutter/flutter/issues/32896
解決辦法
目前處理的辦法是調(diào)起相機(jī)豁延、相冊時顯示一個帶蒙層的彈窗昙篙,收起相機(jī)、機(jī)冊時取消蒙層彈窗诱咏。
6苔可、官方 Webview_flutter 使用問題
問題描述
在 android 中輸入框獲焦點(diǎn),點(diǎn)擊兩次會閃退袋狞。
在IOS需要 配置了io.flutter.embedded_views_preview屬性,會導(dǎo)致鍵盤卡頓焚辅。
解決辦法
待官方解決,暫時使用第三方flutter_webview_plugin 插件
7苟鸯、flutter_webview_plugin 插件使用問題
問題描述
flutter_webview_plugin是調(diào)用原生 webview.并加到原生主頁面上法焰。所以該 webview 是最頂層的,無法在其上顯示flutter的視圖
解決辦法
要顯示彈窗等視圖時先判斷當(dāng)前是否有webview頁面倔毙,并且在進(jìn)入webview頁面時調(diào)用FlutterWebviewPlugin().show();退出 webviewd頁面時調(diào)用FlutterWebviewPlugin().hide();
8埃仪、命名路由無法關(guān)閉指定頁面
問題描述
flutter 關(guān)閉彈窗、頁面都會都是調(diào)用 Navigator.pop(context, result)陕赃,在這里沒辦法指定特定的頁面路由或彈窗
解決辦法
修改源碼把底層的history釋放出來卵蛉,或者盡量避免這種需要關(guān)閉指定頁面的做法颁股。
9、點(diǎn)擊控件區(qū)域沒事件響應(yīng)
問題描述
正確的設(shè)置了控件的點(diǎn)擊事件傻丝,點(diǎn)擊卻沒有反應(yīng)
解決辦法
- 給控件設(shè)置背景
- 設(shè)置behavior屬性
return GestureDetector(
behavior: HitTestBehavior.translucent,
child: Text("測試${index}"),
onTap: () {},
);
enum HitTestBehavior {
/// Targets that defer to their children receive events within their bounds
/// only if one of their children is hit by the hit test.
deferToChild, //只生效在child的區(qū)域比如文字
/// Opaque targets can be hit by hit tests, causing them to both receive
/// events within their bounds and prevent targets visually behind them from
/// also receiving events.
opaque,//GestureDetector的整個區(qū)域甘有,不包括它下面的區(qū)域
/// Translucent targets both receive events within their bounds and permit
/// targets visually behind them to also receive events.
translucent,// GestureDetector的整個區(qū)域以及它下面的區(qū)域
}
10、Appbar/Tabbar/的高度設(shè)置問題
問題描述
Appbar葡缰、Tabbar 默認(rèn)有固定的高度亏掀,如何改變其高度
解決辦法
使用PreferredSize。
最后
??如果在使用過程遇到問題泛释,歡迎下方留言交流滤愕。