【问题标题】:How change Future.delayed() duration, or circumvent having to do this如何更改 Future.delayed() 持续时间,或避免这样做
【发布时间】:2020-03-28 05:37:55
【问题描述】:

我有Dismissible 小部件列表,我想向左滑动以删除这些小部件。它们有一个参数confirmDismis,它采用Future<bool>。一旦你刷了一个项目,我想显示一个SnackBar,让你在几秒钟内撤消删除。为此,我有这个方法:

  Future<bool> _confirmDismiss() {

    var remove = true;
    var duration = Duration(seconds: 5);

    final snackbar = SnackBar(
      duration: duration,
      content: Text('This item was deleted'),
      action: SnackBarAction(
        label: 'Undo',
        onPressed: () {
          remove = false; //how to return false immediately?
        },
      ),
    );
    _scaffoldKey.currentState.showSnackBar(snackbar);

    return Future.delayed(duration,(){
      return remove;
    });
  }

snackbar 显示 5 秒后消失并触发回调。

现在我想在您点击撤消按钮后立即退回该项目。现在您必须等待 5 秒才能返回。

我已经尝试过 timeout 和 Time() 以及许多其他的东西,但我似乎无法让它工作......有什么想法吗?

【问题讨论】:

    标签: flutter dart future


    【解决方案1】:

    @Janneman,我认为您不需要使用Future.delayed,这可能是您现在必须等待 5 秒的原因。只需使用默认的 SnackBar 功能。这是一个快速示例,它显示 SnackBar 5 秒并快速更改 Undo 上的文本,

    class MyApp extends StatefulWidget {
      @override
      MyAppState createState() => MyAppState();
    }
    
    class MyAppState extends State<MyApp> {
      String text = 'Yay! A Snackbar';
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                appBar: AppBar(
                  title: Text('SnackBar'),
                ),
                body: Builder(builder: (BuildContext context) {
                  return Padding(
                      padding: EdgeInsets.all(20.0),
                      child: Center(
                          child: Column(children: <Widget>[
                        Text(text),
                        RaisedButton(
                          onPressed: () {
                            text = 'Snackbar changed';
                            setState(() {
                            });
                            final snackBar = SnackBar(
                              duration: Duration(seconds: 5),
                              content: Text(text),
                              action: SnackBarAction(
                                label: 'Undo',
                                onPressed: () {
                                  text = 'Yay! A Snackbar';
                                  setState(() {});
                                },
                              ),
                            );
    
                            // Find the Scaffold in the widget tree and use
                            // it to show a SnackBar.
                            Scaffold.of(context).showSnackBar(snackBar);
                          },
                          child: Text('Show SnackBar'),
                        ),
                      ])));
                })));
      }
    }
    

    希望这会有所帮助。祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2022-06-25
      • 2011-06-03
      相关资源
      最近更新 更多