показывать элемент сетки как седьмую сетку с полной шириной после каждого показанного шести элементов сетки - PullRequest
0 голосов
/ 03 апреля 2020

Я получаю данные из API. Я перечисляю эти данные в сетке. После каждого (index % 6 == 0) я хочу показать sevenh_item с crossAxisCount: 1 в виде сетки. Если (index % 6 == 0) не верно , я хочу показать any_item с crossAxisCount: 2 в виде сетки.

sevenh_item = элемент сетки adbanner;

, а __

any_item = любой элемент сетки с данными из базы данных.

 Expanded(
          child: FutureBuilder<List<Item>>(
            future: xtraDataAvailable == false
                ? fetchItems(0, 10)
                : fetchItems(skip, limit),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.data != null) {
                return NotificationListener(
                  child: GridView.builder(
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 2,
                    ),
                    itemCount:
                        _search.isEmpty ? itemsgrid.length : _search.length,
                    itemBuilder: (context, index) {
                      if (index != 0 && index % 6 == 0) {
                        return Container(
                          margin: EdgeInsets.only(bottom: 20.0),
                          // sevent_item, the banner has crossAxisCount: 1
                          child: Text('seventh_item'),
                          ),
                        );
                      } else {
                         // any_item, any item from db and has crossAxisCount: 2
                         return Container(child: Text('any_item')),
                    }
                  )
                )

Примечание Существует более удобный способ обновления crossAxisCount в виде сетки. Я пробовал это с сеттером, но он не работает, как ожидалось. Просто хочу сделать эту работу. Спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать StaggeredGridView для достижения этого из https://pub.dev/packages/flutter_staggered_grid_view# -readme-tab-

Пример

class Staggered extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: StaggeredGridView.count(
          crossAxisCount: 2,
          mainAxisSpacing: 5,
          crossAxisSpacing: 5,
          children: List.generate(14, (index){
            return Container(
              child: Center(
                child: Text("${index+1}"),
              ),
              color: Colors.blue,
            );
          }),
          staggeredTiles: buildTiles(),
        ),
      ),
    );
  }

  List<StaggeredTile> buildTiles(){
    return List.generate(14, (index){
      if((index+1)%7 == 0){
        return StaggeredTile.count(2, 1);
      }else{
        return StaggeredTile.count(1, 1);
      }
    });
  }
}

Выходные данные:

enter image description here

...