簡體   English   中英

如何等待數據可用 - flutter

[英]How can I wait for data before it is available - flutter

@override
  void didChangeDependencies() async {
    if (_isInit) {
      print('First stat');
      final restaurant = await Provider.of<Restaurants>(context, listen: false)
          .fetchAndSetRestaurants();
      print('test');
    }
    _isInit = false;

    super.didChangeDependencies();
  }

  bool showFavourites = false;

  @override
  Widget build(BuildContext context) {
   
    return Scaffold(
        //bottomNavigationBar: BottomNavBar(),
        appBar: homeAppBar(context),
        body: SingleChildScrollView(
          child: showFavourites
              ? Padding(
                  padding: const EdgeInsets.only(top: 20),
                  child:
                      RestaurantList(), //RestaurantList(restaurants: restaurants)
                )
              : Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                      SearchBox(
                        onChanged: (value) {},
                      ),
                      CategoryList(),
                      RestaurantList(), //RestaurantList(restaurants: restaurants)
                    ]),
        ));
  }
}

class RestaurantList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final List<Restaurant> restaurants1 =
        Provider.of<Restaurants>(context).getRestaurants1;
    print('List: ${restaurants1[0].name}');
    
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemBuilder: (ctx, i) =>
          restaurants1[i].isAvailable || restaurants1[i].totalQuantity != 0
              ? Column(
                  children: [
                    ChangeNotifierProvider.value(
                        value: restaurants1[i], child: RestaurantCard()),
                    Divider(),
                  ],
                )
              : Container(),
      itemCount: restaurants1.length,
    );
  }

RestaurantList ”小部件內的數據 ( restaurants1 ) 在可用之前被訪問。 即使在didChangeDependencies中獲取它時放置 ' await ' 似乎也不起作用。

這是我得到的 output:

flutter:第一個統計

flutter: null

flutter:成功:肯德基

flutter:測試

[VERBOSE-2:profiler_metrics_ios.mm(184)] 檢索線程信息時出錯:(ipc/send) 目標端口無效

null被 getter 'getRestaurants1' 調用

您可以使用FutureBuilder小部件並在其future參數中檢索數據。 官方 Flutter 文檔有簡單的示例,描述了如何聲明和使用FutureBuilder

在你的情況下,嘗試這樣的事情:

FutureBuilder<List<Restaurant>>(
  future: Provider.of<Restaurants>(context, listen: false).fetchAndSetRestaurants(),
  builder: (context, snapshot) {
    // Items are not available and you need to handle this situation, simple solution is to show a progress indicator
    if (!snapshot.hasData) {
      return CircularProgressIndicator();
    }
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemBuilder: (ctx, i) =>
          restaurants1[i].isAvailable || restaurants1[i].totalQuantity != 0
              ? Column(
                  children: [
                    ChangeNotifierProvider.value(
                        value: restaurants1[i], child: RestaurantCard()),
                    Divider(),
                  ],
                )
              : Container(),
      itemCount: restaurants1.length,
    );
  },
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM