当数据库中的数据发生变化时,如何正确地重新绘制显示SQLite数据库数据的小部件?

当数据库中的数据发生变化时,如何正确地重新绘制显示SQLite数据库数据的小部件?,sqlite,flutter,Sqlite,Flutter,我将选定的季度存储在Sqlite数据库中。此季度显示在应用程序栏中,同时显示一些文本,用户可以单击这些文本将其带到一个页面,在该页面上用户可以更改所选季度。一旦用户从页面中选择了一个季度,我就将这个neq季度推送到sqlite数据库,以便显示它。我还使用Navigator.pop(上下文)选择新季度时返回上一页。我的问题是,一旦用户选择了一个新季度,该季度就不会显示在他们刚刚打开的页面上。你必须离开才能看到它,或者离开再回到。FutureBuilder似乎不知道SQLite数据库中有需要显示的新

我将选定的季度存储在Sqlite数据库中。此季度显示在应用程序栏中,同时显示一些文本,用户可以单击这些文本将其带到一个页面,在该页面上用户可以更改所选季度。一旦用户从页面中选择了一个季度,我就将这个neq季度推送到sqlite数据库,以便显示它。我还使用
Navigator.pop(上下文)
选择新季度时返回上一页。我的问题是,一旦用户选择了一个新季度,该季度就不会显示在他们刚刚打开的页面上。你必须离开才能看到它,或者离开再回到。FutureBuilder似乎不知道SQLite数据库中有需要显示的新数据。当用户选择新季度时,我将如何让它显示新数据?感谢您的帮助!谢谢

我如何显示硬币。另外,将您带到页面以更改季度的按钮也位于此处

  @override
  Widget build(BuildContext context) {
    return Container(
        color: Colors.white,
        child: FutureBuilder<dynamic>(
            future: SessionDBProvider.sessionDB.getSessionObject(),
            initialData: List(),
            builder: (context, snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return Text('none');
                case ConnectionState.waiting:
                  return Center(child: CircularProgressIndicator());
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (snapshot.hasError) {
                    print(
                      '${snapshot.error}',
                    );
                  }
              }
              List session = snapshot.data;
              return Container(
                  child: Column(children: <Widget>[
                    Flexible(
                      flex: 2,
                      child: Row(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          Container(
                            width: MediaQuery.of(context).size.width,
                            decoration: BoxDecoration(
                                gradient: LinearGradient(
                                    colors: [Colors.blue, Colors.red],
                                    begin: Alignment.topRight,
                                    end: Alignment.topLeft,
                                    stops: [0.2, 1])),
                            child: Container(
                              margin: EdgeInsets.only(left: 11),
                              child: Text(
                                "Test Page",
                                style: TextStyle(
                                    color: Colors.white,
                                    fontSize: 27,
                                    fontFamily: 'Montserrat',
                                    height: 1.1),
                              ),
                            ),
                          )
                        ],
                      ),
                    ),
                    Flexible(
                      flex: 2,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        crossAxisAlignment: CrossAxisAlignment.stretch,
                        children: [
                          Container(
                            margin: EdgeInsets.only(left: 10),
                            child: Text(
                              "${session[0].selected_quarter}",
                              style: TextStyle(
                                  color: Colors.black,
                                  fontWeight: FontWeight.bold,
                                  fontSize: 25),
                            ),
                          ),
                        ],
                      ),
                    ),);
            }));
  }
