Как я могу сделать так, чтобы нижняя строка перекрывалась с верхней строкой, как показано на рисунке?

#flutter #flutter-layout

Вопрос:

Текущий макет Желаемый макет Я пытался поиграть со строками и столбцами, но это не дает мне желаемого макета. Я озадачен тем, как сделать так, чтобы нижний ряд перекрывался с верхним. Я использую ListView.builder для динамического создания этих контейнеров. Это мой код для ListView.builder:

 ListView.builder(
                      scrollDirection: Axis.horizontal,
                      itemCount: moduleCount,
                      itemBuilder: (BuildContext context, int index) {
                        /*
                        Makes graphicModule decrease in size as more
                        modules are being displayed
                         */
                        if (moduleCount > 6) {
                          containerWidth = 112.5;
                        } else {
                          containerWidth = 150;
                        }

                        if (index.isEven) {
                          return Column(
                            children: <Widget>[
                              makeGraphicModule(
                                  index   1, containerWidth, moduleCount),
                              SizedBox(
                                height: 50,
                              ),
                            ],
                          );
                        } else {
                          return Column(
                            children: <Widget>[
                              SizedBox(
                                height: 50,
                              ),
                              makeGraphicModule(
                                  index   1, containerWidth, moduleCount),
                            ],
                          );
                        }
                      },
                    ),
 

Ответ №1:

Используйте верхнюю часть поля для нечетных контейнеров

 ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: moduleCount,
          itemBuilder: (BuildContext context, int index) {
            if (moduleCount > 6) {containerWidth = 112.5;} 
            else {containerWidth = 150;}
          return Container(
              margin: EdgeInsets.only(top: index.isEven ? 0 : 50),
              child: makeGraphicModule(
                    index   1, containerWidth, moduleCount),
                    );,
          }
      ),