Flutter 踩坑

1. 調用接口傳入 List 類型不對導致無法獲取到數據

初始化 List 沒有指定類型,調用接口時直接傳入導致無法獲取數據(接口內部需要傳入 List<int>)

原因:
沒有指定類型的 List 是 List<dynamic>,不是 List<int> 類型的,所以接口無法拿到對應數據


解決:
將 List 定義為 List<int>

2. iOS 直接通過 Xcode 打包打開閃退問題

iOS 打包打開直接閃退問題

需要先進入 example 目錄中,執行 `flutter build ios`,然后再使用 Xcode archive 就可以了。

3. SDK 發版后,平臺帶了 Web

需要在 SDKpubspec.yaml 文件中將下面代碼添加進去用來指定平臺

flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin

參考鏈接:指定版本

4. 切換 tab 后頁面被重新加載


final List<StatefulWidget> vcList = [new ConversationListPage(),new ContactsPage()];

// 記錄當前選中的 tab index
int curIndex = 0;

@override
  Widget build(BuildContext context) {
    return new Scaffold(
      bottomNavigationBar: new BottomNavigationBar(
        items: tabbarList,
        type: BottomNavigationBarType.fixed,
        onTap: (int index) {
          setState(() {
            curIndex = index;
          });
        },
        currentIndex: curIndex,
      ),
        body: vcList[curIndex],
    );
  }

body 修改為使用 IndexedStack

@override
  Widget build(BuildContext context) {
    return new Scaffold(
      bottomNavigationBar: new BottomNavigationBar(
        items: tabbarList,
        type: BottomNavigationBarType.fixed,
        onTap: (int index) {
          setState(() {
            curIndex = index;
          });
        },
        currentIndex: curIndex,
      ),
      // 這里的 body 修改為 IndexedStack 就可以保證切換時頁面不會被重新加載
      body: IndexedStack(
        index: curIndex,
        children: <Widget>[new ConversationListPage(),new ContactsPage()],
      ),
    );
  }

5. 進入詳情頁面返回列表頁,列表無法保持滾動狀態,會返回到最上方

ScrollController _scrollController;
// 用于記錄偏移量
double mPosition = 0;



// 添加滾動的監聽
void _addScroolListener() {
    _scrollController.addListener(() {
      mPosition = _scrollController.position.pixels;
    });
  }



// 初始化時將 _scrollController 賦值給 ListView 的 controller
Widget _buildConversationListView() {
    return new ListView.builder(
      scrollDirection: Axis.vertical,
      itemCount: conList.length,
      // 初始化時將 _scrollController 賦值給 ListView 的 controller
      controller: _scrollController,
      itemBuilder: (BuildContext context, int index) {
        if (conList.length <= 0) {
          return WidgetUtil.buildEmptyWidget();
        }
        return ConversationListItem(
            delegate: this, conversation: conList[index]);
      },
    );
  }
  
  

// build 時讓 scrollController 偏移到指定位置
@override
  Widget build(BuildContext context) {
    this._scrollController = ScrollController(initialScrollOffset: mPosition);
    _addScroolListener();
    return new Scaffold(
      appBar: AppBar(
        title: Text("IM Test"),
      ),
      key: UniqueKey(),
      body: _buildConversationListView(),
    );
  }

6. textField 設置 text 時,Android 光標在最前方,iOS 光標在最后方

將光標移動到最后方即可

void setText(String textContent) {
    if (textContent == null) {
      textContent = '';
    }
    this.textEditingController.text =
        this.textEditingController.text + textContent;
    // 將光標移動到最后方
    this.textEditingController.selection = TextSelection.fromPosition(
        TextPosition(offset: textEditingController.text.length));
    _refreshUI();
  }
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 三方庫使用: https://pub.dev/ 這上面有豐富的flutter三方庫及評分 2. 圖片設置格...
    直男程序員閱讀 7,488評論 2 9
  • flutter入坑之路,歡迎交流關于flutter可以在 flutter官網 看,英文不好的推薦 flutter中...
    zzq_hd閱讀 30,209評論 1 11
  • 周末玩下flutter,遇到好幾個問題 一、更新了flutter 后原有工程報錯 解決: 二、編譯報錯 ?Chec...
    咚咚_Coding閱讀 2,564評論 0 2
  • 1.Flutter的UI開發【1+1+0.5=2.5】輪播圖和自定義指示器【耗時1天】布局越界問題,布局的寬度高度...
    小魚愛記錄閱讀 1,050評論 0 3
  • 記錄下自己踩過的坑,怕忘了 一.TextField: 1.去掉輸入數字的計數:decoration中的counte...
    太sun陽閱讀 17,407評論 6 7