Async await 不等待输出到 return

Async await does not wait for the output to return

我正在制作一个带有 spring rest 后端和 flutter 前端的平房预订系统。 在此我想获得平房列表。 所以我决定创建一个方法来获取平房列表,该方法使用 HttpService class 来处理其余端点,该方法是 getBungalows() 方法。 然后我通过覆盖 initstate() 来调用这个方法。 但问题是在我的 initstate() 完成之前。我的构建方法开始了。 为了证明这一点,我打印了两行 'print' 和 'print build',因为我认为我首先得到 'print build'。我在这里做错了什么。请帮忙。

从rest后端获取数据的方法

发生这种情况时,我首先检查了这个方法,但效果很好,return 得到了想要的结果。

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

它运行正常,initState 函数不是异步的,并且并行调用了方法 getBungalows()。 您应该在 getBungalows 中使用 setState,或添加侦听器,或使用 then 关键字,或使用 StreamBuilder。

检查这个: