Flutter и AlertDialog: как мне выровнять его по низу? Как я создаю 2 диалоговых окна с предупреждениями, подобных этим изображениям?

#flutter #android-alertdialog #multiple-alert-dialogs

#flutter #android-alertdialog #диалоги с несколькими предупреждениями

Вопрос:

Flutter и AlertDialog: как мне выровнять его по низу? Как я создаю 2 диалоговых окна с предупреждениями, подобных этим изображениям?Пожалуйста, посмотрите на эту картинку.

введите описание изображения здесь

 showDialog(
                                context: context,
                                builder: (BuildContext context) {
                                  double width =
                                      MediaQuery.of(context).size.width;
                                  double height =
                                      MediaQuery.of(context).size.height;
                                  return AlertDialog(
                                    backgroundColor: Colors.transparent,
                                    contentPadding: EdgeInsets.zero,
                                    title: Center(
                                        child: Text("Evaluation our APP")),
                                    content: Container(

                                       // What Should I write here?

                                    )
                                },
                              );
  

Комментарии:

1. Привет! Я думаю, что это всего лишь одно диалоговое окно с предупреждением. В контейнер размера вы можете добавить столбец (дочерний элемент: [ListTitle,ListTitle,ListTitle, SizedBox, ListTitle ] ).

2. Но тогда все плитки списка будут подключены. Как мы можем сделать фон прозрачным?

Ответ №1:

Вот одно из решений:

           showDialog(
            context: context,
            builder: (BuildContext context) {
              double width = MediaQuery.of(context).size.width;
              double height = MediaQuery.of(context).size.height;
              return AlertDialog(
                  backgroundColor: Colors.transparent,
                  contentPadding: EdgeInsets.zero,
                  elevation: 0.0,
                  // title: Center(child: Text("Evaluation our APP")),
                  content: Column(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Container(
                        padding: const EdgeInsets.all(8.0),
                        decoration: BoxDecoration(
                            color: Colors.white,
                            borderRadius:
                                const BorderRadius.all(Radius.circular(10.0))),
                        child: Column(
                          children: [
                            Text("a"),
                            Divider(),
                            Text("b"),
                            Divider(),
                            Text("c"),
                          ],
                        ),
                      ),
                      SizedBox(
                        height: 10,
                      ),
                      Container(
                        padding: const EdgeInsets.all(8.0),
                        decoration: BoxDecoration(
                            color: Colors.white,
                            borderRadius:
                                const BorderRadius.all(Radius.circular(10.0))),
                        child: Center(child: Text("d")),
                      )
                    ],
                  ));
            },
          );
  

Комментарии:

1. Я попробовал ваш способ. Но фон не совсем прозрачный. Вы можете видеть тень диалогового окна с предупреждением

2. Пожалуйста, убедитесь, что высота ‘AlertDialog’ равна 0.0. Я также отредактировал ваш код.

3. Спасибо! Это работает. То, что вы сказали, было очень полезно для меня.

Ответ №2:

вот мой ответ, чистый виджет без создания AlertDialog:

 
    final content = Column(
      mainAxisAlignment: MainAxisAlignment.end,
      children: [
        Container(
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: const BorderRadius.all(Radius.circular(10.0)),
          ),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              TextButton(onPressed: () {}, child: Text("a"),),
              Divider(height: 1,),
              TextButton(onPressed: () {}, child: Text("b"),),
              Divider(height: 1,),
              TextButton(onPressed: () {}, child: Text("c"),),
            ],
          ),
        ),
        SizedBox(
          height: 10,
        ),
        Container(
          width: double.infinity,
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius:
            const BorderRadius.all(Radius.circular(10.0)),
          ),
          child: TextButton(onPressed: () {}, child: Text("d"),),
        ),
        SizedBox(
          height: 40,
        ),
      ],
    );

    showDialog(
      context: context,
      builder: (ctx) {
        return FractionallySizedBox(
          widthFactor: 0.9,
          child: Material(
            type: MaterialType.transparency,
            child: content,
          ),
        );
      }
    );
  

необходимо добавить Material из-за ошибки рисования текста.