我刚刚开始研究setState()
的替代方案,因此也可以成为Provider。在我要实现Provider的第一个程序中,我使用的唯一setState()
位于初始build()
上,并且当数据发生更改以便在FAB尚未显示时显示FAB时显示。此程序中有六个TextField
小部件,它们都有TextEditingControllers
,因此它们都有自己的状态。
在_tfDataHasChanged (bool)
发生更改的情况下,在这种情况下使用Provider是否可行?如果可以,如何更改?
下面是创建FAB的代码:
Widget _createFab() {
if (_tfDisplayOnly || !_tfDataHasChanged) return null;
return FloatingActionButton(
onPressed: _btnSubmitPressed,
backgroundColor: _colorFab,
mini: false,
tooltip: _sBtnSubmitText /* Add or Create */,
child: _iconFab,
);
}
答案 0 :(得分:0)
您可以:
Widget _createFab( BuildContext context) {
boolean showFab = Provider.of<ShowFab>(context).shouldShow;
return showFab?FloatingActionButton(
onPressed: _btnSubmitPressed,
backgroundColor: _colorFab,
mini: false,
tooltip: _sBtnSubmitText /* Add or Create */,
child: _iconFab,
):null;
}
ShowFab类看起来像
class ShowFab with ChangeNotifier {
boolean shouldShow;
void showFab( boolean show ){
shouldShow = show;
notifyListeners();
}
}
很明显,您的具体逻辑会有所不同, 需要在小部件树中的较高位置提供ShowFab。
ChangeNotifierProvider<ShowFab>( builder: (context) => ShowFab(), child: .... )