Первый пункт сломан, когда я прокручиваю назад - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь сделать хакерскую программу чтения новостей. Я получаю ошибку, но я не совсем уверен, что происходит. Когда я пытаюсь выполнить следующий шаг, первый элемент исчезает, и появляется журнал ошибок, в котором сообщается, что '_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout ()': не соответствует действительности.

  1. Прокрутите список вверх.

  2. Прокрутите список вверх.

Это выглядит так

It looks like this

И я также загружаю демо, если это полезно. https://github.com/keeweeChang/flutter_news/tree/list_error

А вот мерзавец, чтобы показать ситуацию с ошибкой. https://media.giphy.com/media/XKGJrdAvgLcy9zyJwM/giphy.gif

Журнал ошибок: I / трепетание (30902): ══╡ ИСКЛЮЧЕНИЕ ЗАПИСАНО БИБЛИОТЕКОЙ ВИДЖЕТОВ ═══════════════════════════════

I / Флаттер (30902): следующее утверждение было брошено здание FutureBuilder (состояние:

I / флаттер (30902): _FutureBuilderState # fd3d0):

I / flutter (30902): 'package: flutter / src / render / object.dart': ошибка утверждение: строка 1409 поз 14:

I / флаттер (30902): '_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout ()': неверно.

I / флаттер (30902):

I / zygote (30902): сбор частичного кэша кода, код = 59 КБ, Данные = 43KB

I / флаттер (30902): либо утверждение указывает на ошибку в сама структура, или мы должны предоставить существенно

I / flutter (30902): дополнительная информация в этом сообщении об ошибке поможет вам определить и устранить причину.

I / флаттер (30902): в любом случае, пожалуйста, сообщите об этом утверждении регистрация ошибки на GitHub:

I / флаттер (30902): https://github.com/flutter/flutter/issues/new?template=BUG.md

I / флаттер (30902):

I / flutter (30902): Когда генерировалось исключение, это был стек:

I / flutter (30902): # 2 RenderObject.markNeedsLayout (Упаковка: трепетание / SRC / рендеринг / object.dart: 1409: 14)

I / flutter (30902): # 3 RenderBox.markNeedsLayout (Упаковка: трепетание / SRC / рендеринг / box.dart: 1842: 11)

I / flutter (30902): # 4 RenderObject.dropChild (Упаковка: трепетание / SRC / рендеринг / object.dart: 1158: 5)

I / флаттер (30902): # 5 _RenderProxyBox & RenderBox & RenderObjectWithChildMixin.child = (пакет: флаттер / src / render / object.dart: 2744: 7)

I / флаттер (30902): # 6 SingleChildRenderObjectElement.removeChildRenderObject (Упаковка: трепетание / SRC / виджеты / framework.dart: 4909: 18)

I / flutter (30902): # 7 RenderObjectElement.detachRenderObject (Упаковка: трепетание / SRC / виджеты / framework.dart: 4749: 36)

I / flutter (30902): # 8 Element.detachRenderObject. (Упаковка: трепетание / SRC / виджеты / framework.dart: 2866: 13)

I / flutter (30902): # 9 ComponentElement.visitChildren (Упаковка: трепетание / SRC / виджеты / framework.dart: 3775: 14)

I / flutter (30902): # 10 Element.detachRenderObject (Упаковка: трепетание / SRC / виджеты / framework.dart: 2865: 5)

I / флаттер (30902): # 11 Element.deactivateChild (Упаковка: трепетание / SRC / виджеты / framework.dart: 2995: 11)

I / флаттер (30902): # 12 Element.updateChild (Упаковка: трепетание / SRC / виджеты / framework.dart: 2760: 7)

I / flutter (30902): # 13 ComponentElement.performRebuild (Упаковка: трепетание / SRC / виджеты / framework.dart: 3752: 16)

I / флаттер (30902): # 14 Element.rebuild (Упаковка: трепетание / SRC / виджеты / framework.dart: 3564: 5)

I / flutter (30902): # 15 BuildOwner.buildScope (Пакет: флаттер / SRC / виджеты / framework.dart: 2277: 33)

I / zygote (30902): после сбора кэша кода код = 59 КБ, данные = 43 КБ

I / zygote (30902): увеличение емкости кэша кода до 256 КБ

I / флаттер (30902): # 16 _WidgetsFlutterBinding & BindingBase & GestureBinding & ServicesBinding & SchedulerBinding & PaintingBinding & SemanticsBinding & RendererBinding & WidgetsBinding.: 275: 5)

I / flutter (30902): # 18 _WidgetsFlutterBinding & BindingBase & GestureBinding & ServicesBinding & SchedulerBinding._invokeFrameCallback (пакет: flutter / src / scheduler / binding.dart: 990/10 * * 10: 1090)30902): # 19 _WidgetsFlutterBinding & BindingBase & GestureBinding & ServicesBinding & SchedulerBinding.handleDrawFrame (пакет: flutter / src / scheduler / binding.dart: 930: 9)

I / flutter (30902 / Bringing Блиффинг (Bringing))scheduler / binding.dart: 842: 5)

