Flutter 如何在颤振中显示两个连续对话框

Flutter 如何在颤振中显示两个连续对话框,flutter,flutter-alertdialog,Flutter,Flutter Alertdialog,我有一个列表,上面有一个可驳回的小部件。当用户交换开始结束时,我想在用户可以添加注释时创建一个对话框。一旦用户在该对话框中单击ok,我希望弹出另一个对话框来确认添加了注释,然后在2秒钟后消失。当用户从右向左交换时,我想显示一个带有消息的对话框2秒钟 这是我的密码 List<Container> _buildBasketList() { return appData.basketList.map((bList) { var container = Contain

我有一个列表,上面有一个可驳回的小部件。当用户交换开始结束时,我想在用户可以添加注释时创建一个对话框。一旦用户在该对话框中单击ok,我希望弹出另一个对话框来确认添加了注释,然后在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",
                        ));
              }
            },
添加便笺时记录日志

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

因此,我通过在函数中移动ShowAlertandAutoDisclose解决了这个问题

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


看起来这个小部件的行为就像一个FutureBuilder,该生成器首先被立即调用为null,然后在future解决后

我才意识到罪魁祸首是
AddDetailsInDialog
,它被调用了两次。。。还是个谜为什么?!看起来它正在重建,但为什么?
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
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():
                  }