如何使用Provider显示或隐藏FAB?
How to use Provider to show or hide FAB?
我刚刚开始寻找 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,
);
}
您可以:
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 看起来像
class ShowFab with ChangeNotifier {
boolean shouldShow;
void showFab( boolean show ){
shouldShow = show;
notifyListeners();
}
}
显然你的具体逻辑会有所不同,
ShowFab 需要在小部件树中更高的位置提供。
ChangeNotifierProvider<ShowFab>( builder: (context) => ShowFab(), child: .... )
我刚刚开始寻找 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,
);
}
您可以:
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 看起来像
class ShowFab with ChangeNotifier {
boolean shouldShow;
void showFab( boolean show ){
shouldShow = show;
notifyListeners();
}
}
显然你的具体逻辑会有所不同, ShowFab 需要在小部件树中更高的位置提供。
ChangeNotifierProvider<ShowFab>( builder: (context) => ShowFab(), child: .... )