Flutter開發(fā)問題合集

1.ListView和GridView嵌套滑動沖突問題

ListView(
          shrinkWrap: true,//增加
          children: <Widget>[
            new GridView.count(
            physics: new NeverScrollableScrollPhysics(),//增加
            shrinkWrap: true,//增加
            crossAxisCount: 3,
            children:<Widget>[]
          ],
        )

關(guān)鍵代碼:

GridView添加 physics: new NeverScrollableScrollPhysics() 和 shrinkWrap: true

2.Tab切換或滑動的狀態(tài)保存問題

如果是底部導(dǎo)航欄切換推薦使用IndexedStack組件忠聚,會自動保存狀態(tài)所森,也可按如下方案:
1.State組件實現(xiàn)AutomaticKeepAliveClientMixin
2.重寫wantKeepAlive為true
實例:

class _TabViewWidgetState extends State<TabViewWidget> with AutomaticKeepAliveClientMixin{

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return SizeBox();
  }

  @override
  bool get wantKeepAlive => true;

3.庫名沖突

比如自定義繪制 ParagraphBuilderpushStyle方法贱勃,你會發(fā)現(xiàn)TextStyle導(dǎo)入的包始終是爆紅的冶匹,這是因為庫名沖突了,解決方案:

import 'dart:ui' as other; //重點 命一個別名

class MyDraw extends CustomPainter{
  @override
  void paint(Canvas canvas, Size size) {
    final textStyle = other.TextStyle( //前面加一個別名就好了
       .........
    );
 
    final paragraphBuilder = ParagraphBuilder(paragraphStyle)
      ..pushStyle(textStyle)
    .....代碼省略
  }
}

需要注意的是別名最好不要和類名一樣俏站,因為如果需要調(diào)用靜態(tài)方法或者導(dǎo)入方法會報錯韭脊,造成別名和類名的沖突

4 jsonDecode解析出來的map是什么類型?

打印一下就知道,結(jié)果是LinkedHashMap

5 Positioned 大小問題

Positioned需要定義3個方向的屬性才會有寬高屬性,否則是無法確定寬高的塞帐,子組件也無寬高那么就會報錯,示例如下:

Positioned(
  ....
top: 0,
 left: 0,
 right: 0,
)

6 TextField的一些問題解決方案

1.去掉底部文字計數(shù)器
在InputDecoration屬性里設(shè)置counterText :' '
2.TextField無邊框文字居中問題

經(jīng)過測試TextField設(shè)置了border: InputBorder.none無邊框后文字無法居中拦赠,設(shè)置了邊框后又可以。所以實現(xiàn)無邊框和文字居中的方案是添加一個透明邊框:

border: OutlineInputBorder(
                                        borderSide: BorderSide(
                                          color: Colors.transparent,
                                        ),
                                      ),
                                      enabledBorder: OutlineInputBorder(
                                        borderSide: BorderSide(
                                          color: Colors.transparent,
                                        ),
                                      ),
                                      disabledBorder: OutlineInputBorder(
                                        borderSide: BorderSide(
                                          color: Colors.transparent,
                                        ),
                                      ),
                                      focusedBorder: OutlineInputBorder(
                                        borderSide: BorderSide(
                                          color: Colors.transparent,
                                        ),
                                      )
2.TextField換行問題

有時候需要實現(xiàn)個備份填寫等長文本葵姥,需要限制字?jǐn)?shù)和自動換行荷鼠,可以這么實現(xiàn):

Container(
                alignment: Alignment.topLeft,
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.all(Radius.circular(8)),
                    color: editBackground),
                child: TextField(
                  keyboardType: TextInputType.multiline, //多文本
                  minLines: 1, 
                  maxLines: 20,  //一定要設(shè)置,不然不會換行榔幸,具體設(shè)置多大視需求而定
                  maxLength: 200, //設(shè)置了這個底部就會出現(xiàn)文字計數(shù)器
                  decoration: InputDecoration(
                      isDense: true,  //解決多行文本之間的間距
                      border: OutlineInputBorder(
                        borderSide: BorderSide(
                          color: Colors.transparent,
                        ),
                      ),
                      enabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(
                          color: Colors.transparent,
                        ),
                      ),
                      disabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(
                          color: Colors.transparent,
                        ),
                      ),
                      focusedBorder: OutlineInputBorder(
                        borderSide: BorderSide(
                          color: Colors.transparent,
                        ),
                      )),
                ),
              )

7. setStatue更新問題

