我正在嘗試顯示一個有效的檔案串列,但我讀到一個好的做法是管理狀態(我目前也在嘗試理解)。在這種情況下,每次我使用 bottomNavigationBar 更改螢屏時,streamBuilder 都會執行(我總是看到 CircularProgressIndicator)。我嘗試在 intState 中呼叫集合參考,但仍然是同樣的問題,我的代碼:
class Deparments extends StatefulWidget {
Deparments({Key? key, required this.auth}) : super(key: key);
final AuthBase auth;
@override
_DeparmentsState createState() => _DeparmentsState();
}
class _DeparmentsState extends State<Deparments> {
late final Stream<QuerySnapshot<Object?>> _widget;
Stream<QuerySnapshot<Object?>> getProds(){
CollectionReference ref = FirebaseFirestore.instance.collection("Departamentos");
return ref.snapshots();
}
@override
void initState() {
super.initState();
_widget = getProds();
}
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: SideMenu(auth: widget.auth),
appBar: AppBar(
title: Text("Departamentos"),
centerTitle: true,
backgroundColor: Colors.green,
),
body: Container(
child: StreamBuilder<QuerySnapshot> (
stream: _widget,
builder: (BuildContext context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
} else {
List deparments =
snapshot.data!.docs.map((doc) => doc.id).toList();
return Column(
children: [
Expanded(
child: ListView.builder(
padding: EdgeInsets.only(top: 10),
scrollDirection: Axis.vertical,
itemCount: deparments.length,
itemBuilder: (context, index) {
return SingleChildScrollView(
child: Card(
child: Text(deparments[index]),
),
);
}),
)
],
);
}
}),
),
);
}
}
uj5u.com熱心網友回復:
initState像這個答案一樣初始化你的流:
StreamBuilder 在構建時被多次呼叫
uj5u.com熱心網友回復:
初始化狀態不會幫助您避免重建,因為在更改選項卡時 Flutter 會重建您的螢屏。所以我們需要一些方法來讓我們的螢屏保持活動狀態,所以這里是 AutomaticKeepAliveClientMixin。
查看以下答案以了解實施情況。
https://stackoverflow.com/a/64057210/9429407
此外,如果您想要一種更好的方式來管理狀態并將一些讀取呼叫保存到 Firestore,那么您應該在本地存盤資料并僅獲取那些需要的資料,使用分頁等
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/337355.html
上一篇:如何在資料模型中添加子集合?撲
下一篇:在我關于顫振的詳細資訊頁面中,我嘗試使用ClipRRect對影像進行圓角處理,它在串列視圖頁面中運行良好,但在此頁面上它不起作用
