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(); } }); }); },