1.setStatue出現(xiàn)不能更新的問題颊咬,需要著重檢查更新布局的context, 父布局一定是具有State狀態(tài)管理功能的組件,否則不能更新
2.彈窗dialog不能直接調(diào)用setStatue進行更新牡辽,因為context是不一樣的,ui刷新并不能更新到彈窗敞临,怎么辦呢态辛,可使用StatefulBuilder局部更新組件來進行更新. 簡單使用:

StatefulBuilder(
                      builder: (BuildContext context,
                          void Function(void Function()) _statue) {
                        return InkWell(
                          onTap: () => {
                          _statue(() {  //調(diào)用_statue來完成局部更新,調(diào)用后StatefulBuilder里的組件會重新刷新一遍
                        mBean.oilTag = "$i$title";  
                         })
                          },
                          child: Container(
                            alignment: Alignment.centerRight,
                            child: Text(
                              isNotEmpty(mBean.oilTag) ? mBean.oilTag! : "請選擇",
                              style: TextStyle(
                                  color: isNotEmpty(mBean.oilTag)
                                      ? colorText
                                      : color999),
                            ),
                          ),
                        );
                      },
                    )

或者直接使用彈窗的context進行更新,示例如下:

(context as Element).markNeedsBuild(); //標(biāo)記這個context下的組件需要更新

這樣彈窗會從上到下更新一遍ui
關(guān)于這一塊的詳細解釋挺尿,請參考這里,篇幅有限奏黑,不詳細解析哈。

  1. ValueNotifier不更新
    檢查ValueNotifier里的對象和新的更改的對象是否是同一個编矾,例如集合熟史,如果操作的是同一個集合,那么是不會觸發(fā)更新的
  2. 簡單總結(jié)一下局部更新的一些組件:
  • StatefulBuilder: 該組件相當(dāng)于是一個小型的StatefulWidget,暴露出一個方法用于局部更新
  • ValueListenableBuilder: 當(dāng)監(jiān)聽的數(shù)據(jù)有變化時更新窄俏,一般配合ValueNotifier使用
  • StreamBuilder: 流數(shù)據(jù)變化監(jiān)聽蹂匹,AsyncSnapshot會有多種狀態(tài),使用connectionState可以獲取對應(yīng)的狀態(tài)凹蜈,適合網(wǎng)絡(luò)請求等耗時操作
  • FutureBuilder: Future方法監(jiān)聽, 與StreamBuilder 差不多,但是傳入的是一個Future方法限寞,需要注意當(dāng)調(diào)用全局的setState會有重復(fù)刷新的問題,需要額外處理規(guī)避

8.流(Stream)的使用

分享一篇講解的分享好的文章
“四大天王”:StreamController仰坦,Sink履植,Stream,StreamSubscription 的詳細說明

9.集成地圖問題

集成地圖提示

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/amap/api/maps/AMapOptions;

檢查一遍發(fā)現(xiàn)AMapOptions有這個類呀悄晃,怎么會找不到玫霎,后面發(fā)現(xiàn)這個類和源碼里導(dǎo)入的類包名不一樣,我使用的是2D地圖的類,而flutter里的是使用的3D的庶近,破案了翁脆,把安卓里引入的地圖包從2d改成3d即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拦盹,一起剝皮案震驚了整個濱河市鹃祖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌普舆,老刑警劉巖恬口,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沼侣,居然都是意外死亡祖能,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門蛾洛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來养铸,“玉大人,你說我怎么就攤上這事轧膘〕” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵谎碍,是天一觀的道長鳞滨。 經(jīng)常有香客問我,道長蟆淀,這世上最難降的妖魔是什么拯啦? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮熔任,結(jié)果婚禮上褒链,老公的妹妹穿的比我還像新娘。我一直安慰自己疑苔,他們只是感情好甫匹,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惦费,像睡著了一般赛惩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趁餐,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天喷兼,我揣著相機與錄音,去河邊找鬼后雷。 笑死季惯,一個胖子當(dāng)著我的面吹牛吠各,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勉抓,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼贾漏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了藕筋?” 一聲冷哼從身側(cè)響起纵散,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隐圾,沒想到半個月后伍掀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡暇藏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年蜜笤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盐碱。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡把兔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓮顽,到底是詐尸還是另有隱情县好,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布暖混,位于F島的核電站缕贡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏儒恋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一黔漂、第九天 我趴在偏房一處隱蔽的房頂上張望诫尽。 院中可真熱鬧,春花似錦炬守、人聲如沸牧嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酣藻。三九已至,卻和暖如春鳍置,著一層夾襖步出監(jiān)牢的瞬間辽剧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工税产, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕轿,地道東北人偷崩。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像撞羽,于是被迫代替她去往敵國和親阐斜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容