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

时间:2019-08-23 06:33:29

标签: flutter provider

我刚刚开始研究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,
    );
}

1 个答案:

答案 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: .... )