@覆盖
小部件构建(构建上下文){
返回容器(
颜色:颜色,白色,
孩子:未来建设者(
future:SessionDBProvider.sessionDB.getSessionObject(),
initialData:List(),
生成器:(上下文,快照){
交换机(快照.连接状态){
案例连接状态。无:
返回文本(“无”);
案例连接状态。正在等待:
返回中心(子项:CircularProgressIndicator());
案例连接状态.active:
返回文本(“”);
案例连接状态。完成:
if(snapshot.hasError){
印刷品(
“${snapshot.error}”,
);
}
}
列表会话=snapshot.data;
返回容器(
子项:列(子项:[
灵活的(
弹性:2,
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
容器(
宽度:MediaQuery.of(context).size.width,
装饰:盒子装饰(
梯度:线性梯度(
颜色:[颜色。蓝色,颜色。红色],
开始:Alignment.topRight,
结束:对齐。左上角,
停止:[0.2,1]),
子:容器(
页边距:仅限边集(左:11),
子:文本(
“测试页面”,
样式:TextStyle(
颜色:颜色,白色,
尺寸:27,
fontFamily:“蒙特塞拉特”,
高度:1.1),,
),
),
)
],
),
),
灵活的(
弹性:2,
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
容器(
边距:仅限边距组(左:10),
子:文本(
“${session[0]。已选择\u quarter}”,
样式:TextStyle(
颜色:颜色,黑色,
fontWeight:fontWeight.bold,
尺寸:25),,
),
),
],
),
),);
}));
}
这是您选择新季度并将其推送到Sqlite数据库的地方

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.grey[200],
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(95.0),
          child: AppBar(
            automaticallyImplyLeading: false, // hides leading widget
            flexibleSpace: DataAppBar(),
          ),
        ),
        body: FutureBuilder<dynamic>(
            future: DataDBProvider.dataDB.getData(),
            initialData: List(),
            builder: (context, snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return Text('none');
                case ConnectionState.waiting:
                  return Center(child: CircularProgressIndicator());
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (snapshot.hasError) {
                    print(
                      '${snapshot.error}',
                    );
                  }
              }
                     List data = snapshot.data;
                    return ListView.builder(
                      itemCount: snapshot.data.length,
                      shrinkWrap: true,
                      itemBuilder: (context, int index) {
                        return Padding(
                          padding: EdgeInsets.symmetric(
                              vertical: 1.0, horizontal: 4.0),
                          child: Card(
                            color: (index % 2 == 0) ? greycolor : Colors.white,
                            child: Container(
                              height: 60,
                              padding: EdgeInsets.fromLTRB(0, 20, 0, 0),
                              child: InkWell(
                                onTap: () {
                                             Data data = new Data();
                                             data.quarter_status = data[index].status;
                                             data.selected_quarter = data[index].quarter;
                                              
                                             DataDBProvider.sessionDB.updateSession(session);
                                              Navigator.pop(context);
                                             },
                                child: Row(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: <Widget>[
                                    Container(
                                      margin: EdgeInsets.only(right: 5),
                                      child: Text(data[index].quarter,
                                          style: TextStyle(
                                              fontSize: 20,
                                              fontFamily: 'Montserrat',
                                              color: Colors.blue),
                                          textAlign: TextAlign.left),
                                    ),
                                  ],
                                ),
                              ),
                            ),
                          ),
                        );
                      },
                    );

            }));
}}
  
@覆盖
小部件构建(构建上下文){
返回脚手架(
背景颜色:颜色。灰色[200],
appBar:首选大小(
首选尺寸:尺寸。从高度(95.0),
孩子:AppBar(
automaticallyImplyLeading:false,//隐藏前导小部件
flexibleSpace:DataAppBar(),
),
),
正文:未来建设者(
future:DataDBProvider.dataDB.getData(),
initialData:List(),
生成器:(上下文,快照){
交换机(快照.连接状态){
案例连接状态。无:
返回文本(“无”);
案例连接状态。正在等待:
返回中心(子项:CircularProgressIndicator());
案例连接状态.active:
返回文本(“”);
案例连接状态。完成:
if(snapshot.hasError){
印刷品(
“${snapshot.error}”,
);
}
}
列表数据=snapshot.data;
返回ListView.builder(
itemCount:snapshot.data.length,
收缩膜:对,
itemBuilder:(上下文,int索引){
返回填充(
填充:EdgeInsets.symmetric(
垂直:1.0,水平:4.0),
孩子:卡片(
颜色:(索引%2==0)?灰色:Colors.white,
子:容器(
身高:60,
填充:EdgeInsets.fromLTRB(0,20,0,0