Как сделать полноэкранный алертдиалог во флаттере

Мне нужна помощь, чтобы сделать диалоговое окно с предупреждениями в полноэкранном режиме, это код, который у меня есть, как я могу этого добиться? Я не знаю, можно ли определить ширину как размер экрана и высоту.

    createNewMessage() {
    return showDialog(
        barrierDismissible: false,
        context: context,
        builder: (BuildContext context) {
          return StatefulBuilder(builder: (context, setState) {
            return WillPopScope(
                onWillPop: () {},
                child: Container(
                    child: new AlertDialog(
                  title: Column(
                    children: <Widget>[
                      new Text(Translations.of(context).trans('finishmessage') +
                          '?'),
                      Container(
                        height: 20,
                      ),
                      DropdownButton(
                        hint: new Text('Para'),
                        isExpanded: true,
                        onChanged: (value) {
                          setState(() => selected = value);
                        },
                        value: selected,
                        items: workers.map((worker) {
                          return DropdownMenuItem(
                            child: new Text(worker.vNome),
                            value: worker.vCodigo,
                          );
                        }).toList(),
                      ),
                      Container(
                        height: 10,
                      ),
                      TextField(decoration: InputDecoration(labelText: "Data")),
                      Container(
                        height: 10,
                      ),
                      TextField(decoration: InputDecoration(labelText: "Hora")),
                      Container(
                        height: 10,
                      ),
                      TextField(
                          decoration: InputDecoration(labelText: 'Mensagem'))
                    ],
                  ),
                  actions: <Widget>[
                    FlatButton(
                        child:
                            Text(Translations.of(context).trans('sendMessage')),
                        onPressed: () {}),
                    FlatButton(
                        child:
                            Text(Translations.of(context).trans('closealert')),
                        onPressed: () {
                          setState(() => selected = null);
                          Navigator.of(context).pop();
                        }),
                  ],
                )));
          });
        });
  }

Это результат на данный момент:
Текущее диалоговое окно с предупреждением
Текущее диалоговое окно предупреждения

Спасибо за вашу помощь и время

1 ответ

Решение

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

createNewMessage() {
  return showDialog(
    barrierDismissible: false,
    context: context,
    builder: (BuildContext context) {
      return StatefulBuilder(
        builder: (context, setState) {
          return WillPopScope(
              onWillPop: () {
                return Future.value(true);
              },
              child: Material(
                child: Container(
                  padding: const EdgeInsets.all(16.0),
                  width: double.infinity,
                  height: double.infinity,
                  child: Column(
                    children: <Widget>[
                      new Text(Translations.of(context).trans('finishmessage') +
                          '?'),
                      Container(
                        height: 20,
                      ),
                      DropdownButton(
                        hint: new Text('Para'),
                        isExpanded: true,
                        onChanged: (value) {
                          setState(() => selected = value);
                        },
                        value: selected,
                        items: workers.map((worker) {
                          return DropdownMenuItem(
                            child: new Text(worker.vNome),
                            value: worker.vCodigo,
                          );
                        }).toList(),
                      ),
                      Container(
                        height: 10,
                      ),
                      TextField(decoration: InputDecoration(labelText: "Data")),
                      Container(
                        height: 10,
                      ),
                      TextField(decoration: InputDecoration(labelText: "Hora")),
                      Container(
                        height: 10,
                      ),
                      TextField(
                          decoration: InputDecoration(labelText: 'Mensagem')),
                      Spacer(),
                      Row(
                        children: <Widget>[
                          Spacer(),
                          FlatButton(
                              child: Text(Translations.of(context)
                                  .trans('sendMessage')),
                              onPressed: () {}),
                          FlatButton(
                              child: Text(
                                  Translations.of(context).trans('closealert')),
                              onPressed: () {
                                setState(() => selected = null);
                                Navigator.of(context).pop();
                              }),
                        ],
                      ),
                    ],
                  ),
                ),
              ));
        },
      );
    },
  );
}

Попробуй, это сработает для меня

showGeneralDialog(
  context: context,
  barrierDismissible: true,
  barrierLabel: MaterialLocalizations.of(context)
      .modalBarrierDismissLabel,
  barrierColor: Colors.black45,
  transitionDuration: const Duration(milliseconds: 200),
  pageBuilder: (BuildContext buildContext,
      Animation animation,
      Animation secondaryAnimation) {
    return Center(
      child: Container(
        width: MediaQuery.of(context).size.width - 10,
        height: MediaQuery.of(context).size.height -  80,
        padding: EdgeInsets.all(20),
        color: Colors.white,
        child: Column(
          children: [
            RaisedButton(
              onPressed: () {
                Navigator.of(context).pop();
              },
              child: Text(
                "Save",
                style: TextStyle(color: Colors.white),
              ),
              color: const Color(0xFF1BC0C5),
            )
          ],
        ),
      ),
    );
  });
Другие вопросы по тегам