我正在尝试在家中接收数据库中存在的所有行。当我在文本小部件中首次运行该应用程序时,它显示为“ null”,只有在我转到另一个页面并返回并且值未更新时,它才会更改。我在bd中添加了另一行,当我返回时,其值从null变为28,但是已经有+1行。
在家里,我正在使用setState在initState内部获取值。有什么建议吗?谢谢!!
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
...
答案 0 :(得分:1)
首先,切勿直接在setState()
方法内部使用initState()
。其次,您只听了initState()
内的数据库一次调用,我创建了一个名为_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(() {});
});
}
将您的floatingActionButton
更新为
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),
)