尝试获取数据库行计数值更新

时间:2019-08-22 14:22:38

标签: flutter dart

我正在尝试在家中接收数据库中存在的所有行。当我在文本小部件中首次运行该应用程序时,它显示为“ 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
 ...

1 个答案:

答案 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),
)