如何使用提供程序显示或隐藏 FAB?



我刚刚开始寻找setState()的替代品,因此也是提供者。在我正在考虑实现提供程序的第一个程序中,我使用的唯一setState()是在初始build()上,以及当数据更改以便在尚未显示 FAB 时显示 FAB。这个程序中有六个TextField小部件,它们都有TextEditingControllers,所以它们都有自己的状态。

在这种情况下,当_tfDataHasChanged (bool)发生变化时,使用提供程序是否可行,如果是,如何

? 下面有 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 ShowFab with ChangeNotifier {
boolean shouldShow;
void showFab( boolean show ){
shouldShow = show;
notifyListeners();
}
}

显然你的具体逻辑会有所不同, ShowFab 需要在小部件树的更高位置提供。

ChangeNotifierProvider<ShowFab>( builder: (context) => ShowFab(), child: .... )

最新更新