Пытаюсь сделать хакерскую читалку новостей. Я получаю сообщение об ошибке, но я не совсем уверен, что происходит. Когда я пытаюсь выполнить следующий шаг, первый элемент исчезает, и я получаю журнал ошибок, сообщающий мне, что '_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout()': не соответствует действительности.
Прокрутите список вверх.
Прокрутите список вниз до самого верха.
Это выглядит так
И я также загружаю демо, если это полезно. https://github.com/keeweeChang/flutter_news/tree/list_error
И вот git, чтобы показать ситуацию с ошибкой. https://media.giphy.com/media/XKGJrdAvgLcy9zyJwM/giphy.gif
Error log: I/flutter (30902): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (30902): The following assertion was thrown building FutureBuilder(state:
I/flutter (30902): _FutureBuilderState#fd3d0):
I/flutter (30902): 'package:flutter/src/rendering/object.dart': Failed assertion: line 1409 pos 14:
I/flutter (30902): '_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout()': is not true.
I/flutter (30902):
I/zygote (30902): Do partial code cache collection, code=59KB, data=43KB
I/flutter (30902): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (30902): more information in this error message to help you determine and fix the underlying cause.
I/flutter (30902): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (30902): https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter (30902):
I/flutter (30902): When the exception was thrown, this was the stack:
I/flutter (30902): #2 RenderObject.markNeedsLayout (package:flutter/src/rendering/object.dart:1409:14)
I/flutter (30902): #3 RenderBox.markNeedsLayout (package:flutter/src/rendering/box.dart:1842:11)
I/flutter (30902): #4 RenderObject.dropChild (package:flutter/src/rendering/object.dart:1158:5)
I/flutter (30902): #5 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.child= (package:flutter/src/rendering/object.dart:2744:7)
I/flutter (30902): #6 SingleChildRenderObjectElement.removeChildRenderObject (package:flutter/src/widgets/framework.dart:4909:18)
I/flutter (30902): #7 RenderObjectElement.detachRenderObject (package:flutter/src/widgets/framework.dart:4749:36)
I/flutter (30902): #8 Element.detachRenderObject. (package:flutter/src/widgets/framework.dart:2866:13)
I/flutter (30902): #9 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3775:14)
I/flutter (30902): #10 Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2865:5)
I/flutter (30902): #11 Element.deactivateChild (package:flutter/src/widgets/framework.dart:2995:11)
I/flutter (30902): #12 Element.updateChild (package:flutter/src/widgets/framework.dart:2760:7)
I/flutter (30902): #13 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3752:16)
I/flutter (30902): #14 Element.rebuild (package:flutter/src/widgets/framework.dart:3564:5)
I/flutter (30902): #15 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2277:33)
I/zygote (30902): After code cache collection, code=59KB, data=43KB
I/zygote (30902): Increasing code cache capacity to 256KB
I/flutter (30902): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
I/flutter (30902): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:275:5)
I/flutter (30902): #18 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (30902): #19 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (30902): #20 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter (30902): #24 _invoke (dart:ui/hooks.dart:209:10)
I/flutter (30902): #25 _drawFrame (dart:ui/hooks.dart:168:3)
I/flutter (30902): (elided 5 frames from class _AssertionError and package dart:async)
I/flutter (30902): ═══════════════════════════════════
I/flutter (30902): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1153 pos 12: 'child.parentData != null': is not true.
I/flutter (30902): Another exception was thrown: NoSuchMethodError: The getter 'debugDoingLayout' was called on null.
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: _RenderListTile#46ebb relayoutBoundary=up5 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: RenderPadding#0a187 relayoutBoundary=up4 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#d9f7e relayoutBoundary=up3 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: RenderPointerListener#e0701 relayoutBoundary=up2 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#57551 relayoutBoundary=up1 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: RenderBox was not laid out: RenderFlex#915e5 NEEDS-PAINT DETACHED
I/flutter (30902): Another exception was thrown: NoSuchMethodError: The method '<=' was called on null.
Flutter doctor • Flutter version 1.3.8 at /Users/louis/flutter/flutterSDK
• Framework revision e5b1ed7a7f (13 days ago), 2019-03-06 14:23:37 -0800
• Engine revision f4951df193
• Dart version 2.2.1 (build 2.2.1-dev.0.0 571ea80e11)
Обновлять
Согласно моему тесту, ошибка устраняется, когда я использую контейнер фиксированной высоты для упаковки элемента. Но я хочу спросить, элемент 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)
}
}
Да, это часто происходит, если я создаю отладочную версию. Я также делаю гифку, чтобы показать ошибку: media.giphy.com/media/XKGJrdAvgLcy9zyJwM/giphy.gif
Я не могу воссоздать это из кода, который у вас есть на GitHub. Это происходит каждый раз для вас?