任務是從 SharedPrefences 獲取值并將其顯示在 Text 小部件中。
在這里,我嘗試將值存盤在變數 _userCurrency 中并將其顯示在 ListTile 中。問題似乎是 ListTile 以“null”值快速加載。
甚至 getUserCurrencySymbol() 也不回傳任何值。我已經嘗試過 return MySharedPreferences.instance.getUserCurrencyValue('userCurrency'); 和其他可能的解決方案。
選單.dart
late String _userCurrency;
getUserCurrencySymbol().then((value) {_userCurrency = value.toString();});
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListView(
children: [
ListTile(title: Text(_userCurrency)),
]
) //ListView
},
); //Stateful builder
控制器.dart
Future<String> getUserCurrencySymbol() async {
MySharedPreferences.instance.getUserCurrencyValue('userCurrency').then((value) {return value.toString();});
}
class MySharedPreferences {
MySharedPreferences._privateConstructor();
static final MySharedPreferences instance = MySharedPreferences._privateConstructor();
setUserCurrencyValue(String key, String value) async {
SharedPreferences instance = await SharedPreferences.getInstance();
instance.setString(key, value);
}
getUserCurrencyValue(String key) async {
SharedPreferences instance = await SharedPreferences.getInstance();
return instance.getString(key) ?? "Bitcoin";
}
uj5u.com熱心網友回復:
您應該setState在加載資料時使用它來更新 ui。
getUserCurrencySymbol().then((value) {
setState((){
_userCurrency = value.toString();
});
});
uj5u.com熱心網友回復:
您可以使用FutureBuilder加載資料并處理加載/錯誤狀態
FutureBuilder<String>(
future: getUserCurrencySymbol(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();//or what you want
}
return ListView(
children: [
ListTile(title: Text(snapshot.data)),
]
);
},
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351828.html
上一篇:如何在Sequelize的“findByPk”陳述句中同時使用“include”和“attributes”?
下一篇:在顫振中決議動態串列