I / флаттер (30902): # 24 _invoke (дарт: ui / hooks.dart: 209: 10)

I / флаттер (30902): # 25_drawFrame (dart: ui / hooks.dart: 168: 3)

I / flutter (30902): (пропущено 5 кадров из класса _AssertionError и пакета dart: async)

I / flutter (30902): ═══════════════════════════════════

I / флаттер (30902): Вышло еще одно исключение: 'package: flutter / src / render / object.dart': Неудачное утверждение: строка 1153, позиция 12: 'child.parentData! = Null': не соответствует действительности.

I / flutter(30902): было сгенерировано другое исключение: NoSuchMethodError: Получатель 'debugDoingLayout' был вызван нулем.

I / flutter (30902): было сгенерировано другое исключение: RenderBox не был размечен: _RenderListTile # 46ebb relayoutBoundary =up5 НЕОБХОДИМО, ЧТОБЫ ПОКРАСИТЬ КРАСКА

I / флаттер (30902): было сгенерировано другое исключение: RenderBox не выложен: RenderPadding # 0a187 relayoutBoundary = up4 НЕОБХОДИМОЕ ПОКРАШИТЬ КРАСКА

I / флаттер (30902)): Было сгенерировано другое исключение: RenderBox не был выложен: RenderSemanticsAnnotations # d9f7e relayoutBoundary = up3 НЕОБХОДИМО НАПИСАТЬ КРАСКУ

I / flutter (30902): было сгенерировано другое исключение: RenderBointerLose не выложен: RenderPointerListener # e0701 relayoutBoundary = up2 NEEDS-PAINT DETACHED

*I / flutter (30902): было сгенерировано другое исключение: RenderBox не выложен: RenderSemanticsGestureHandler # 57551 relayoutBoundary = up1 NEEDS-PAINT DETACHED

I / flutter (30902): было сгенерировано другое исключение: RenderBox не был заложенout: RenderFlex # 915e5 НЕОБХОДИМО ИЗОБРАЖИТЬ КРАСКУ

I / flutter (30902): было сгенерировано еще одно исключение: NoSuchMethodError: Метод '<=' был вызван для нуля. </p>

Врач на флаттер • Флаттерверсия 1.3.8 в / Users / Луи / флаттер / flutterSDK

• Редакция платформы e5b1ed7a7f (13 дней назад), 2019-03-06 14:23:37 -0800

• Редакция двигателяf4951df193

• Версия Dart 2.2.1 (сборка 2.2.1-dev.0.0 571ea80e11)

Обновление

Согласно моему тестуошибка решенаd когда я использую Контейнер фиксированной высоты, чтобы обернуть Предмет.Но я хочу спросить, элемент ListView не поддерживает виджет динамической высоты или какие-либо параметры, которые я должен быть установлен.Или это проблема в режиме отладки?Вот проблема решена структура виджета: Структура виджета

Проблема может быть решена следующим образом:

  @override
  Widget build(BuildContext context) {
    final bloc = StoriesProvider.of(context);
    return StreamBuilder(
      stream: bloc.items,
      builder: (context, AsyncSnapshot<Map<int, Future<ItemModel>>> snapshot) {
        return Container(
          height: 80,
          child: buildItem(snapshot),
        );
      },
    );
  }

  Widget buildItem(AsyncSnapshot<Map<int, Future<ItemModel>>> snapshot) {
    if (!snapshot.hasData) {
     ...(Create loading widget)
    }
    else {
     ...(Create ListTile widget by FutureBuilder)
    }
  }
...