【问题标题】:How to dynamically generate a grid view in flutter?如何在flutter中动态生成网格视图?
【发布时间】:2021-08-24 10:44:17
【问题描述】:

我想使用 api 检索到的列表中的信息生成网格视图

如何做到这一点?

似乎GridView.builder 方法是为了允许这样做,但该方法似乎没有任何解释

【问题讨论】:

    标签: flutter gridview dynamic flutter-layout


    【解决方案1】:

    例子:

    List<Widget> cardsList = [];
    
    @override
    void initState() {
    super.initState();
    }
    
    @override
    Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text('Team Kitty'),
      ),
      body: GridView.builder(
          itemCount: cardsList.length,
          gridDelegate:
              SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
          //crossAxisCount: (orientation == Orientation.portrait) ? 2 : 3),
          itemBuilder: (BuildContext context, int index) {
            return Container(child: cardsList[index]);
          }),
      floatingActionButton: new FloatingActionButton(
        onPressed: addCard(),
        tooltip: 'Add Card',
        child: new Icon(Icons.add),
      ),
    );
     }
    }
    

    希望有所帮助!

    【讨论】:

      【解决方案2】:

      GridView.count() 示例

      FutureBuilder<List<dynamic>>(
          future: callApi(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if (snapshot.hasData) {
              return
                (snapshot.data.length == 0) ? Container(
                  alignment: Alignment.center,
                  child: Text('No data'),
                ) :
                GridView.count(
                  controller: _scrollController,
                  crossAxisCount: 2,
                  padding: EdgeInsets.all(20.0),
                  crossAxisSpacing: 30.0,
                  mainAxisSpacing: 23.0,
                  childAspectRatio: 8.0 / 9.0,
                  children: itemsList
                      .map(
                        (Item) =>
                        cardView(Item),
                  ).toList(),
                );
            } else if (snapshot.hasError) {
              print("Error : " + snapshot.error.toString());
              return Container(
              alignment: Alignment.center,
              child: Text('No data'),
            );
            } else {
              print('no data');
            }
            // While the data is being loaded, show a spinner
            return
              Container(
                child: SpinKitChasingDots(
                  color: primaryRed,
                ),
              );
          },
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多