如何使用setState更新AlertDialog的内容?

问题描述

我需要知道是否可以像线性进度指示器的值那样更新其内容,是否有可能,我搜索了此问题,但没有找到满意的答案。

代码

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,);

解决方法

如果我没记错的话,可以使用StatefulBuilder小部件并使用setmodalState而不是setState,我将其与模态底部工作表一起使用

,

这是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,);
              },));
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...