#flutter #dart
Вопрос:
У меня есть это buildShowDialog
, которое загружается в initState
мой текстовый виджет и в нем, когда я получаю некоторые данные, которые я хочу закрыть buildShowDialog
. Как я могу это сделать ?
Метод buildshowDialog
buildShowDialog(BuildContext context) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return Center(
child: CircularProgressIndicator(),
);
});
}
вызываю его в initState
@override
void initState() {
super.initState();
buildShowDialog(context);
}
Теперь в моем виджете, когда я получаю некоторые данные в своем текстовом виджете из пакета поставщика, я хочу закрыть диалоговое окно, а затем
@override
Widget build(BuildContext context) {
\
return Scaffold(
body: Stack(
\
Consumer < AppData > (
builder: (ctx, prod, child) => dropOffText ?
Text(
prod.dropOffLocation != null ?
prod.dropOffLocation
***CALL NAVIGATOR.POP HERE! *** (close the dialog here)
:
"Pick your destination ",
style: TextStyle(fontSize: 12.0),
overflow: TextOverflow.ellipsis,
) :
Text("Pick your destination "),
Ответ №1:
вы можете сделать это по-разному, например, не показывая диалоговое окно в состоянии инициализации, вместо этого вы можете использовать FutureBuilder, как показано ниже
FutureBuilder<String>(
future: _getData,
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState!=ConnectionState.done) {
return CircularProgressIndicator();
}
else Text(snapshot.data);
},
)
или вы также можете использовать этот пакет вместо
Комментарии:
1. Вы, вероятно, правы, я попробую ваше предложение, но пока не могли бы вы помочь мне с тем, как я мог бы закрыть диалоговое окно, если мое
dropOffLocation
значение не равно null ? Причина в том, что теперь круговой индикатор выполнения находится только в тексте