使用TabBarView和DefaultTabController时的initState()

时间:2019-09-10 07:02:03

标签: firebase flutter google-cloud-firestore firebase-authentication

我正在使用initState方法从firestore加载数据。如果屏幕不是TabBarView()的一部分,它将按预期工作,而在TabBarView中,我必须将其热加载到loadData。

///我如何创建mt标签页

return DefaultTabController(
  length: 4,
      child: Scaffold(
    appBar: AppBar(centerTitle: true,        
      title: Text("tabs", style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white)),
      bottom: TabBar(

        indicatorColor: Colors.white,
        tabs: <Widget>[
          Tab(
            icon: Image.asset(
              "assets/icons/tools.png",
              height: 40,
            ),
            child: Text("tab0",style: TextStyle(fontSize: 10),),
          ),
          Tab(
            icon: Image.asset(
              "assets/icons/il.png",
              height: 40,
            ),
            child: Text("tab1",style: TextStyle(fontSize: 10)),
          ),
          Tab(
            icon: Icon(Icons.lock),
            child: Text("tab2"),
          ),
          Tab(
            icon: Icon(Icons.lock),
            child: Text("tab3"),
          ),
        ],
      ),
    ),
    body: TabBarView(children: <Widget>[
      Tab0(),
      Tab2(),
      Tab2(),
     Tab3()
    ],),
  ),
);

这是我从Tab3中的cloudfirestore加载数据的方式:

getIssues() async {
  final FirebaseUser fbUser = await FirebaseAuth.instance.currentUser();
  final String user = fbUser.uid;
  return await Firestore.instance
    .collection('users')
    .document(user)
    .collection('mydata')
    .getDocuments();
}

我的initState

QuerySnapshot querySnapshot;

@override
void initState() {
  super.initState();
  getIssues().then((results) {
    querySnapshot = results;
  });
}

1 个答案:

答案 0 :(得分:1)

也许您可以尝试以下方法:

@override
void initState() {
  super.initState();
  getIssues().then((results) {
    setState(() {
      querySnapshot = results;
    });
  });
}