Трепетание — помещаем TabBarView в прокрутку

#flutter #dart #flutter-layout

#порхание #дротик #порхание-макет

Вопрос:

В настоящее время мой код выглядит следующим образом.

    return SingleChildScrollView(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          if (_isLandscape)
            Row(
              children: [
                imageFrame,
                Column(
                  children: [
                    myBuyFunctionality,
                    myTabBarView,
                  ],
                ),
              ],
            )
          else
            Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                imageFrame,
                SizedBox(
                  height: 20,
                ),
                myBuyFunctionality,
                myTabBarView,
              ],
            ),
          Align(
            alignment: Alignment.bottomCenter,
            child: _isBuyNow ? buyNowButton : placeBidButton,
          ),
        ],
      ),
    ),
  

Мой код работает абсолютно нормально, пока я не поместил myTabBarView в дерево. Он состоит из 2 дочерних виджетов, подобных этому.

 var myTabBarView = TabBarView(
  controller: _tabController,
  children: [
    placeBidBody(),
    placeBidBody(),
  ],
);
  

В placeBidBody у меня есть только текстовое поле, немного текста и интервал, просто обычный материал, заключенный в столбец.

Всякий раз, когда я помещаю myTabBarView в свой SingleChildScrollView, он выдает ошибку:

 Horizontal viewport was given unbounded height.
  

Не могли бы вы, пожалуйста, сообщить мне, что я делаю неправильно, или если есть лучший способ структурировать все это.

Я все еще относительно новичок в flutter, поэтому ваша помощь была бы очень признательна.

Ответ №1:

 Wrap the parent widget(Column) with a limited height widget like SizedBox or 
AspectRatio. Then use the Expanded widget like this:

child: SizedBox(
height: 300.0,
child: Column(
children: <Widget>[
   .
   .
   .
 Expanded(
 child: TabBarView(
 children: <Widget>[
]))]))
  

второе решение

  SizedBox.expand(
    child: TabBarView(),
  )
  

Комментарии:

1. Я попробовал этот ответ, но теперь из-за 1 решения ошибка такова: дочерние элементы RenderFlex имеют ненулевой изгиб, но входящие ограничения по высоте не ограничены. и во втором решении ошибка такова: BoxConstraints создает бесконечную высоту.

2. Я пробовал оба. Упоминал ошибки в первом комментарии.

3. ListView ( shrinkWrap: true, дочерние элементы:[] ) замените SingleChildScrollView на это и дайте мне знать.

4. Теперь возникает эта ошибка. Дочерние элементы RenderFlex имеют ненулевой изгиб, но входящие ограничения по высоте не ограничены.

5. эта ошибка из-за того, что родительский виджет и tabwidget не имеют высоты.