Flutter 正在尝试更新数据库行计数值
我试图在家中接收数据库中存在的所有行。当我第一次在我的文本小部件中运行应用程序时,它显示为“null”,只有当我转到另一个页面并返回,并且该值未更新时,它才会更改。我向bd添加另一行,当我返回时,值从null变为28,例如,但已经有+1行 在home中,我使用setState获取initState中的值。有什么建议吗?谢谢Flutter 正在尝试更新数据库行计数值,flutter,dart,Flutter,Dart,我试图在家中接收数据库中存在的所有行。当我第一次在我的文本小部件中运行应用程序时,它显示为“null”,只有当我转到另一个页面并返回,并且该值未更新时,它才会更改。我向bd添加另一行,当我返回时,值从null变为28,例如,但已经有+1行 在home中,我使用setState获取initState中的值。有什么建议吗?谢谢 class HomePage extends StatefulWidget { @override _HomePageState createState() =>
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
ContactHelper helper = ContactHelper();
List<Contact> listaSigilos = List();
int count;
@override
initState() {
super.initState();
setState(() {
helper.getAllContacts().then((list) {
listaSigilos = list;
count = listaSigilos.length;
print(list);
print("count: $count");
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.black,
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (context) => NovoSigilo()));
},
child: Icon(Icons.add),
),
appBar: AppBar(
title: Text("Stuff to do"),
backgroundColor: Colors.black,
centerTitle: true,
actions: <Widget>[],
),
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Active"),
Text("$count",//Show row count here
...
类主页扩展StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
ContactHelper=ContactHelper();
List listaSigilos=List();
整数计数;
@凌驾
initState(){
super.initState();
设置状态(){
helper.getAllContacts().then((列表){
listaSigilos=列表;
计数=listaSigilos.length;
打印(列表);
打印(“计数:$count”);
});
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
浮动操作按钮:浮动操作按钮(
背景颜色:Colors.black,
已按下:(){
导航器。推(
context,materialpage(builder:(context)=>NovoSigilo());
},
子:图标(Icons.add),
),
appBar:appBar(
标题:文本(“待办事项”),
背景颜色:Colors.black,
标题:对,
行动:[],
),
主体:容器(
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“活动”),
Text(“$count”,//在此处显示行数
...
首先,不要直接在initState()方法中使用setState()
。其次,您只在initState()
中侦听数据库,该数据库只被调用一次,我创建了一个名为\u fetchData()
的新方法,该方法放在initState()中
以及您从第二页返回的页面
@override
initState() {
super.initState();
_fetchData(); // fetch data in the start
}
void _fetchData() {
helper.getAllContacts().then((list) {
listaSigilos = list;
count = listaSigilos.length;
print(list);
print("count: $count");
setState(() {});
});
}
将您的floatingAction按钮更新为
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.black,
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => NovoSigilo())).then((value) {
_fetchData(); // fetch data after coming back to this page
});
},
child: Icon(Icons.add),
)
太好了!我需要多练习。谢谢!!