Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 正在尝试更新数据库行计数值_Flutter_Dart - Fatal编程技术网

Flutter 正在尝试更新数据库行计数值

Flutter 正在尝试更新数据库行计数值,flutter,dart,Flutter,Dart,我试图在家中接收数据库中存在的所有行。当我第一次在我的文本小部件中运行应用程序时,它显示为“null”,只有当我转到另一个页面并返回,并且该值未更新时,它才会更改。我向bd添加另一行,当我返回时,值从null变为28,例如,但已经有+1行 在home中,我使用setState获取initState中的值。有什么建议吗?谢谢 class HomePage extends StatefulWidget { @override _HomePageState createState() =>

我试图在家中接收数据库中存在的所有行。当我第一次在我的文本小部件中运行应用程序时,它显示为“null”,只有当我转到另一个页面并返回,并且该值未更新时,它才会更改。我向bd添加另一行,当我返回时,值从null变为28,例如,但已经有+1行

在home中,我使用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
 ...
类主页扩展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),
)

太好了!我需要多练习。谢谢!!