【问题标题】:Flutter: How to "disable" touch while snackbar is showingFlutter:如何在显示小吃店时“禁用”触摸
【发布时间】:2020-02-16 16:28:06
【问题描述】:

RaisedButton 将调用 Snackbar 并具有 setState()。 但是,在 Setstate 更改之前屏幕是可点击的 下面是部分代码:

        child: RaisedButton(
            child: Text('Click Me'),
            onPressed: () {
              theMessage = getMessage();
              Scaffold.of(context).showSnackBar(SnackBar(content: Text(theMessage), duration: Duration(seconds: 3),
              ));

              _timer = new Timer(const Duration(seconds: 3), () {
                setState(() {
                  n++;
                });
              });
            }),

【问题讨论】:

    标签: flutter setstate snackbar


    【解决方案1】:

    您可以使用showSnackBar 返回的Future 来控制行为。要禁用点击,您可以使用小部件AbsorbPointer。这是一个同时使用它们的示例:

    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      bool _absorbing = false;
      final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
    
      void _onButtonPress() {
        setState(() {
          _absorbing = true;
        });
        print("Do your work here");
        snackBarWithCallback("Hello", () {
          print("Done");
          setState(() {
            _absorbing = false;
          });
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          key: _scaffoldKey,
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: AbsorbPointer(
            absorbing: _absorbing,
            child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  RaisedButton(
                    child: Text('Pres Me'),
                    onPressed: _onButtonPress,
                  ),
                ],
              ),
            ),
          ),
        );
      }
    
      void snackBarWithCallback(String content, VoidCallback callback) {
        final controller = _scaffoldKey.currentState.showSnackBar(
          SnackBar(
            content: Text(content),
          ),
        );
        controller.closed.whenComplete(callback);
      }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2022-10-08
      • 2016-04-01
      • 2018-09-27
      • 2022-12-17
      • 2016-12-26
      • 2019-12-30
      • 2018-05-04
      • 2020-05-18
      相关资源
      最近更新 更多