Как сделать полноэкранный алертдиалог во флаттере
Мне нужна помощь, чтобы сделать диалоговое окно с предупреждениями в полноэкранном режиме, это код, который у меня есть, как я могу этого добиться? Я не знаю, можно ли определить ширину как размер экрана и высоту.
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),
)
],
),
),
);
});