我的 flutter 應(yīng)用程序中有一個(gè) Future Builder,它顯示——Error : 如果json解析有錯(cuò)誤數(shù)據(jù):如果一切順利裝載機(jī):如果需要時(shí)間一切正常。Future 正在調(diào)用一個(gè)“future”函數(shù),該函數(shù)正在執(zhí)行一些學(xué)生數(shù)據(jù)的獲取請求,而“builder”正在顯示它。我在同一頁上有一個(gè)編輯對(duì)話框。我可以通過put請求編輯學(xué)生信息。問題是,當(dāng)我單擊編輯對(duì)話框中的表單字段時(shí),我注意到獲取請求自動(dòng)發(fā)生了大約 10 次。當(dāng)我保存編輯時(shí),會(huì)出現(xiàn)一個(gè)確認(rèn)對(duì)話框,表明數(shù)據(jù)已更新。當(dāng)這種情況再次發(fā)生時(shí),獲取請求最多發(fā)生 10 次。然后它彈出。所以服務(wù)器上大約有 20 個(gè)無用的請求發(fā)生。我認(rèn)為它發(fā)生是因?yàn)楫?dāng)我單擊表單字段時(shí),鍵盤出現(xiàn)并且底層顯示小部件重建,調(diào)用 api。當(dāng)數(shù)據(jù)被編輯時(shí),鍵盤會(huì)再次回到原來的位置,小部件會(huì)重建,調(diào)用 api。我該如何解決這個(gè)問題?如果有幫助,這是代碼: child: FutureBuilder( future: APIs().getStudentDetails(), builder: (context, data) { if (data.hasError) { return Padding( padding: const EdgeInsets.all(8), child: Center(child: Text("${data.error}"))); } else if (data.hasData) { var studentData = data.data as List<StudentDetails>; return Padding( padding: const EdgeInsets.fromLTRB(0, 15, 0, 0), child: SingleChildScrollView( child: SizedBox( height: MediaQuery.of(context).size.height * 0.9, child: ListView.builder( itemCount: studentData.length, itemBuilder: ((context, index) { final student = studentData[index]; final id = student.studentId; final father = student.fatherName; final mother = student.motherName; final cg = student.cg; },
3 回答

冉冉說
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

SMILET
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
future
為like創(chuàng)建一個(gè)狀態(tài)變量
late final future = APIs().getStudentDetails();
并使用
FutureBuilder( future: future ,
您可以檢查Fixing a common FutureBuilder and StreamBuilder problem

慕容708150
TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
class _YourWidgetState extends State<YourWidget> with AutomaticKeepAliveClientMixin<YourWidget> {
@override
bool get wantKeepAlive => true;
因此,使用 AutomaticKeepAliveClientMixin 擴(kuò)展您的 Widget,這樣 Listview 中的項(xiàng)目將不會(huì)被復(fù)制
- 3 回答
- 0 關(guān)注
- 107 瀏覽
添加回答
舉報(bào)
0/150
提交
取消