Baseflow / Baseflow/flutter_cached_network_image

CachedNetworkImage without placeholder produces exceptions

Open
#807 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Dart
Stars
2.6k
Forks
731
Avg merge
3d 9h
Merged PRs (30d)
1

Description

## πŸ› Bug Report

When using `CachedNetworkImage` without a `placeholder` e.g.

```dart
class _BookListState extends State {
@override
Widget build(BuildContext context) => ListView.builder(
itemCount: widget.books.length,
itemBuilder: (context, index) => Card(
key: ValueKey(widget.books[index].title),
child: ListTile(
leading: CachedNetworkImage(
imageUrl: ""),
title: Text(widget.books[index].title),
subtitle: Text(widget.books[index].description),
),
),
);
}
```

The following output is displayed from Flutter:
```
══║ EXCEPTION CAUGHT BY RENDERING LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
The following assertion was thrown during performLayout():
Leading widget consumes entire tile width. Please use a sized widget, or consider replacing ListTile
with a custom widget (see
https://api.flutter.dev/flutter/material/ListTile-class.html#material.ListTile.4)
'package:flutter/src/material/list_tile.dart':
Failed assertion: line 1186 pos 7: 'tileWidth != leadingSize.width || tileWidth == 0.0'

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was:
ListTile ListTile:file:///Users/bquinlan/dart/http/pkgs/cronet_http/example/lib/main.dart:124:18

When the exception was thrown, this was the stack:
#2 _RenderListTile.performLayout (package:flutter/src/material/list_tile.dart:1186:7)
#3 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#4 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#5 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:240:12)
#6 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#7 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#8 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:240:12)
#9 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#10 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#11 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#12 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#13 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#14 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#15 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#16 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#17 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#18 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#19 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#20 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#21 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#22 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#23 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#24 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#25 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#26 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#27 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#28 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#29 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#30 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#31 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#33 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:552:11)
#34 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#35 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#36 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#37 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1466:11)
#38 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#39 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#40 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:240:12)
#41 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#42 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#43 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#44 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#45 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#46 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#47 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#48 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#50 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#51 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#52 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:213:28)
#53 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#54 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:149:12)
#55 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:386:11)
#56 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#57 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:550:13)
#58 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1634:12)
#59 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1541:20)
#60 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#61 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#62 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#63 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#64 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#65 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#66 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#67 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#68 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#69 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#70 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#71 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#72 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#73 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#74 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#75 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#76 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#77 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#78 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#79 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#80 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#81 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#82 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#83 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#84 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:552:11)
#85 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#86 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#87 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#88 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#89 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#90 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#91 RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:903:45)
#92 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:938:32)
#93 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#94 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#95 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:240:12)
#96 RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#97 RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#98 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#99 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1078:7)
#100 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#101 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:410:14)
#102 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2027:7)
#103 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1020:18)
#104 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:516:19)
#105 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:865:13)
#106 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#107 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#108 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9)
#109 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5)
#113 _invoke (dart:ui/hooks.dart:147:10)
#114 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#115 _drawFrame (dart:ui/hooks.dart:112:31)
(elided 5 frames from class _AssertionError and dart:async)

The following RenderObject was being processed when the exception was fired: _RenderListTile#cdb14 relayoutBoundary=up18 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE:
creator: _ListTile ← IconTheme ← Builder ← MediaQuery ← Padding ← SafeArea ← Builder ←
Padding-[GlobalKey#aa9d6] ← Ink ← Semantics ← Listener ← RawGestureDetector ← β‹―
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(w=332.7, 0.0<=h<=Infinity)
size: MISSING
This RenderObject had the following descendants (showing up to depth 5):
leading: RenderConstrainedBox#8c8e8 relayoutBoundary=up19 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
child: RenderLimitedBox#4e5eb relayoutBoundary=up20 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
child: RenderConstrainedBox#7997b relayoutBoundary=up21 NEEDS-PAINT
title: RenderParagraph#10272 NEEDS-LAYOUT NEEDS-PAINT
text: TextSpan
subtitle: RenderParagraph#aa3b7 NEEDS-LAYOUT NEEDS-PAINT
text: TextSpan
════════════════════════════════════════════════════════════════════════════════════════════════════

Another exception was thrown: RenderBox was not laid out: _RenderListTile#cdb14 relayoutBoundary=up18 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderPadding#f320f relayoutBoundary=up17 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderPadding#68847 relayoutBoundary=up16 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#9f29f relayoutBoundary=up15 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderPointerListener#60d76 relayoutBoundary=up14 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#7745b relayoutBoundary=up13 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#e8ced relayoutBoundary=up12 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#4169e relayoutBoundary=up11 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#8244d relayoutBoundary=up10 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: _RenderInkFeatures#ca711 relayoutBoundary=up9 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#0c335 relayoutBoundary=up8 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderPhysicalShape#a573e relayoutBoundary=up7 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderPadding#66917 relayoutBoundary=up6 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#c1f05 relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#1492c relayoutBoundary=up4 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 550 pos 12: 'child.hasSize': is not true.

Another exception was thrown: Null check operator used on a null value
```

### Configuration

```
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel master, 3.7.0-9.0.pre.4, on macOS 13.0.1 22A400 darwin-arm64, locale en)
! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/2.18.4/libexec/bin/dart, which is not inside your current Flutter SDK checkout at
/Users/bquinlan/flutter. Consider adding /Users/bquinlan/flutter/bin to the front of your path.
[!] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
βœ— cmdline-tools component is missing
Run `path/to/sdkmanager --install "cmdline-tools;latest"`
See https://developer.android.com/studio/command-line for more details.
βœ— Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[βœ“] Xcode - develop for iOS and macOS (Xcode 14.1)
[βœ“] Chrome - develop for the web
[βœ“] Android Studio (version 2021.2)
[βœ“] VS Code (version 1.74.0)
[βœ“] Connected device (3 available)
[βœ“] HTTP Host Availability

! Doctor found issues in 2 categories.
```
**Version:** 1.x

**Platform:**
- [ ] :iphone: iOS
- [X ] :robot: Android

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.