Должен ли виджет ListView.Builder размещаться на отдельной странице или нет

У меня возникли проблемы с отображением результатов с помощью виджета ListView.Builder. Когда я разместил его на странице main.dart, что бы я ни делал, страница постоянно выдавала ошибки рендеринга. Сразу же вынес на отдельную страницу, отображалось корректно без ошибок. Страница (main.dart) отображается без каких-либо ошибок без listView.builder. Мой вопрос: возможно ли или иначе отображать ListView.Builder вместе с другими виджетами на одной странице или он должен отображаться на отдельной странице? Любая помощь будет оценена.

body: TabBarView(
            children: <Widget>[
              SingleChildScrollView(
                child: Column(
                  children: <Widget>[
                    Container(
                      // child: SingleChildScrollView(
                      // scrollDirection: Axis.vertical,
                      child:Container(
                        child: Column(
                          //crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                            Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                Container(

                                  child:Expanded(
                                    child: Image.asset("assets/images/1frenchToast.webp"),
                                  ),
                                ),
                              ],
                            ),

                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: <Widget>[
                                Text("Select Cuisine",style: TextStyle(color: Colors.black),),
                                GestureDetector(
                                  child: DropdownButton(
                                    //isDense: true,
                                    style: TextStyle(fontSize: 14,color: Colors.black,),
                                    value: dropDownSelectedItemState,
                                    items: items,
                                    onChanged: (String selectValue){
                                      ClassHub().mySharedPreference("cuisineChoice", "set", selectValue);

                                      ClassHub().getFoodCategory(selectValue).then((onValue){
                                        if (onValue !=null){
                                          setState(() {
                                            foodCategory = onValue;
                                          });
                                        }
                                      });
                                      setState(() {
                                        dropDownSelectedItemState = selectValue;
                                      });
                                    },
                                  ),
                                  onLongPress: (){

                                  },
                                ),
                              ],
                            ),

 // This is the portion causing issues
                            Column(
                              //mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: <Widget>[

                                //myListView(),

                               Container(
                                 child: ListView.builder(scrollDirection: Axis.vertical,
                                  itemCount: foodCategory.length
                                  itemBuilder: (context,index){
                                    return ListTile(
                                      title: Text(foodCategory[index].foodType),
                                    );
                                  },
                                ),
                            ),

                              ]
                            ),
                            Container(
                              //height: 20,
                            ),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: <Widget>[
                                Container(
                                  margin: EdgeInsets.only(top: 20,),
                                  height: 60,
                                  width: MediaQuery.of(context).size.width-20,
                                  child: ListTile(
                                    leading: CircleAvatar(
                                      minRadius: 10,
                                      maxRadius: 30,
                                          //child:Image.asset("assets/images/Capture.JPG",height: 60,width: 60,),
                                      //borderRadius: BorderRadius.circular(30),
                                      backgroundImage: ExactAssetImage('assets/images/Capture.JPG'),
                                    ),
                                    title: Text("Western Food Recipes"),
                                  ),
                                ),
                              ],
                            ),
                            Container(
                              height: 10,
                            ),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: <Widget>[
                                Container(
                                  height: 60,
                                  width: MediaQuery.of(context).size.width-20,
                                  child:ListTile(
                                    leading: Image.asset("assets/images/Capture.JPG"),
                                     // borderRadius: BorderRadius.circular(30),
                                   // ),
                                    title: Text("African Food Recipes"),
                                  ),
                                ),

                              ],
                            ),
                            Container(
                              height: 10,
                            ),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: <Widget>[
                                Container(
                                  height: 60,
                                  width: MediaQuery.of(context).size.width-20,
                                  child:ListTile(
                                    leading: Image.asset("assets/images/Capture.JPG"),
                                    // borderRadius: BorderRadius.circular(30),
                                    // ),
                                    title: Text("African Food Recipes"),
                                  ),
                                ),

                              ],
                            ),
                          ],
                        ),
                      ),

                      // ),
                    ),
                  ],
                ),
              ),

Я хочу иметь возможность отображать виджет ListView.Builder на одной странице с другими виджетами без каких-либо ошибок рендеринга. Это возможно или нет?

это виджет, его не нужно перемещать на другую страницу.

Pushan Gupta 20.07.2019 20:52
0
1
662
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что вам нужно, так это shrinkWrap = true внутри ListView.builder.

В противном случае дети не будут знать, сколько места занимает прокручиваемый виджет.

BouncingScrollPhysics() не работает с shrinkWrap = true. Любой обходной путь для этого?

Xihuny 20.07.2019 22:45

@ Видор Вистром, спасибо за полезный ответ. shrinkwrap: верно, ListView.builder отображается корректно, но, пожалуйста, еще кое-что. Содержимое списка не прокручивается, а прокручивается вся страница. Существует SingleChildScrollView для страницы и еще один для ListView.builder. Как я могу сделать так, чтобы содержимое Listview.builder также прокручивалось. И можно ли разместить на странице несколько одиночных прокруток. Еще раз спасибо.

defemz 21.07.2019 07:19

@defemz попробуйте добавить физику в список как AlwaysScrollablePhysics()

Pushan Gupta 22.07.2019 11:07

@VidorVistrom еще раз спасибо. добавление физики в ListView как AlwaysScrollablePhysics() не имеет никакого эффекта.

defemz 22.07.2019 18:04

@defemz Понятно .. это потому, что все ваши элементы надуты в пространстве и принимают соответствующую высоту. Нет смысла прокручивать их отдельно тогда. Что вы можете сделать, так это обернуть список в контейнер и присвоить этому контейнеру фиксированную высоту. И отдых такой же. У вас будет список, превышающий высоту контейнера, поэтому будет задействована прокрутка.

Pushan Gupta 22.07.2019 19:04

@VidorVistrom Вау, спасибо, приятель, твой последний ответ полностью решил мои проблемы.

defemz 23.07.2019 06:27

вы должны пройти builder_context и использовать эту функцию ListView.Builder, это может вам помочь

Другие вопросы по теме