проблема возникает, когда я использую ListView внутри стека (заданный)

#flutter #dart

#флаттер #dart

Вопрос:

Я хочу отобразить на экране три вещи: расписание с указанием даты, ListView содержащий несколько Container и панель навигации в нижней части экрана.Причина, по которой я помещаю их в Stack это ListView больше, чем размер экрана, и я не хочу, чтобы он блокировал панель навигации. Мой вопрос о содержимом ListView вообще не отображается, так как нижняя панель навигации просто пуста. Я попытался заменить ListView на Column , это работает, но это не то, что я хочу. И ошибка =

Окно визуализации не было развернуто: RenderRepaintBoundary#40da3 relayoutBoundary=up2 NEEDS-PAINT ‘пакет: flutter / src / rendering /box.dart’: Ошибка утверждения: строка 1694 поз 12: ‘Размер’

 body: Stack(
          children: <Widget>[
            Positioned(
              top: 0,
              child: timeTable(),
            ),
            Positioned(
              top: 114.0,
              height: 200,
              child: ListView(
                children: <Widget>[
                  Container(height: 100,),
                  Container(height: 100,),
                ],
              )
            ),
            Positioned(
              bottom: 0,
              child: NavigationBar(),
            ),
          ],
        ),
  

ниже о классе Schedule()

     Widget timeTable() {
  return Container(
    height: 98.0,
    width: 540.0,
    margin: EdgeInsets.only(left: 114.0, right: 114.0),
    child: Column(
      children: <Widget>[
        SizedBox(height: 24.0,),
        Container(
          height: 24.0,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Container(
                child: Text('日付', style: StatisticTextStyle.date, ),
              ),
              stuckButtons(),
            ],
          ),
        ),
        Container(
          padding: EdgeInsets.only(bottom: 0),
          height: 44,
          child: Container(
            alignment: Alignment.bottomRight,
            padding: EdgeInsets.only(top: 0),
            child: RichText(
              text: TextSpan(
                children: [
                  TextSpan(
                    text: "2020年10月15日 ",
                    style: StatisticTextStyle.mainText,
                  ),
                  WidgetSpan(
                    // make the icon higher so that alignment with the text.
                    child: Container(
                      padding: EdgeInsets.only(bottom: 2),
                      child: MyIcon.calendarIcon,
                    )
                  ),
                ],
              ),
            ),
          ),
        ),
      ],
    ),
  );
}
  

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

1. трудно понять, чего вы пытаетесь достичь здесь. Может быть, поделитесь с нами каким-нибудь скриншотом?

2. Вы пытались обернуть свой listview с expanded виджетом

3. опубликуйте весь код, чтобы легко скопировать вставить и воспроизвести ошибку на dartpad

4. @JohnJoe извините, я новичок в stackoverflow, я повторно отредактировал свой вопрос. Пожалуйста, проверьте это еще раз. Спасибо, что напомнили.

5. @AR Я только что попробовал ваше решение, кажется, оно немного работает, содержимое ListView и нижняя панель навигации удалены, но timeTable исчезли.

Ответ №1:

Я решил проблему. Причина, по которой я выбираю Stack , касается настраиваемой нижней панели навигации, поскольку виджет принадлежит телу. На самом деле, мы можем использовать bottomNavigationBar в Scaffold. Итак, остается проблема в том, как поддерживать виджет и ListView в Column для отображения на экране. новая информация об ошибке =

Во время выполнения функции performResize() было выдано следующее утверждение: вертикальному экрану просмотра была присвоена неограниченная высота. нетрудно найти, что мы должны указать ListView высоту. Поместите ListView в container и установите высоту container , тогда все будет в порядке.