我有一個回傳 Future 的函式,我想將它放在一個變數中,以便變數的值保持不變,并且只要不重建小部件,就可以在小部件的其他功能中使用。
這個值是一個 sessionid,我想用它來訪問在小部件的“子小部件”中呼叫的網路服務。現在我正在執行整個身份驗證程序以在每次呼叫 web 服務時獲取 sessionid。
這是我嘗試過的:
@override
Widget build(BuildContext context)async{
sessionid = await getSessionId();
但是當我使用 async await 我的 build 方法必須回傳一個 Future,但是 build 方法實際上不能回傳一個 Future 所以我在這里有點受阻。
任何幫助,將不勝感激,
更新 :
我創建了這個函式來設定變數值:
setJsessionId()async {
var new_jsessionId = await getJsessionId();
setState(() {
jsessionId = new_jsessionId;
});
我在這里稱之為:
@override
Widget build(BuildContext context){
setJsessionId();
它可以作業,但問題是它不斷重建小部件并永遠呼叫身份驗證功能和網路服務,
我呼叫 web 服務來構建一個 reorderableListView 并且它不斷復制結果而不會停止:

這是我用來顯示此串列的 FutureBuilder 的代碼:
child: FutureBuilder<List<Task>>(
future:
getTasks(),
builder: (BuildContext context, AsyncSnapshot<List<Task>> snapshot){
if(snapshot.hasError){
return const Text('Erreur');
}
if(snapshot.hasData){
return ReorderableListView(
buildDefaultDragHandles: false,
header: Center(
child: Container(
child: Text(
'Listes des taches',
style: Theme.of(context).textTheme.headline5,
),
padding: EdgeInsets.symmetric(vertical: 20)
)
),
children: taskList.map((e) => ListTile(
key: UniqueKey(),
//leading: Icon(BeoticIcons.disc),
leading: Image.asset("assets/images/Task-Bleu_0.png", height: 30),
title: Text("Tache: " e.name),
subtitle: Text("Projet: " e.projectName),
//trailing: Icon(BeoticIcons.circle_check, color: Colors.green)
trailing: Wrap(
spacing: 5,
children: [
Image.asset("assets/images/Task-Validated_0.png", height: 30),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TaskInfoPage(task: e)
),
);
},
child: Icon(BeoticIcons.simply_right, size: 28)
)
]
)
)).toList(),
onReorder: _onReorder,
);
}
return const Center(child: CircularProgressIndicator());
}
)
這是感謝,
uj5u.com熱心網友回復:
創建一個未來方法,例如,
setSessionId() async {
sessionid = await getSessionId();
}
在構建中呼叫上面的函式,
@override
Widget build(BuildContext context) {
setSessionId();
或者你也可以在 initState() 中使用 call setSessionId() ,如下所示,
@override
void initState() {
super.initState();
setSessionId();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345330.html
