Как обновить содержимое AlertDialog с помощью setState?

#flutter #android-alertdialog #setstate

#flutter #android-alertdialog #setstate

Вопрос:

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

код

 else {
              setState(() {
                percentage = (event.snapshot.bytesTransferred /
                    event.snapshot.totalByteCount);
              });
              print(percentage);
            }
          });
          return showDialog(
            context: context,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text('Uploading'),
                content: Column(
                  children: [
                    Center(
                      child: Text('Uploading .... Please Be Patient'),
                    ),
                    SizedBox(
                      height: height * 0.02,
                    ),
                    LinearProgressIndicator(
                      value: percentage != null ? percentage : 0.0,
                    )
                  ],
                ),
              );
            },
            barrierDismissible: false,
          );
  

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

1. не могли бы вы добавить свой код?

2. просто обновил его

3. да ….. но я не полностью понял ваш ответ, и вы не ответили на мое последнее сообщение, поэтому я открыл новый вопрос.

4. Привет @FlutterDeveloper11 Не могли бы вы решить эту проблему?

Ответ №1:

если я не ошибаюсь, вы можете использовать StatefulBuilder widget и использовать setmodalState вместо setState, я использовал его с модальным нижним листом

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

1. Я не могу использовать progress, я должен использовать progress.value, поскольку это дает мне понять, что ему нельзя присвоить значение double .

2. нет, с некоторыми изменениями, но не думаю, что это повлияет на него.

Ответ №2:

Вот рабочий код с StatefulBuilder :

 
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int number = 0;
  StateSetter _setModalState;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Material(
          child: Center(
            child: FlatButton(
              color: Colors.green,
              child: Padding(
                padding: EdgeInsets.all(12),
                child: Text('press me'),
              ),
              onPressed: () {
                showDialog(
                  context: context,
                  builder: (BuildContext context) {
                    return StatefulBuilder(builder:
                        (BuildContext context, StateSetter setModalState) {
                      this._setModalState = setModalState;
                      return AlertDialog(
                        content: Wrap(
                          children: [
                            Column(
                              children: [
                                Center(
                                  child: Text(number.toString()),
                                ),
                                SizedBox(
                                  height: 100,
                                ),
                                FlatButton(
                                  color: Colors.red,
                                  onPressed: () {
                                    _setModalState(() {
                                      number  ;
                                    });
                                  },
                                  child: (Text("  ")),
                                )
                              ],
                            ),
                          ],
                        ),
                      );
                    });
                  },
                  barrierDismissible: false,
                );
              },
            ),
          ),
        ));
  }
}
  

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

1. вы можете использовать _setModalState где угодно

2. как я могу использовать его с переменными

3. просто реализуйте StatefulBuilder, как показано в моем примере, и замените setState на _setModalState , тогда ваш код должен работать))

4. вы имеете в виду следующее : _setModalState(() { percentage = (event.snapshot.bytesTransferred / event.snapshot.totalByteCount); });

5. вы добавили это this._setModalState = setModalState; ?