Flutter 實(shí)際項(xiàng)目填坑記錄

??Flutter是一個(gè)全新的跨平臺(tái)開發(fā)的語言,我在實(shí)際項(xiàng)目開發(fā)中也有幸使用到 Flutter 進(jìn)行完整開發(fā),在這個(gè)開發(fā)過程中也是一步步的實(shí)驗(yàn),在這其中也遇到了各種各樣的坑, 網(wǎng)上通過各種谷歌,stackoverflow,F(xiàn)lutter官網(wǎng)等查資料,有些問題是解決,但還是有些問題不能及時(shí)解決,于是就自己慢慢的嘗試著摸索除了一些解決方案,所以在這里就整理一下分享給大家,跟大家一起學(xué)習(xí)、討論。

1、Waiting for another flutter command to release the startup lock...

問題描述

在項(xiàng)目中使用Flutter Packages get時(shí)或命令行執(zhí)行flutter build 時(shí) 會(huì) 出現(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)報(bào)錯(cuò)

問題描述

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                     : 銷毀

問題描述

錯(cuò)誤的使用destory 使得整個(gè)應(yīng)用沒辦法監(jiān)聽消息

解決辦法

在 BaseWidget 的 dispose不能 destory EventManager。EventManager是單例,基類取消就全部取消了。

5、IOS 調(diào)起相機(jī)/相冊點(diǎn)擊事件穿透

問題描述

在調(diào)起相機(jī)、相冊選擇圖片時(shí),點(diǎn)擊相機(jī)區(qū)域、圖片選擇區(qū)域會(huì)響應(yīng)下層 flutter 界面的點(diǎn)擊事件

具體參與:https://github.com/flutter/flutter/issues/32896

解決辦法

目前處理的辦法是調(diào)起相機(jī)、相冊時(shí)顯示一個(gè)帶蒙層的彈窗,收起相機(jī)、機(jī)冊時(shí)取消蒙層彈窗。

6、官方 Webview_flutter 使用問題

問題描述

在 android 中輸入框獲焦點(diǎn),點(diǎn)擊兩次會(huì)閃退。

在IOS需要 配置了io.flutter.embedded_views_preview屬性,會(huì)導(dǎo)致鍵盤卡頓。

解決辦法

待官方解決,暫時(shí)使用第三方flutter_webview_plugin 插件

7、flutter_webview_plugin 插件使用問題

問題描述

flutter_webview_plugin是調(diào)用原生 webview.并加到原生主頁面上。所以該 webview 是最頂層的,無法在其上顯示flutter的視圖

解決辦法

要顯示彈窗等視圖時(shí)先判斷當(dāng)前是否有webview頁面,并且在進(jìn)入webview頁面時(shí)調(diào)用FlutterWebviewPlugin().show();退出 webviewd頁面時(shí)調(diào)用FlutterWebviewPlugin().hide();

8、命名路由無法關(guān)閉指定頁面

問題描述

flutter 關(guān)閉彈窗、頁面都會(huì)都是調(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的整個(gè)區(qū)域,不包括它下面的區(qū)域

  /// Translucent targets both receive events within their bounds and permit
  /// targets visually behind them to also receive events.
  translucent,// GestureDetector的整個(gè)區(qū)域以及它下面的區(qū)域
}

10、Appbar/Tabbar/的高度設(shè)置問題

問題描述

Appbar、Tabbar 默認(rèn)有固定的高度,如何改變其高度

解決辦法

使用PreferredSize。

最后

??如果在使用過程遇到問題,歡迎下方留言交流。

學(xué)習(xí)資料

請大家不吝點(diǎn)贊!因?yàn)槟狞c(diǎn)贊是對(duì)我最大的鼓勵(lì),謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • WebView·開車指南 2016-08-31BugDev 北京市東城區(qū)首席Bug布道師開山之作,一整月交通事故血...
    53c021c38a1d閱讀 937評(píng)論 0 1
  • 轉(zhuǎn)自 http://www.itdecent.cn/p/3ad7c39858ec 不知不覺,Hybird App已...
    龐哈哈哈12138閱讀 4,012評(píng)論 0 9
  • 每日一言:要奮斗就會(huì)有犧牲,勝則舉杯相慶,敗則拼死相救。 原創(chuàng):http://liuwangshu.cn/flut...
    乘香墨影閱讀 2,418評(píng)論 0 7
  • 如果你不想淚流滿面, 就永遠(yuǎn)不要想自己曾經(jīng)多么可憐! 過的多么糟糕!
    誰與光閱讀 201評(píng)論 0 0
  • 初見歡喜 相識(shí)有意 離別無期 又一個(gè)雙魚座滿月,8月26日19:55。 許是自我潛意識(shí)的惡魔早已準(zhǔn)備好買入那些負(fù)面...
    兆轅閱讀 343評(píng)論 0 0

友情鏈接更多精彩內(nèi)容