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