Как я могу закрыть виджет диалогового окна после получения данных в текстовом виджете

#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 ? Причина в том, что теперь круговой индикатор выполнения находится только в тексте