Closed
Description
FadeInImage throws null pointer exception when switching from a cached image to an uncached image
It is possible that this PR is causing the problem.
Steps to Reproduce
- Execute
flutter run
on the code sample - Click the FloatingActionButton to switch images
Expected results:
Switch images normally.
Actual results:
Throwing exceptions: Null check operator used on a null value
Code sample
import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';
void main() async {
runApp(const MyApp());
}
const _kImages = [
'https://pub.dev/static/hash-t3bgi1vk/img/landing-01.webp',
'https://pub.dev/static/hash-t3bgi1vk/img/landing-02.webp',
'https://pub.dev/static/hash-t3bgi1vk/img/landing-03.webp',
];
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FutureBuilder<void>(
// Preload the first image
future: precacheImage(NetworkImage(_kImages[0]), context),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Material(
child: Center(child: CircularProgressIndicator()));
}
return const MyHomePage(title: 'Flutter Demo Home Page');
}),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: _kImages[_counter % _kImages.length],
),
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
// Click the button to switch images
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
Logs
[+8343 ms] E/SurfaceSyncer( 8318): Failed to find sync for id=0
[ +1 ms] E/SurfaceSyncer( 8318): Failed to find sync for id=1
[+3459 ms]
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building _AnimatedFadeOutFadeIn(duration: 1000ms, dirty, state:
_AnimatedFadeOutFadeInState#8c208(ticker inactive, targetOpacity: null, placeholderOpacity: null)):
Null check operator used on a null value
The relevant error-causing widget was:
FadeInImage
FadeInImage:file:///K:/GitHub/@flutter/demos/demo_fade_in_image_null_3/lib/main.dart:66:25
When the exception was thrown, this was the stack:
#0 _AnimatedFadeOutFadeInState.build (package:flutter/src/widgets/fade_in_image.dart:542:70)
#1 StatefulElement.build (package:flutter/src/widgets/framework.dart:4992:27)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4878:15)
#3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#5 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#6 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#9 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#10 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#11 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#12 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#13 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#14 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#15 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#16 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#17 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#18 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#19 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5904:32)
#20 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6460:17)
#21 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#22 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#23 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#24 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#25 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#26 StatelessElement.update (package:flutter/src/widgets/framework.dart:4956:5)
#27 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#28 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#29 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#30 StatelessElement.update (package:flutter/src/widgets/framework.dart:4956:5)
#31 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#33 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#34 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#35 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#36 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#37 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#38 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#39 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#40 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5904:32)
#41 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6460:17)
#42 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#43 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#44 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#45 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#46 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#47 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#48 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#49 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#50 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#51 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#52 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#53 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#54 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#55 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#56 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#57 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#58 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#59 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#60 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#61 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#62 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#63 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#64 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#65 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#66 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#67 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#68 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#69 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#70 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#71 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#72 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#73 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#74 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#75 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#76 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#77 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#78 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#79 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#80 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#81 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#82 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#83 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#84 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#85 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#86 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#87 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#88 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#89 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#90 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#91 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#92 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#93 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#94 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#95 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#96 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#97 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#98 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#99 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#100 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#101 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#102 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#103 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#104 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#105 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#106 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#107 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#108 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#109 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#110 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#111 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#112 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#113 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:19)
#114 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#115 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:378:5)
#116 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1175:15)
#117 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1104:9)
#118 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1015:5)
#119 _invoke (dart:ui/hooks.dart:148:13)
#120 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:318:5)
#121 _drawFrame (dart:ui/hooks.dart:115:31)
════════════════════════════════════════════════════════════════════════════════════════════════════
[ +42 ms]
Another exception was thrown: A RenderFlex overflowed by 99282 pixels on the bottom.
[ +711 ms]
Another exception was thrown: Null check operator used on a null value
Analyzing demo_fade_in_image_null_3...
No issues found! (ran in 2.4s)
[√] Flutter (Channel stable, 3.3.0, on Microsoft Windows [版本 10.0.22622.590], locale zh-CN)
• Flutter version 3.3.0 on channel stable at K:\SDK\flutter-stable
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision ffccd96b62 (7 days ago), 2022-08-29 17:28:57 -0700
• Engine revision 5e9e0e0aa8
• Dart version 2.18.0
• DevTools version 2.15.0
• Flutter download mirror https://storage.flutter-io.cn
[√] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
• Android SDK at C:\SDK\android-sdk
• Platform android-33, build-tools 32.0.0
• ANDROID_HOME = C:\SDK\android-sdk
• Java binary at: C:\SDK\android-studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.11.15)
• Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
• Visual Studio Community 2019 version 16.11.32510.428
• Windows 10 SDK version 10.0.18362.0
[√] Android Studio (version 2021.2)
• Android Studio at C:\SDK\android-studio
• Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
[√] IntelliJ IDEA Community Edition (version 2022.2)
• IntelliJ at C:\Users\ipcjs\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\222.3739.54
• Flutter plugin version 70.0.5
• Dart plugin version 222.3739.24
[√] VS Code (version 1.71.0)
• VS Code at C:\Users\ipcjs\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.48.0
[√] Proxy Configuration
• HTTP_PROXY is set
• NO_PROXY is
localhost,127.0.0.1,::1,192.168.0.230,dl.google.com,maven.aliyun.com,cdn.npm.taobao.org,registry.npm.taobao.org,npmmirror.com,registry.npmmirror.com,storage.flutter-io.cn,pub.flutter-io.cn,gitee.com,engdownload.ea
ssos.cn,upos-hz-mirrorakam.akamaized.net,www.bmtasmartbus.com,mirrors.tuna.tsinghua.edu.cn,amappc.oss-cn-zhangjiakou.aliyuncs.com,lbsyun-baidu.cdn.bcebos.com,a.amap.com,cdn.ipcjs.top,baidu.com,mirrors.aliyun.com,a
pple.com
• NO_PROXY contains localhost
• NO_PROXY contains ::1
• NO_PROXY contains 127.0.0.1
[√] Connected device (4 available)
• Pixel 6 Pro (mobile) • 192.168.1.17:41017 • android-arm64 • Android 13 (API 33)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [版本 10.0.22622.590]
• Chrome (web) • chrome • web-javascript • Google Chrome 104.0.5112.102
• Edge (web) • edge • web-javascript • Microsoft Edge 101.0.1210.53
[√] HTTP Host Availability
• All required HTTP hosts are available
Metadata
Metadata
Assignees
Labels
Animation APIsStack traces logged to the consoleIt was better in the past than it is nowFound to occur in 3.3Found to occur in 3.4flutter/packages/flutter repository. See also f: labels.The issue has been confirmed reproducible and is ready to work onIssue is closed as already fixed in a newer version