flutter 莫名其妙錯誤集錦


1、回調函數的時候,報錯:

════════ Exception caught by gesture ═══════════════════════════════════════════════════════════════
The following NoSuchMethodError was thrown while handling a gesture:
The method 'call' was called on null.
Receiver: null
Tried calling: call()

When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      _BillAddPageState.build.<anonymous closure>.<anonymous closure> (package:flutter_bcd/pages/bill/bill_add_page.dart:139:19)
#2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
#3      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
#4      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
...
Handler: "onTap"

  

       return InkWell(
                onTap: () {
                  setState(() {
                    _selectedIndex = index;
                  });
                  print(_scaffoldKey);
                  // 調用 回調函數必須加括號
                  _showBottomSheetCallback();
                },
                child: Container(
                  alignment: Alignment.center,
                  padding: EdgeInsets.only(bottom: 10),
                  color: flag ? Colors.amber : Colors.transparent,
                  child: Column(
                    children: <Widget>[
                      Expanded(child: categoryList[index].icon),
                      Text(
                        categoryList[index].title,
                        style: TextStyle(
                          fontSize: 14,
                          color: Color(0xFF333333),
                        ),
                      ),
                    ],
                  ),
                ));

  空指針這種錯誤,一般是自己的程序邏輯問題:

解決方法就是判空:

// 調用 回調函數必須加括號
if (_showBottomSheetCallback != null) {
_showBottomSheetCallback();
}

2、setState() or markNeedsBuild() called during build.

onTap: () {
                    setState(() {
                      _selectedIndex = index;
                      print(_scaffoldKey);
                      // 調用 回調函數必須加括號
                      WidgetsBinding.instance.addPostFrameCallback((_){
                        // 通過addPostFrameCallback可以做一些安全的操作,在有些時候是很有用的,它會在當前Frame繪制完后進行回調,並只會回調一次,如果要再次監聽需要再設置。
                        print("Frame has been rendered");
                        if (_showBottomSheetCallback != null) {
                          _showBottomSheetCallback();
                        }
                      });

                    });

                  },

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM