Как я могу исправить ошибку, сгенерированную ListView? - PullRequest
0 голосов
/ 03 апреля 2020

Ребята, у меня к вам вопрос: я создал PageView. В этом PageView является ListView и в этом ListView является список виджетов. Но, к сожалению, мой код по какой-то причине не работает ... И я понятия не имею, почему. Я все еще очень плохо знаком с Флаттером. Буду очень признателен за вашу помощь. Код, который генерирует ошибку, следующий:

Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: ListView(
        children: createHomePage(
            controller: _controller,
            content: widget.content,
            title: widget.title,
            menuButtonAction: widget.menuButton,
            showShadow: widget.showShadow,
            context: context),
      ),
    );
  }
}

Я был бы очень признателен, если бы вы могли мне помочь. Код работает нормально, когда я заменяю ListView на Colum, но, к сожалению, я не могу прокрутить ... Но его нужно прокручивать! Я получаю следующую ошибку:

I/flutter ( 4539): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════

I/flutter ( 4539): The following assertion was thrown building NotificationListener<KeepAliveNotification>:

I/flutter ( 4539): Incorrect use of ParentDataWidget.

I/flutter ( 4539): Expanded widgets must be placed inside Flex widgets.

I/flutter ( 4539): Expanded(no depth, flex: 1, dirty) has no Flex ancestor at all.

I/flutter ( 4539): The ownership chain for the parent of the offending Expanded was:

I/flutter ( 4539):   RepaintBoundary ← IndexedSemantics ← 
NotificationListener<KeepAliveNotification> ← KeepAlive ←

I/flutter ( 4539): AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport

I/flutter ( 4539): ← ⋯

I/flutter ( 4539): 

I/flutter ( 4539): The relevant error-causing widget was:

I/flutter ( 4539):   ListView

Как я могу решить эту проблему? Я много пробовал. Например, я поместил список виджетов в столбец и изменил ListView на SingleChildListView, но это тоже не помогло. Тем не менее, я получил еще одно сообщение об ошибке. Это было:

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════

I/flutter ( 4539): The following assertion was thrown during performLayout():

I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.

I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is

I/flutter ( 4539): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a

I/flutter ( 4539): flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining

I/flutter ( 4539): space in the vertical direction.

I/flutter ( 4539): These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child

I/flutter ( 4539): cannot simultaneously expand to fit its parent.
I/flutter ( 4539): Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible

I/flutter ( 4539): children (using Flexible rather than Expanded). This will allow the flexible children to size

I/flutter ( 4539): themselves to less than the infinite remaining space they would otherwise be forced to take, and

I/flutter ( 4539): then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum

I/flutter ( 4539): constraints provided by the parent.

I/flutter ( 4539): If this message did not help you determine the problem, consider using debugDumpRenderTree():

I/flutter ( 4539):   https://flutter.dev/debugging/#rendering-layer

I/flutter ( 4539):   http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html

I/flutter ( 4539): The affected RenderFlex is:

I/flutter ( 4539):   RenderFlex#bfee3 relayoutBoundary=up15 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯, parentData: <none> (can use size), constraints: BoxConstraints(w=411.4, 0.0<=h<=Infinity), size: MISSING, direction: vertical, mainAxisAlignment: start, mainAxisSize: max, crossAxisAlignment: center, verticalDirection: down)

I/flutter ( 4539): The creator information is set to:

I/flutter ( 4539):   Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ←

I/flutter ( 4539):   KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ←

I/flutter ( 4539):   ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯

I/flutter ( 4539): See also: https://flutter.dev/layout/

I/flutter ( 4539): If none of the above helps enough to fix this problem, please don't hesitate to file a bug:

I/flutter ( 4539):   https://github.com/flutter/flutter/issues/new?template=BUG.md

I/flutter ( 4539): 

I/flutter ( 4539): The relevant error-causing widget was:

I/flutter ( 4539):   Column

Во втором примере экран становится белым, но ничего не происходит и ничего не работает. При первой ошибке экран становится красным, и я получаю ошибку, которую вы видите на картинке!

Красный Ошибка на экране

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

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

0 голосов
/ 03 апреля 2020
I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.

I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is

Пока я не вижу полного кода, но для вас это означает, что для просмотра списка нужна некая высота, которая задается, например, если вы оберните его внутри контейнера.

Второе, что вы можете сделать, это поместить shrinkwrap: true в просмотр списка

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Container(
            margin: EdgeInsets.all(32),
            decoration: BoxDecoration(border: Border.all(color: Colors.red)),
            child: ListView(
              shrinkWrap: true,
              children: <Widget>[
                ListTile(title: Text('Item 1')),
                ListTile(title: Text('Item 2')),
                ListTile(title: Text('Item 3')),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

ваш просмотр списка, тогда он принимает только высоту всех ваших виджетов или элементов внутри самого списка.

Надеюсь, это поможет.

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