如何在Flutter中显示2个连续的对话框

Mactrix

我有一个带有Dismissible小部件的列表。当用户交换startToEnd时,我想在用户可以添加注释时播一个对话框。一旦用户在该对话框中单击“确定”,我希望弹出另一个对话框以确认已添加注释,然后在2秒钟后消失。当用户从右向左交换时,我想显示一个对话框并显示一条消息,持续2秒

这是我的代码

  List<Container> _buildBasketList() {
    return appData.basketList.map((bList) {
      var container = Container(
        child: Builder(
          builder: (context) => Dismissible(
            key: Key(UniqueKey().toString()),
            background: Container(
              margin: EdgeInsets.all(8.0),
              color: kColorAccent,
              child: Align(
                  alignment: Alignment(-0.90, 0.00),
                  child: Icon(Icons.add_comment)),
            ),
            onDismissed: (direction) async {
              print('ondismiss  started');
              if (direction == DismissDirection.startToEnd) {
                print('adding a note');
                await showDialog(
                    context: context,
                    builder: (context) => AddDetailsInDialog(
                          dialogText: 'Enter your note',
                          hintText: 'eg. xxx',
                        )).then((value) async {
                  if (value != null) {
                    print('got value');
                    await showDialog(
                        context: context,
                        builder: (context) => ShowAlertAndAutoDismiss(
                              text: 'Note added',
                            ));
                  }
                });
              } else {
                print('deleting record in basketList');
                await showDialog(
                    context: context,
                    builder: (context) => ShowAlertAndAutoDismiss(
                          text:
                               "Item removed from your list",
                        ));
              }
            },

这是我的课

class ShowAlertAndAutoDismiss extends StatelessWidget {
  final String text;
  ShowAlertAndAutoDismiss({this.text});

  @override
  Widget build(BuildContext context) {
    print('building ShowAlertAndAutoDismiss');
    Future.delayed(Duration(milliseconds: 1000)).then((_) {
      print('ziiiip');
    });
    return AlertDialog(
      title: Center(child: Text(text)),
    );
  }
}
class AddDetailsInDialog extends StatelessWidget {
  final String dialogText;
  final String hintText;
  final myController = TextEditingController();

  AddDetailsInDialog({
    this.dialogText,
    this.hintText,
  });

  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text(dialogText),
      content: new Row(
        children: <Widget>[
          new Expanded(
              child: new TextField(
            controller: myController,
            autofocus: true,
            decoration: new InputDecoration(hintText: hintText),
          ))
        ],
      ),
      actions: <Widget>[
        FlatButton(
          child: Text('OK'),
          onPressed: () {
            Navigator.of(context).pop(myController.toString());
          },
        ),
      ],
    );
  }

  @override
  void dispose() {
    myController.dispose();
  }
}

现在由于某种奇怪的原因,AddDetailsInDialog内部的ShowAlertAndAutoDismiss被调用了两次…….. mmm?

这是我从右向左交换(删除)然后从左向右滑动(添加便笺)后得到的日志。删除工作,但是addNote被调用2次。为什么???有人知道为什么吗?

删除时记录

I/flutter ( 7941): ondismiss  started
I/flutter ( 7941): deleting record in basketList
I/flutter ( 7941): building ShowAlertAndAutoDismiss
I/flutter ( 7941): ziiiip

添加便笺时记录

I/flutter ( 7941): ondismiss  started
I/flutter ( 7941): adding a note
I/flutter ( 7941): got value
I/flutter ( 7941): building ShowAlertAndAutoDismiss
I/flutter ( 7941): building ShowAlertAndAutoDismiss
I/flutter ( 7941): ziiiip
I/flutter ( 7941): ziiiip
Mactrix

所以我通过在函数中移动ShowAlertAndAutoDismiss来解决

void alertToDismiss() {
    showDialog(
        context: context,
        builder: (context) => ShowAlertAndAutoDismiss(
              text: 'Note added',
            ));
  }

...

await showDialog(
                    context: context,
                    builder: (context) => AddDetailsInDialog(
                          dialogText: 'Enter your note',
                          hintText: 'eg. xxx',
                        )).then((value) async {
                  if (value != null) {
                    print('got value');
                    alertToDismiss():
                  }

看起来此小部件的行为类似于FutureBuilder,并且该构建器首先立即以null调用,然后在解析完将来之后

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Flutter中显示对话框而不在HookWidget中显示Buildcontext

来自分类Dev

如何在Android 4.4.2中的另一个对话框活动上显示对话框活动?

来自分类Dev

如何在Flutter中在离开屏幕之前显示确认对话框

来自分类Dev

flutter-如何在rflutter_alert对话框中显示CircularProgressIndicator

来自分类Dev

如何在 Flutter 中对齐对话框底部的两个按钮

来自分类Dev

如何在Flutter中删除警报对话框

来自分类Dev

如何在Flutter中关闭警报对话框?

来自分类Dev

如何在android中显示位置设置对话框?

来自分类Dev

如何在HTML对话框中显示Json数据

来自分类Dev

如何在PowerShell对话框中显示HTML页面?

来自分类Dev

如何在对话框中显示片段?

来自分类Dev

如何在NetBeans的对话框中显示JTable?

来自分类Dev

如何在 ReactJS 中显示模态对话框?

来自分类Dev

如何在 Angular 的对话框中显示输入更改?

来自分类Dev

如何在新的extJS对话框/面板中显示html2canvas'canvas'?

来自分类Dev

只有在一个函数中调用了2个showDialog()时,flutter show对话框才会显示

来自分类Dev

如何在单个确认对话框中组合两个或多个确认对话框?

来自分类Dev

Flutter如何在显示对话框中使用文本形式获取用户输入?

来自分类Dev

FLUTTER:如何在应用程序开始之前显示对话框?

来自分类Dev

如何在另一个上下文中显示对话框?

来自分类Dev

如何在PreferenceScreen(不在对话框中)中显示RadioButton列表

来自分类Dev

如何在FLUTTER中关闭没有按钮的警报对话框

来自分类Dev

如何在Flutter中创建多页警报对话框?

来自分类Dev

如何在开始订阅时显示对话框?

来自分类Dev

在onClick中显示一个对话框

来自分类Dev

如果目标操作失败,如何在按钮中显示警报对话框

来自分类Dev

如何在C ++中从控制台应用程序显示MFC对话框?

来自分类Dev

如何在对话框中显示注册的Ⓡ或商标™符号?

来自分类Dev

如何在“警报对话框生成器”中居中显示文本?

Related 相关文章

  1. 1

    如何在Flutter中显示对话框而不在HookWidget中显示Buildcontext

  2. 2

    如何在Android 4.4.2中的另一个对话框活动上显示对话框活动?

  3. 3

    如何在Flutter中在离开屏幕之前显示确认对话框

  4. 4

    flutter-如何在rflutter_alert对话框中显示CircularProgressIndicator

  5. 5

    如何在 Flutter 中对齐对话框底部的两个按钮

  6. 6

    如何在Flutter中删除警报对话框

  7. 7

    如何在Flutter中关闭警报对话框?

  8. 8

    如何在android中显示位置设置对话框?

  9. 9

    如何在HTML对话框中显示Json数据

  10. 10

    如何在PowerShell对话框中显示HTML页面?

  11. 11

    如何在对话框中显示片段?

  12. 12

    如何在NetBeans的对话框中显示JTable?

  13. 13

    如何在 ReactJS 中显示模态对话框?

  14. 14

    如何在 Angular 的对话框中显示输入更改?

  15. 15

    如何在新的extJS对话框/面板中显示html2canvas'canvas'?

  16. 16

    只有在一个函数中调用了2个showDialog()时,flutter show对话框才会显示

  17. 17

    如何在单个确认对话框中组合两个或多个确认对话框?

  18. 18

    Flutter如何在显示对话框中使用文本形式获取用户输入?

  19. 19

    FLUTTER:如何在应用程序开始之前显示对话框?

  20. 20

    如何在另一个上下文中显示对话框?

  21. 21

    如何在PreferenceScreen(不在对话框中)中显示RadioButton列表

  22. 22

    如何在FLUTTER中关闭没有按钮的警报对话框

  23. 23

    如何在Flutter中创建多页警报对话框?

  24. 24

    如何在开始订阅时显示对话框?

  25. 25

    在onClick中显示一个对话框

  26. 26

    如果目标操作失败,如何在按钮中显示警报对话框

  27. 27

    如何在C ++中从控制台应用程序显示MFC对话框?

  28. 28

    如何在对话框中显示注册的Ⓡ或商标™符号?

  29. 29

    如何在“警报对话框生成器”中居中显示文本?

热门标签

归档