Issue
Running into a what appears to be a Null Safety issue when returning a specific key-value pair from Firestore. Specifically, the error is being triggered when trying to read data['thumbnail']
from Firestore. data['thumbnail']
is a URL for an Image, stored as a String in Firestore. I’m able to map through all other items in the document (all others are Strings as well). If I swap out the Firestore reference for an actual image URL, it works. Am I missing something Firestore specific here?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:getwidget/getwidget.dart';
class AllArticles extends StatefulWidget {
const AllArticles({Key? key}) : super(key: key);
@override
_AllArticlesState createState() => _AllArticlesState();
}
class _AllArticlesState extends State<AllArticles> {
final Stream<QuerySnapshot> _articleStream =
FirebaseFirestore.instance.collection('all_articles').snapshots();
@override
Widget build(BuildContext context) {
return Container(
child: StreamBuilder<QuerySnapshot?>(
stream: _articleStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot?> snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Text("Loading");
}
return Expanded(
child: ListView(
children: snapshot.data!.docs.map((DocumentSnapshot? document) {
Map<String?, dynamic> data =
document?.data() as Map<String?, dynamic>;
return Card(
elevation: 5,
child: SizedBox(
height: 80,
child: ListTile(
leading: GFAvatar(
backgroundImage: NetworkImage(data['thumbnail']),
shape: GFAvatarShape.standard),
title: Text(
data['title'],
style: TextStyle(
fontSize: 14, overflow: TextOverflow.ellipsis),
),
subtitle: Text(data['source']),
isThreeLine: true,
),
));
}).toList(),
));
},
));
}
}
FULL CONSOLE OUTPUT
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building StreamBuilder<QuerySnapshot<Object?>>(dirty, state:
_StreamBuilderBaseState<QuerySnapshot<Object?>, AsyncSnapshot<QuerySnapshot<Object?>>>#285c8):
type 'Null' is not a subtype of type 'String'
The relevant error-causing widget was:
StreamBuilder<QuerySnapshot<Object?>>
StreamBuilder:file:///Users/bendepew/Developer/aw/pit-road-reporter/prr_flutter/lib/widgets/AllNascarCard.dart:19:16
When the exception was thrown, this was the stack:
#0 _AllNascarCardState.build.<anonymous closure>.<anonymous closure> (package:prr_flutter/widgets/AllNascarCard.dart:41:59)
#1 MappedListIterable.elementAt (dart:_internal/iterable.dart:413:31)
#2 ListIterator.moveNext (dart:_internal/iterable.dart:342:26)
#3 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:188:27)
#4 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#5 new List.of (dart:core-patch/array_patch.dart:51:28)
#6 ListIterable.toList (dart:_internal/iterable.dart:213:44)
#7 _AllNascarCardState.build.<anonymous closure> (package:prr_flutter/widgets/AllNascarCard.dart:57:14)
#8 StreamBuilder.build (package:flutter/src/widgets/async.dart:442:81)
#9 _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:124:48)
#10 StatefulElement.build (package:flutter/src/widgets/framework.dart:4705:27)
#11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4588:15)
#12 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#13 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#14 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#15 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#17 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#18 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#19 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#20 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#21 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#22 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#23 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#24 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#25 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5626:32)
#26 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6284:17)
#27 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#28 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#29 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#30 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#31 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#32 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#33 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#34 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#35 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#36 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#37 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#38 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#39 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#40 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#41 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#42 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5626:32)
#43 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6284:17)
#44 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#45 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#46 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#47 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#48 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#49 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#50 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#51 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#52 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#53 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#54 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#55 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#56 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#57 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#58 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#59 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#60 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#61 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#62 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#63 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#64 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#65 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#66 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#67 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#68 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#69 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#70 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#71 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#72 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#73 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#74 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#75 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#76 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#78 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#79 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#80 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#82 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#83 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#84 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#85 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#86 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#87 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#88 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#91 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#92 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#93 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#94 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#95 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#96 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#97 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#98 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#100 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#101 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#102 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#103 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#104 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#105 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#106 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#107 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#108 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#109 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#110 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#111 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#112 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#113 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#114 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#115 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#116 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#117 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#118 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#119 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5626:32)
#120 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6284:17)
#121 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#122 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#123 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#124 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#125 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#126 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#127 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#128 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#129 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#130 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#131 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#132 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#133 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#134 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#135 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#136 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#137 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#138 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#139 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#140 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#141 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#142 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#143 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#144 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#145 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#146 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#147 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#148 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#149 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#150 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#151 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#152 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#153 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#154 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#155 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#156 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#157 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#158 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#159 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#160 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#161 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#162 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#163 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#164 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:111:11)
#165 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#166 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#167 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#168 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#169 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#170 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#171 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#172 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#173 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#174 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#175 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#176 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#177 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#178 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#179 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#180 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#181 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#182 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#183 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#184 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#185 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#186 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#187 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#188 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#189 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#190 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#191 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#192 StatelessElement.update (package:flutter/src/widgets/framework.dart:4669:5)
#193 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#194 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6130:14)
#195 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#196 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#197 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#198 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#199 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#200 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#201 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#202 ProxyElement.update (package:flutter/src/widgets/framework.dart:4943:5)
#203 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#204 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#205 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#206 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#207 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#208 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#209 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#210 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#211 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#212 StatefulElement.update (package:flutter/src/widgets/framework.dart:4795:5)
#213 Element.updateChild (package:flutter/src/widgets/framework.dart:3370:15)
#214 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4613:16)
#215 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4763:11)
#216 Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
#217 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2578:33)
#218 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#219 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#220 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1145:15)
#221 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
#222 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:863:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: A RenderFlex overflowed by 99409 pixels on the bottom.
Performing hot reload...
Reloaded 1 of 724 libraries in 1,860ms.
Another exception was thrown: type 'Null' is not a subtype of type 'String'
Solution
As you have previously confirmed, the data type is not being correctly handled, you can process Streams using either await for
or listen()
, you can see it in the Asynchronous programming: Streams. I’m afraid I’m not able to find any of these methods in the code you have provided, pointing this is the main reason to receive a null safety error, as the data type is not being received correctly and causing it to be treated as a null value. This happens in other languages as well, and it’s a common programming mistake.
You will need to add a method to receive the stream and handle the errors, all included in the last link. Please read the documentation carefully and add the missing code, this will help you solve that error. I will leave this video as complement.
Answered By – Alex
Answer Checked By – Gilberto Lyons (FlutterFixes Admin)