我正在制作一個帶有彈簧休息后端和顫振前端的平房預訂系統。在這個我想得到一個平房清單。因此,我決定使用 HttpService 類來創建一個方法來獲取平房串列,該方法是我用來處理其余端點的方法,該方法是 getBungalows() 方法。然后我通過覆寫 initstate() 呼叫了這個方法。但問題是在我的 initstate() 完成之前。我的構建方法開始。為了證明這一點,我列印了兩行“列印”和“列印構建”,因為我認為我首先得到了“列印構建”。我在這里做錯了什么。請幫忙。
從rest后端檢索資料的方法
發生這種情況時,我首先檢查了此方法,但這作業正常并回傳所需的結果。
Future<List<Bungalow>> getBungalows() async {
Uri uri = Uri.parse('$url/bungalows/');
http.Response response = await http.get(uri);
if (response.statusCode == 200) {
List<Bungalow> bungalows = List<Bungalow>.from(
json.decode(response.body).map((x) => Bungalow.fromJson(x)));
// print(bungalows.first.address 'asafafasfafdfgfgarfgargafvfrvaerg');
return bungalows;
} else {
throw 'Unable to retrieve data';
}
}
主螢屏代碼
class _HomeScreenState extends State<HomeScreen> {
HttpService httpService = HttpService();
late List<Bungalow> bungalows;
bool isLoggedIn = false;
User? user;
void getBungalows() async {
bungalows = await httpService.getBungalows();
print('done');
}
@override
Widget build(BuildContext context) {
if (widget.user != null) {
isLoggedIn = true;
user = widget.user;
}
print('done build');
return Scaffold(
backgroundColor: Colors.white,
body: Column(
children: [
Text(isLoggedIn ? user!.userDetail.username : 'No login'),
// TextButton(
// onPressed: () {
// setState(() {
// getBungalows();
// print(bungalows.first.address);
// });
// },
// child: Text('click'))
],
),
);
}
@override
void initState() {
getBungalows();
}
}
控制臺輸出
I/flutter (22248): done build
I/flutter (22248): done
uj5u.com熱心網友回復:
它運行正常,initState 函式不是異步的,并且方法 getBungalows() 是并行呼叫的。您應該在 getBungalows 中使用 setState,或者添加一個監聽器,或者使用then關鍵字,或者使用 StreamBuilder。
檢查這個:https : //stackoverflow.com/a/54647682/305135
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321728.html
