Контрольно-пропускной пункт - PullRequest
0 голосов
/ 04 декабря 2018

Я относительно новичок во Flutter - работаю над своим приложением уже пару месяцев и добился значительных успехов в некоторых областях, но не в других.У меня возникают проблемы с поиском «правильного способа» для создания ряда моих экранов, которые в некоторой степени похожи.

Короче говоря, кроме панели приложения, на эшафот будет помещаться контейнер, в котором у меня есть сегментный контроль Купертино.Сегментированный элемент управления используется для переключения между элементом управления IndexedStack, который находится «под ним».

Каждый дочерний элемент стека может иметь различное содержимое - иногда представление списка, иногда форму с множеством текстовых вводов, переключателей и т. Д. Поэтому структура может логически выглядеть следующим образом:

Body
  SegmentedControl
  IndexStack
    Child 1
    Child N

Моя проблема в том, что я хочу / хочу, чтобы все дочерние элементы стека «заполнили оставшуюся область» тела.Итак, если я могу просто привести здесь некоторые числа, например: устройство имеет высоту 600 пикселей, панель приложений занимает 40, сегментированное управление занимает 60, оставляя 500 пикселей для каждого дочернего стека.Однако на практике я не могу вывести «оставшуюся высоту содержания» моего тела.Я надеюсь (и думаю), что есть какой-то виджет макета или контейнерный виджет, который «автоматически масштабирует все оставшееся пространство», но еще не нашел его.Я перепробовал множество комбинаций разных виджетов, но ни один из них не помог.Вот сжатый блок кода моего макета:

body: Container(
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.center,
    children: <Widget>[
      Padding(
        padding: const EdgeInsets.only(top: 16.0, bottom: 16.0),
        child: CupertinoSegmentedControl(
          children: tabOptions,
          onValueChanged: tabChanged,
          groupValue: curTabIndex,
        ),
      ),
      Container(
        height: 400.0, //needs to be 'all the rest' instead of a constant
        width: double.infinity,
        child: ListView(
          children: <Widget>[
            Text(“Example Text - would really be list tiles"),
            Text(“displaying results of database query"),
          ],
        ),
      ),
     ],            
   ), 
 ),

Я показал только один дочерний элемент индексированного стека.На практике я мог бы иметь несколько.Если я не даю Контейнеру, удерживающему ListView, конечную высоту (и некоторую ширину), RenderBox не может рисовать, то есть я получаю ошибки.Задача состоит в том, чтобы дочерние элементы стека занимали столько места по горизонтали и вертикали, сколько доступно, и чтобы их содержимое можно было «прокручивать» в тех случаях, когда это содержимое превышает заданную высоту.Я попробую все, что кто-нибудь предложит ... Я уверен, что есть способ сделать это.

Спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Опция 1:

Замените виджет «Контейнер» расширенным, который расширит доступное пространство, как показано ниже

   Expanded(
   //Container(
    //height: 400.0, //needs to be 'all the rest' instead of a constant
   // width: double.infinity,
    child: ListView(

Расширенные документы: https://docs.flutter.io/flutter/widgets/Expanded-class.html

Опция2:

Используйте MediaQuery.of (context) .size.height для вычисления желаемой высоты.Не уверен, сработает ли это, или даже если это хорошая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...