NoSuchMethodError was thrown building Tabs(dirty, state: _TabsState#fefcf): The method '[]' was called on null - flutter

I have read similar answers for this type of error but still, I am not able to resolve it in my code.
When I tap the button it shows an error screen for some time and then displays loader which should be displayed while the data is being fetched.
error screen
loading screen
final screen
here is the code:
import 'package:flutter/material.dart';
import 'Dictionary.dart';
import 'Services.dart';
class NewTab extends StatefulWidget {
#override
_NewTabState createState() => _NewTabState();
}
class _NewTabState extends State<NewTab> {
List<Dictionary> _users;
int len;
#override
void initState() {
super.initState();
Services.getUsers().then((users) {
setState(() {
_users = users;
len = users.length - 1 ;
});
});
}
#override
Widget build(BuildContext context) {
Dictionary user = _users[len];
print(user);
return FutureBuilder(
future: Services.getUsers(),
builder: (context,AsyncSnapshot<List<Dictionary>> snapshot){
if(snapshot.data==null){
return Center(child: CircularProgressIndicator());
}else{
return DefaultTabController(length: 2,
child:Scaffold(
appBar: AppBar(
title : Text('Meaning',
style: TextStyle(
fontFamily: "Pangolin",
fontSize: 35,
)
),
centerTitle: true,
bottom: TabBar(
tabs: <Widget>[
Tab(text:'Meaning',
icon: Icon(Icons.book_outlined),
),
Tab(text:'Example',
icon: Icon(Icons.directions_transit)
),
],
),
),
body : TabBarView(
children: <Widget>[
Container(
color: Colors.white,
child: Container(
color: Colors.black,
child: ListView.builder(
itemCount: user.meanings.length,
itemBuilder: (context, index) {
print(index);
List<Meaning> mean = user.meanings;
return ListTile(
title: Text(mean[index].definitions[0].definition
, style: TextStyle(
color: Colors.white,
),
),
);
},
),
),),Container(
child: Text('home'),
),]
)
)
);
}
},
);
}
}
code for onpressed function in raised button
onPressed: ()=>{
Navigator.of(context).push(
new MaterialPageRoute(builder: (BuildContext context) => NewTab())
)
},
code for services.dart
import 'package:http/http.dart' as http;
import 'Dictionary.dart';
import 'package:dictionary_app/home.dart';
import 'dart:async';
class Services {
static final url = 'https://api.dictionaryapi.dev/api/v2/entries/en_US/$word';
static Future<List<Dictionary>> getUsers() async {
try {
print(url);
final response = await http.get(Uri.parse(url));
print(response.statusCode);
if (200 == response.statusCode) {
final List<Dictionary> users = dictionaryFromJson(response.body);
return users;
}
else {
return <Dictionary>[];
}
} catch (e) {
return <Dictionary>[];
}
}
}
error:
The following NoSuchMethodError was thrown building NewTab(dirty, state: _NewTabState#1662b):
The method '[]' was called on null.
Receiver: null
Tried calling: [](null)
The relevant error-causing widget was:
NewTab file:///E:/Flutter-Projects/flutter3/dictionary_app/lib/home.dart:120:74
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:63:5)
#1 _NewTabState.build (package:dictionary_app/newtab.dart:25:30)
#2 StatefulElement.build (package:flutter/src/widgets/framework.dart:4749:27)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4632:15)
#4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4805:11)
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4610:5)
#7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4796:11)
#8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4605:5)
... Normal element mounting (166 frames)
#174 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3662:14)
#175 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6285:36)
#176 Element.updateChild (package:flutter/src/widgets/framework.dart:3414:18)
#177 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5717:32)
#178 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6308:17)
#179 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#180 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#181 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4805:11)
#182 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#183 StatefulElement.update (package:flutter/src/widgets/framework.dart:4837:5)
#184 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#185 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#186 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#187 ProxyElement.update (package:flutter/src/widgets/framework.dart:4985:5)
#188 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#189 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#190 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#191 ProxyElement.update (package:flutter/src/widgets/framework.dart:4985:5)
#192 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:181:11)
#193 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#194 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6154:14)
#195 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#196 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#197 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4805:11)
#198 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#199 StatefulElement.update (package:flutter/src/widgets/framework.dart:4837:5)
#200 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#201 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6154:14)
#202 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#203 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6154:14)
#204 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#205 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#206 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#207 ProxyElement.update (package:flutter/src/widgets/framework.dart:4985:5)
#208 Element.updateChild (package:flutter/src/widgets/framework.dart:3401:15)
#209 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4657:16)
#210 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4805:11)
#211 Element.rebuild (package:flutter/src/widgets/framework.dart:4322:5)
#212 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2619:33)
#213 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:878:21)
#214 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:328:5)
#215 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1147:15)
#216 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1084:9)
#217 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1000:5)
#221 _invoke (dart:ui/hooks.dart:163:10)
#222 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
#223 _drawFrame (dart:ui/hooks.dart:126:31)
(elided 3 frames from dart:async)

First of all you can remove your initState method since you are already using the FutureBuilder to fetch your Services.getUsers().
Now, you have defined your variables like this,
List<Dictionary> _users;
int len;
But both of them are null when build method is going to be called for the first time.
So inside your build method, you can't directly use,
Dictionary user = _users[len];
print(user);
Since, _users is null when build is called for the first time. So remove those 2 lines.
Now, rest of your code is correct, except for one part,
Inside your else case of if(snapshot.data==null), define your user variable like this,
else {
Dictionary user = snapshot.data!.last; // This gives you the last element of the array
Now, your code should work.
Here is the paste bin link for the full code of _NewTabState.

You have to initialize your list
List<Dictionary> _users = [];
It’s better way:
snapShot.connectionState == ConnectionState.waiting ? :

Related

'stream "messagestream" has not been initialized' error

I'm creating a messaging system for my app, which uses the stream "messageStream", which I use first here:
class _chatscreenstate extends State<chatscreen> {
late String chatroomId = ' ';
late String messageId = '';
late String myName;
late String myProfilePic = "";
late Stream<QuerySnapshot> messageStream;
TextEditingController messageTextEditingController = TextEditingController();
Just as a sidenote, none of the code I have posted here gives any errors, the errors occur only when the program is run and tries to build the stream.
I also use the messagestream in this widget:
Widget chatmessages() {
return StreamBuilder<QuerySnapshot>(
stream: messageStream,
builder: (context, AsyncSnapshot snapshot) {
return snapshot.hasData
? ListView.builder(
padding: EdgeInsets.only(bottom: 70, top: 16),
itemCount: snapshot.data?.docs.length,
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data!.docs[index];
return chatMessageTile(
ds["message"], username.value == ds["sendbyme"]);
})
: Center(child: CircularProgressIndicator());
});
}
Which takes another widget "chatMessageTile" which contains the data in the textbubbles which will be used to build the list. Here is where I am getting the data:
getAndSendMessages() async {
messageStream = await database().getChatRoomMessages(chatroomId);
}
doThisOnLaunch() async {
await getMyInfoFromSharedPreference();
getAndSendMessages();
}
#override
void initState() {
doThisOnLaunch();
super.initState();
}
This concludes all the places that I've used messageStream in my code.
When I tried running it, I get the error:
The following LateError was thrown building chatscreen(dirty, dependencies: [_InheritedTheme,
_LocalizationsScope-[GlobalKey#d42c2]], state: _chatscreenstate#c4a8c):
LateInitializationError: Field 'messageStream' has not been initialized.
The relevant error-causing widget was:
chatscreen
chatscreen:file:///Users/jshen/Documents/GitHub/TwoCents/twocents_app/lib/josh/twocentsmessaging/messagehome.dart:331:63
When the exception was thrown, this was the stack:
#0 _chatscreenstate.messageStream (package:twocents_app/josh/twocentsmessaging/Chatscreen.dart)
#1 _chatscreenstate.chatmessages (package:twocents_app/josh/twocentsmessaging/Chatscreen.dart:120:17)
#2 _chatscreenstate.build (package:twocents_app/josh/twocentsmessaging/Chatscreen.dart:180:26)
#3 StatefulElement.build (package:flutter/src/widgets/framework.dart:4992:27)
#4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4878:15)
#5 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#6 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#7 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859:5)
#8 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5041:11)
#9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853:5)
... Normal element mounting (24 frames)
#33 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)
#34 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6435:36)
#35 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6447:32)
... Normal element mounting (175 frames)
#210 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)
#211 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6435:36)
#212 Element.updateChild (package:flutter/src/widgets/framework.dart:3592:18)
#213 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5964:32)
#214 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6460:17)
#215 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#216 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#217 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#218 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#219 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#220 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#221 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#222 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#223 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#224 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#225 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#226 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#227 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#228 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11)
#229 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#230 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#231 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#232 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#233 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#234 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#235 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#236 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#237 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#238 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#239 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#240 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#241 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#242 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#243 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#244 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#245 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#246 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#247 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#248 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:19)
#249 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#250 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:378:5)
#251 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1175:15)
#252 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1104:9)
#253 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1015:5)
#254 _invoke (dart:ui/hooks.dart:148:13)
#255 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:318:5)
#256 _drawFrame (dart:ui/hooks.dart:115:31)
════════════════════════════════════════════════════════════════════════════════════════════════════
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: type 'Future<dynamic>' is not a subtype of type 'Stream<QuerySnapshot<Object?>>'
#0 _chatscreenstate.getAndSendMessages (package:twocents_app/josh/twocentsmessaging/Chatscreen.dart:136:5)
#1 _chatscreenstate.doThisOnLaunch (package:twocents_app/josh/twocentsmessaging/Chatscreen.dart:141:5)
<asynchronous suspension>
And the Iphone simulator shows the red screen with yellow text saying : "Field messageStream has not been initialized". I'm not sure why since I declared the stream as "late", and nothing I've found online fixes it. Any ideas?
doThisOnLaunch is an async function, you are not awaiting its call in initState. So initState will not wait until the call to doThisOnLaunch is finished.
You can't make the initState async, so i suggest moving the initialization code to didChangeDependencies which can be async
bool _isInitialized = false;
#override
void didChangeDependencies() {
super.didChangeDependencies();
if (!_isInitialized) {
await doThisOnLaunch();
_isInitialized = true;
}
}

'(TypleClass) => String' is not a subtype of type '(dynamic) => String'

First of all, I´ve already submitted an [issue][1] on Flutter's team repository since to me this is an issue on Flutter/Dart but maybe I´m wrong.
Steps to Reproduce
Execute flutter run on the code sample
There are two type of flows that behaves in a similar way, I've created the project above to represent those scenarios
You will find 2 buttons that in each case will be redirected to a new page that can trigger each failure
Expected results:
In the "widget example" I'm creating a generic stateful widget TypeErrorWidget<T> that has a property of type:
final IdMapper<T> idMapper;
where IdMapper<T> is defined as:
typedef IdMapper<T> = String Function(T item);
later on, this property is accessed inside the state to map an iterable of items and extract the ids with the function provided:
_itemsIds = widget.items.map((e) {
return widget.idMapper(e);
}).toList();
I'm expecting to get the ids as a list of List<String>
Actual results:
However, when runtime reaches that line it's failing complaining about the following: '(ExampleListItem) => String' is not a subtype of type '(dynamic) => String' , which doesn't have much sense since dynamic should contain my custom type in any case.
Code sample
lib/presentation/widgets/type_error_widget.dart
class TypeErrorWidget<T> extends StatefulWidget {
final Iterable<T> items;
final IdMapper<T> idMapper;
const TypeErrorWidget({
Key? key,
required this.items,
required this.idMapper,
}) : super(key: key);
#override
State<TypeErrorWidget> createState() => _TypeErrorWidgetState();
}
class _TypeErrorWidgetState extends State<TypeErrorWidget> {
late List<String> _itemsIds;
#override
void initState() {
_itemsIds = widget.items.map((e) {
return widget.idMapper(e); <- it throws!
}).toList();
super.initState();
}
#override
Widget build(BuildContext context) {
return Column(
children: [
const Text("I'll crash"),
Text(_itemsIds.toString()),
],
);
}
}
class WidgetExamplePage extends StatefulWidget {
const WidgetExamplePage({super.key});
#override
State<WidgetExamplePage> createState() => _WidgetExamplePageState();
}
class _WidgetExamplePageState extends State<WidgetExamplePage> {
bool _makeItCrash = false;
bool _makeItWork = false;
final List<ExampleListItem> _items = const [
ExampleListItem(
id: "id1",
title: "Title1",
),
ExampleListItem(
id: "id2",
title: "Title2",
),
];
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Widget error")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (_makeItCrash)
TypeErrorWidget<ExampleListItem>(
items: _items,
idMapper: (item) {
return item.id;
},
),
ElevatedButton(
onPressed: () {
setState(() {
_makeItWork = false;
_makeItCrash = true;
});
},
child: const Text("Make it crash"),
),
if (_makeItWork && !_makeItCrash)
TypeWorkaroundWidget<ExampleListItem>(
items: _items,
idMapper: (item) {
return item.id;
},
),
if (!_makeItCrash)
ElevatedButton(
onPressed: () {
setState(() {
_makeItWork = true;
_makeItCrash = false;
});
},
child: const Text("Make it works"),
),
],
),
),
);
}
}
Logs
The following _TypeError was thrown building KeyedSubtree-[GlobalKey#196d8]:
type '(ExampleListItem) => String' is not a subtype of type '(dynamic) => String'
The relevant error-causing widget was:
Scaffold
Scaffold:file:///Users/victor/Documents/personal/development/flutter/type_issues/lib/presentation/pages/widget_example_page.dart:29:12
When the exception was thrown, this was the stack:
#0 _TypeErrorWidgetState.initState.<anonymous closure> (package:type_issues/presentation/widgets/type_error_widget.dart:26:21)
#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:189: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 _TypeErrorWidgetState.initState (package:type_issues/presentation/widgets/type_error_widget.dart:27:8)
#8 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5015:57)
#9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853:5)
#10 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)
#11 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6435:36)
#12 Element.updateChild (package:flutter/src/widgets/framework.dart:3592:18)
#13 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5964:32)
#14 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6460:17)
#15 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#16 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#17 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#18 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#19 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#20 StatelessElement.update (package:flutter/src/widgets/framework.dart:4956:5)
#21 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#22 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#23 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#24 StatelessElement.update (package:flutter/src/widgets/framework.dart:4956:5)
#25 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#26 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#27 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#28 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#29 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#30 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#31 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#32 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#33 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#34 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5904:32)
#35 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6460:17)
#36 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#38 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#39 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#40 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#41 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#42 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#43 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#44 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#45 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#46 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#47 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#48 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#49 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#50 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#51 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#52 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#53 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#54 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#55 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#56 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#57 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#58 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#59 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#60 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6307:14)
#61 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#62 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#63 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#64 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228: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 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#70 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#71 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#72 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#73 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#74 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#75 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#76 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#77 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#78 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#79 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#80 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#81 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#82 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#83 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#84 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#85 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#86 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#87 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#88 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#91 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#92 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#93 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#94 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#95 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#96 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#97 ProxyElement.update (package:flutter/src/widgets/framework.dart:5228:5)
#98 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#100 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#101 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#102 StatefulElement.update (package:flutter/src/widgets/framework.dart:5082:5)
#103 Element.updateChild (package:flutter/src/widgets/framework.dart:3570:15)
#104 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904:16)
#105 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)
#106 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)
#107 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:19)
#108 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#109 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:378:5)
#110 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1175:15)
#111 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1104:9)
#112 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1015:5)
#113 _invoke (dart:ui/hooks.dart:148:13)
#114 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:318:5)
#115 _drawFrame (dart:ui/hooks.dart:115:31)
To workaround that issue I need to pass the widget property down to the widget state through it's constructor:
lib/presentation/widgets/type_error_workaround.dart
...
#override
State<TypeWorkaroundWidget> createState() => _TypeErrorWidgetState<T>(
idMapper: idMapper,
);
...
class _TypeErrorWidgetState<T> extends State<TypeWorkaroundWidget> {
late List<String> _itemsIds;
final IdMapper<T> idMapper;
_TypeErrorWidgetState({
required this.idMapper,
});
#override
void initState() {
_itemsIds = widget.items.map((e) {
return idMapper(e) <-- it won't throw;
}).toList();
super.initState();
}
Aside from this issue which I have found a workaround I'm having a similar issue, in this example I'm using a Freezed union type class:
lib/utils/types/freezed_example_type.dart
#freezed
class FreezedExampleType<T extends Object> with _$ExampleClass<T> {
factory FreezedExampleType.example({
required TypedFnExample<T> callback,
}) = _Example<T>;
}
typedef TypedFnExample<T> = String Function(T item);
The idea is that later on I can push many instances of FreezedExampleType into an array and later I can put some logic to act depending on the class type, in my example I simplified this by just pushing one item:
class FreezedPage extends StatefulWidget {
const FreezedPage({super.key});
#override
State<FreezedPage> createState() => _FreezedPageState();
}
class _FreezedPageState extends State<FreezedPage> {
bool _makeItCrash = false;
bool _makeItWork = false;
List<FreezedExampleType> exampleType = List<FreezedExampleType>.of([]);
#override
void initState() {
exampleType.add(
FreezedExampleType<ExampleListItem>.example(
callback: (item) {
return item.id;
},
),
);
super.initState();
}
...
Later on, we access the type on the array and try to act on it's typed property:
_userType() {
const item = ExampleListItem(
id: "exampleId",
title: "Example Title",
);
print(
exampleType.first.mapOrNull(
example: (value) {
return value.callback(item); <- This will throw! =c
},
),
);
}
Unfortunately this throws with the same type of error: type '(ExampleListItem) => String' is not a subtype of type '(Object) => String'
Logs
```
type '(ExampleListItem) => String' is not a subtype of type '(Object) => String'
When the exception was thrown, this was the stack:
#0 _FreezedPageState._userType. (package:type_issues/presentation/pages/freezed_example_page.dart:86:24)
#1 _$_Example.mapOrNull (package:type_issues/utils/types/freezed_example_type.freezed.dart:198:21)
#2 _FreezedPageState._userType (package:type_issues/presentation/pages/freezed_example_page.dart:84:25)
#3 _FreezedPageState.build. (package:type_issues/presentation/pages/freezed_example_page.dart:51:17)
#4 _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1072:21)
#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:253:24)
#6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:627:11)
#7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:306:5)
#8 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:239:7)
#9 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:615:9)
#10 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#11 PointerRouter._dispatchEventToRoutes. (package:flutter/src/gestures/pointer_router.dart:143:9)
#12 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:617:13)
#13 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
#14 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
#15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:460:19)
#16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:440:22)
#17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:337:11)
#18 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:395:7)
#19 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:357:5)
#20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:314:7)
#21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:295:7)
#22 _invoke1 (dart:ui/hooks.dart:167:13)
#23 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:341:7)
#24 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
Handler: "onTap"
Recognizer:
TapGestureRecognizer#90ba6
</details>
[1]: https://github.com/flutter/flutter/issues/110718
In the state class of TypeErrorWidget, set the Type like so:
class TypeErrorWidget<T> extends StatefulWidget {
final Iterable<T> items;
final IdMapper<T> idMapper;
const TypeErrorWidget({
Key? key,
required this.items,
required this.idMapper,
}) : super(key: key);
#override
State<TypeErrorWidget<T>> createState() => _TypeErrorWidgetState<T>();
}
class _TypeErrorWidgetState<T> extends State<TypeErrorWidget<T>> {
late List<String> _itemsIds;
#override
void initState() {
_itemsIds = widget.items.map((e) {
return widget.idMapper(e);
}).toList();
super.initState();
}
#override
Widget build(BuildContext context) {
return Column(
children: [
const Text("I'll crash"),
Text(_itemsIds.toString()),
],
);
}
}

FirebaseMessaging.instance.getInitialMessage() not working with Splash Screen

I have integrated Firebase Cloud Messaging to my Flutter mobile app with the help of GetX State Management. Also I used Laravel with Firebase Admin SDK to send notification to my app.
The notification is working fine on both foreground state and background state (paused). The problem starts when I click the notification where the app is in terminated state (app closed). Do I have to set a delay between the splashscreen and main page?
I have tried to do this but error still occur
//open notif content from terminated state of the app
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
print('TERMINATED');
if (FirebaseAuth.instance.currentUser != null) {
final redirectRoute = message.data['route'];
if (redirectRoute != null) {
//adding delay here since my splashscreen have the same delay
Future.delayed(const Duration(seconds: 6));
bottomnavbarController.updateIndex(int.parse(redirectRoute));
}
} else {
Get.offAllNamed(Routes.LOGIN);
}
}
});
I get this error
Unhandled Exception:
You are trying to use contextless
navigation without a GetMaterialApp or Get.key
Here is my main.dart
//open notif content from terminated state of the app
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
if (FirebaseAuth.instance.currentUser == null) {
Get.offAllNamed(Routes.LOGIN);
} else {
final redirectRoute = message.data['route'];
if (redirectRoute != null) {
print('TERMINATED');
bottomnavbarController.updateIndex(int.parse(redirectRoute));
}
}
}
});
#override
Widget build(BuildContext context) {
final authController = Get.put(AuthController(), permanent: true);
return FutureBuilder(
future: Future.delayed(const Duration(seconds: 6)),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Obx(
() => GetMaterialApp(
debugShowCheckedModeBanner: false,
title: "Application",
theme: ThemeData(
appBarTheme: const AppBarTheme(
elevation: 0.2,
foregroundColor: Colors.black,
backgroundColor: Colors.white),
),
initialRoute: authController.isSkipIntro.isTrue
? authController.isAuthAndVerified.isTrue
? Routes.PAGEWRAPPER
: Routes.LOGIN
: Routes.INTRODUCTION,
getPages: AppPages.routes,
),
);
}
return FutureBuilder(
future: authController.firstInitialize(),
builder: (context, snapshot) {
return const SplashScreen();
},
);
},
);
}
Here is my bottom nav controller
class BottomnavbarController extends GetxController {
final bottomNavIndex = 0.obs;
void updateIndex(int index){
bottomNavIndex.value = index;
Get.offAllNamed(Routes.PAGEWRAPPER);
}
}
Here's the log
Launching lib\main.dart on RNE L22 in release mode...
Running Gradle task 'assembleRelease'... 76.4s
√ Built build\app\outputs\flutter-apk\app-release.apk (10.0MB).
Installing build\app\outputs\flutter-apk\app.apk... 3.4s
Flutter run key commands.
h List all available interactive commands.
c Clear the screen
q Quit (terminate the application on the device).
W/FlutterJNI(10061): FlutterJNI.loadLibrary called more than once
W/FlutterJNI(10061): FlutterJNI.prefetchDefaultFontManager called more than once
W/FlutterJNI(10061): FlutterJNI.init called more than once
W/FlutterJNI(10239): FlutterJNI.loadLibrary called more than once
W/FlutterJNI(10239): FlutterJNI.init called more than once
I/flutter (10239): Handling a background message: 0:1646807530074172%f77b2610f77b2610
I/flutter (10239): TERMINATED
E/flutter (10239): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: You are trying to use contextless navigation without
E/flutter (10239): a GetMaterialApp or Get.key.
E/flutter (10239): If you are testing your app, you can use:
E/flutter (10239): [Get.testMode = true], or if you are running your app on
E/flutter (10239): a physical device or emulator, you must exchange your [MaterialApp]
E/flutter (10239): for a [GetMaterialApp].
E/flutter (10239):
E/flutter (10239): #0 GetNavigation.global (package:get/get_navigation/src/extension_navigation.dart:1094)
E/flutter (10239): #1 GetNavigation.offAllNamed (package:get/get_navigation/src/extension_navigation.dart:786)
E/flutter (10239): #2 BottomnavbarController.updateIndex (package:prototypeapp/app/modules/bottomnavbar/controllers/bottomnavbar_controller.dart:9)
E/flutter (10239): #3 _MyAppState.initState.<anonymous closure> (package:prototypeapp/main.dart:64)
E/flutter (10239): #4 _rootRunUnary (dart:async/zone.dart:1434)
E/flutter (10239): <asynchronous suspension>
E/flutter (10239):
I/flutter (10239): Null check operator used on a null value
I/flutter (10239): #0 PageRedirect.page (package:get/get_navigation/src/routes/route_middleware.dart:199)
I/flutter (10239): #1 GetMaterialApp.initialRoutesGenerate (package:get/get_navigation/src/root/get_material_app.dart:348)
I/flutter (10239): #2 _WidgetsAppState.build.<anonymous closure> (package:flutter/src/widgets/app.dart:1556)
I/flutter (10239): #3 NavigatorState.restoreState (package:flutter/src/widgets/navigator.dart:3290)
I/flutter (10239): #4 RestorationMixin._doRestore (package:flutter/src/widgets/restoration.dart:887)
I/flutter (10239): #5 RestorationMixin.didChangeDependencies (package:flutter/src/widgets/restoration.dart:873)
I/flutter (10239): #6 NavigatorState.didChangeDependencies (package:flutter/src/widgets/navigator.dart:3336)
I/flutter (10239): #7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4914)
I/flutter (10239): #8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #9 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #10 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #12 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #13 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #14 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #15 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #16 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #17 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #18 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #19 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #20 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #21 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #22 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #23 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #24 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #25 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #26 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #27 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #28 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #29 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #30 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #31 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #32 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #33 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #34 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #35 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #36 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #37 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #38 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #39 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #40 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #41 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #42 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #43 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #44 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #45 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #46 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #47 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #48 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #49 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #50 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #51 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #52 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #54 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #55 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #56 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #57 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #58 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #60 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928)
I/flutter (10239): #61 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #62 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #63 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4919)
I/flutter (10239): #64 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #65 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #66 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #67 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #68 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #69 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #70 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #71 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #72 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #73 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #74 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928)
I/flutter (10239): #75 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #76 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #77 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4919)
I/flutter (10239): #78 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #79 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #80 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #82 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #83 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #84 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #85 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #86 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #87 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #88 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #89 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #90 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #91 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #92 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #93 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I/flutter (10239): #94 Element.rebuild (package:flutter/src/widgets/framework.dart:4477)
I/flutter (10239): #95 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735)
I/flutter (10239): #96 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729)
I/flutter (10239): #97 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790)
I/flutter (10239): #98 Element.updateChild (package:flutter/src/widgets/framework.dart:3540)
I/flutter (10239): #99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780)
I have solved this problem with an alternative solution for now.
Here is the main.dart
#override
void initState() {
super.initState();
//open notif content from terminated state of the app
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
print('TERMINATED');
final redirectRoute = message.data['route'];
print('redirectRoute $redirectRoute');
bottomnavbarController.updateIndex(int.parse(redirectRoute));
//remove redirect route here, so the unknownRoute will trigger the default route
}
});
//only works if app in foreground
FirebaseMessaging.onMessage.listen((message) {
LocalNotificationService.display(message);
});
//onclick notif system tray only works if app in background but not termi
FirebaseMessaging.onMessageOpenedApp.listen((message) {
final redirectRoute = message.data['route'];
if (redirectRoute != null) {
print('BACKGROUND');
print('redirectRoute $redirectRoute');
bottomnavbarController.updateIndex(int.parse(redirectRoute));
Get.offAllNamed(Routes.PAGEWRAPPER);
}
});
}
#override
Widget build(BuildContext context) {
final authController = Get.put(AuthController(), permanent: true);
return FutureBuilder(
future: Future.delayed(const Duration(seconds: 6)),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Obx(
() => GetMaterialApp(
debugShowCheckedModeBanner: false,
title: "Application",
theme: ThemeData(
appBarTheme: const AppBarTheme(
elevation: 0.2,
foregroundColor: Colors.black,
backgroundColor: Colors.white),
),
initialRoute: authController.isSkipIntro.isTrue
? authController.isAuthAndVerified.isTrue
? Routes.PAGEWRAPPER
: Routes.LOGIN
: Routes.INTRODUCTION,
getPages: AppPages.routes,
unknownRoute: authController.isAuthAndVerified.isTrue ? AppPages.routes[11] : AppPages.routes[1],
),
);
}
return FutureBuilder(
future: authController.firstInitialize(),
builder: (context, snapshot) {
return const SplashScreen();
},
);
},
);
}
I added this unknownRoute: on GetMaterialApp if the route is null which passing an array to the index of pagewrapper o login page inside AppPages class since the route in getInitialMessage() returns null.
I have define using Get.key and still returns null. Maybe app_routes.dart is not created yet before GetMaterialApp. Maybe that is why it returns null.
I still don't know why this is happening. Maybe it is a bug for GetX plugin. Anyway, this still works for me since I have updated the bottom nav index.

Flutter-Test: Getting BlocProvider.of() called with a context that does not container Bloc

I am trying to test my submit button which fires a bloc event onPress.
SubmitButton.dart - Widget
class AuthenticationSubmitButton extends StatefulWidget {
final String buttonLabel;
final TextEditingController _userEmailController;
final TextEditingController _passwordController;
AuthenticationSubmitButton(
this.buttonLabel, this._userEmailController, this._passwordController);
#override
_AuthenticationSubmitButtonState createState() =>
_AuthenticationSubmitButtonState();
}
class _AuthenticationSubmitButtonState
extends State<AuthenticationSubmitButton> {
#override
Widget build(BuildContext context) {
Size screenSize = MediaQuery.of(context).size;
final _authBloc = BlocProvider.of<AuthenticationBloc>(context);
return Container(
child: FlatButton.icon(
height: screenSize.height * 0.07,
minWidth: screenSize.width * 0.5,
padding: EdgeInsets.all(10),
color: Colors.green,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
onPressed: () {
final email = widget._userEmailController.text.trim();
final password = widget._passwordController.text.trim();
_authBloc.add(UserLoginEvent(email, password));
},
icon: Icon(Icons.keyboard_return_rounded),
label: Text(
widget.buttonLabel,
style: SubmitButtonStyle,
),
),
);
}
}
As you can see I am calling the event UserLoginEvent
authentication_events.dart
#immutable
abstract class AuthenticationEvent {}
/**
* Login Event
* Logout Event
*/
class UserLoginEvent extends AuthenticationEvent {
final String userEmail;
final String userPassword;
UserLoginEvent(this.userEmail, this.userPassword);
}
class ClearLoginEvent extends AuthenticationEvent {
}
And here is my authentication states
authentication_states.dart
#immutable
abstract class AuthenticationState extends Equatable {
}
class AuthenticationInitial extends AuthenticationState {
#override
List<Object> get props => [];
}
/**
* LoginSuccessful
* LoginFailed
* LogoutSuccessful
*/
class LoginSuccessful extends AuthenticationState {
#override
List<Object> get props => [];
}
class LoginError extends AuthenticationState {
#override
List<Object> get props => [];
}
authentication_bloc.dart
class AuthenticationBloc
extends Bloc<AuthenticationEvent, AuthenticationState> {
AuthenticationBloc({this.userRepository}) : super(AuthenticationInitial());
UserRepository userRepository;
#override
Stream<AuthenticationState> mapEventToState(
AuthenticationEvent event,
) async* {
if (event is UserLoginEvent) {
UserRepository repository = userRepository ?? UserRepository();
try {
bool loggedIn = await repository.authenticateUserWithCredentials(
event.userEmail, event.userPassword);
if (loggedIn) {
yield LoginSuccessful();
} else {
yield LoginError();
}
} catch (e) {
yield EmptyLoginCredentials();
}
} else if (event is ClearLoginEvent) {
yield AuthenticationInitial();
}
}
}
And finally my test for submit button
> submit_button_test.dart
class MockAuthBloc extends MockBloc<AuthenticationState>
implements AuthenticationBloc {}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
MockAuthBloc authBloc = MockAuthBloc();
TextEditingController _userEmailController;
TextEditingController _passwordController;
setUp(() {
_userEmailController = TextEditingController();
_passwordController = TextEditingController();
authBloc = MockAuthBloc();
});
tearDown(() {
_userEmailController.dispose();
_passwordController.dispose();
authBloc?.close();
});
///Provide Material App for giving access to MediaQuery
///Wrap any widget that needs Material widget
Widget buildTestableWidget(Widget widget) {
return MediaQuery(
data: MediaQueryData(),
child: BlocProvider.value(
value: authBloc,
child: MaterialApp(
home: Material(
child: widget,
),
),
),
);
}
group('Testing Submit button |', () {
testWidgets('description', (WidgetTester tester) async {
whenListen(
authBloc,
Stream.fromIterable(<AuthenticationState>[LoginSuccessful()]),
);
await tester.pumpWidget(buildTestableWidget(AuthenticationSubmitButton(
'Submit', _userEmailController, _passwordController)));
final buttonFinder = find.byType(FlatButton);
final button = tester.firstWidget(buttonFinder);
});
});
}
Could you please tell me what am I doing wrong here?
Below is my error
00:03 +19: /home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart: Testing Submit button | description
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building AuthenticationSubmitButton(dirty, dependencies:
[MediaQuery], state: _AuthenticationSubmitButtonState#da4f9):
BlocProvider.of() called with a context that does not contain a Bloc/Cubit of type
AuthenticationBloc.
No ancestor could be found starting from the context that was passed to
BlocProvider.of<AuthenticationBloc>().
This can happen if the context you used comes from a widget above the BlocProvider.
The context used was: AuthenticationSubmitButton(dirty, dependencies: [MediaQuery], state:
_AuthenticationSubmitButtonState#da4f9)
The relevant error-causing widget was:
AuthenticationSubmitButton
file:///home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart:57:51
When the exception was thrown, this was the stack:
#0 BlocProvider.of (package:flutter_bloc/src/bloc_provider.dart:121:7)
#1 _AuthenticationSubmitButtonState.build (package:kaadhal_host_client/screens/Authentication/widgets/submit_button.dart:26:36)
#2 StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
#4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
#6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
#7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
#8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
... Normal element mounting (174 frames)
#182 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
#183 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6236:32)
... Normal element mounting (267 frames)
#450 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
#451 Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
#452 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
#453 _InheritedProviderScopeElement.performRebuild (package:provider/src/inherited_provider.dart:426:11)
#454 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
#455 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
#456 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
... Normal element mounting (7 frames)
#463 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:223:11)
... Normal element mounting (7 frames)
#470 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:223:11)
... Normal element mounting (7 frames)
#477 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
#478 Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
#479 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1252:16)
#480 RenderObjectToWidgetElement.update (package:flutter/src/widgets/binding.dart:1230:5)
#481 RenderObjectToWidgetElement.performRebuild (package:flutter/src/widgets/binding.dart:1244:7)
#482 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
#483 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
#484 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1088:18)
#485 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
#486 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#487 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
#488 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:961:9)
#491 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)
#492 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:948:27)
#493 WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:524:22)
#496 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)
#497 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:521:27)
#498 main.<anonymous closure>.<anonymous closure> (file:///home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart:57:20)
#499 main.<anonymous closure>.<anonymous closure> (file:///home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart:46:32)
#500 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:146:29)
#511 FakeAsync.flushMicrotasks (package:fake_async/fake_async.dart:193:32)
#512 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1189:17)
#513 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1177:35)
(elided 29 frames from dart:async and package:stack_trace)
════════════════════════════════════════════════════════════════════════════════════════════════════
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following StateError was thrown running a test:
Bad state: No element
When the exception was thrown, this was the stack:
#0 Iterable.first (dart:core/iterable.dart:524:7)
#1 WidgetController.firstWidget (package:flutter_test/src/controller.dart:79:30)
#2 main.<anonymous closure>.<anonymous closure> (file:///home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart:60:29)
<asynchronous suspension>
#3 main.<anonymous closure>.<anonymous closure> (file:///home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart)
#4 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:146:29)
<asynchronous suspension>
#5 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart)
#6 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:784:19)
<asynchronous suspension>
#9 TestWidgetsFlutterBinding._runTest (package:flutter_test/src/binding.dart:764:14)
#10 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1173:24)
#11 FakeAsync.run.<anonymous closure>.<anonymous closure> (package:fake_async/fake_async.dart:178:54)
#16 withClock (package:clock/src/default.dart:48:10)
#17 FakeAsync.run.<anonymous closure> (package:fake_async/fake_async.dart:178:22)
#22 FakeAsync.run (package:fake_async/fake_async.dart:178:7)
#23 AutomatedTestWidgetsFlutterBinding.runTest (package:flutter_test/src/binding.dart:1170:15)
#24 testWidgets.<anonymous closure> (package:flutter_test/src/widget_tester.dart:138:24)
#25 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:175:19)
<asynchronous suspension>
#26 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart)
#31 Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:173:13)
#32 Invoker.waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:231:15)
#37 Invoker.waitForOutstandingCallbacks (package:test_api/src/backend/invoker.dart:228:5)
#38 Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart:383:17)
<asynchronous suspension>
#39 Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart)
#44 Invoker._onRun.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart:370:9)
#45 Invoker._guardIfGuarded (package:test_api/src/backend/invoker.dart:415:15)
#46 Invoker._onRun.<anonymous closure> (package:test_api/src/backend/invoker.dart:369:7)
#53 Invoker._onRun (package:test_api/src/backend/invoker.dart:368:11)
#54 LiveTestController.run (package:test_api/src/backend/live_test_controller.dart:153:11)
#55 RemoteListener._runLiveTest.<anonymous closure> (package:test_api/src/remote_listener.dart:256:16)
#60 RemoteListener._runLiveTest (package:test_api/src/remote_listener.dart:255:5)
#61 RemoteListener._serializeTest.<anonymous closure> (package:test_api/src/remote_listener.dart:208:7)
#79 _GuaranteeSink.add (package:stream_channel/src/guarantee_channel.dart:125:12)
#80 new _MultiChannel.<anonymous closure> (package:stream_channel/src/multi_channel.dart:159:31)
#84 CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
#118 new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1145:21)
#126 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:338:23)
#127 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:232:46)
#137 _Socket._onData (dart:io-patch/socket_patch.dart:2044:41)
#146 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1580:33)
#147 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1076:14)
(elided 111 frames from dart:async and package:stack_trace)
The test description was:
description
════════════════════════════════════════════════════════════════════════════════════════════════════
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following message was thrown:
Multiple exceptions (2) were detected during the running of the current test, and at least one was
unexpected.
════════════════════════════════════════════════════════════════════════════════════════════════════
00:03 +19 -1: /home/bhuvanesh/code/kaadhal_host_client/test/screens/Authentication/widgets/submit_button_test.dart: Testing Submit button | description [E]
Test failed. See exception logs above.
The test description was: description
Reasons-
You are coming on this class thought navigator
Your parent is not using same bloc
Solution-
You can use bloc here by passing it to constructor

How do I fix this NoSuchMethodError inFlutter?

I am following along with an online course yet my code throws an error where the instructor's code doesn't. Yes, I've scanned over it to make sure they are identical.
Maybe there is some small detail I've missed. At any rate, can someone please help me fix this error so I can move on?
Here is the get method:
List<Map<String, Object>> get groupedTransactionValues {
return List.generate(7, (index) {
final weekDay = DateTime.now().subtract(
Duration(days: index),
);
var totalSum = 0.0;
for (int i; i < recentTransactions.length; i++) {
if (recentTransactions[i].date.day == weekDay.day &&
recentTransactions[i].date.month == weekDay.month &&
recentTransactions[i].date.year == weekDay.year) {
totalSum += recentTransactions[i].amount;
}
}
return {
'day': DateFormat.E().format(weekDay).substring(0, 1),
'amount': totalSum,
};
});
}
And here is the implementation of it in Flutter:
#override
Widget build(BuildContext context) {
return Card(
elevation: 6,
margin: EdgeInsets.all(20),
child: Row(
children: groupedTransactionValues.map((data) {
}).toList(),
),
);
}
}
And here's the error message:
The following NoSuchMethodError was thrown building Chart(dirty):
The method '<' was called on null.
Receiver: null
Tried calling: <(0)
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 Chart.groupedTransactionValues.<anonymous closure>
package:expense/widgets/chart.dart:19
#2 new List.generate (dart:core-patch/array_patch.dart:78:28)
#3 Chart.groupedTransactionValues
package:expense/widgets/chart.dart:13
#4 Chart.build
package:expense/widgets/chart.dart:45
#5 StatelessElement.build
package:flutter/…/widgets/framework.dart:4620
#6 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4546
#7 Element.rebuild
package:flutter/…/widgets/framework.dart:4262
#8 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4525
#9 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4520
#10 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3490
#11 MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5991
... Normal element mounting (109 frames)
#120 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3490
#121 MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5991
... Normal element mounting (210 frames)
#331 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3490
#332 MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5991
... Normal element mounting (273 frames)
#605 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3490
#606 Element.updateChild
package:flutter/…/widgets/framework.dart:3258
#607 RenderObjectToWidgetElement._rebuild
package:flutter/…/widgets/binding.dart:1174
#608 RenderObjectToWidgetElement.mount
package:flutter/…/widgets/binding.dart:1145
#609 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure>
package:flutter/…/widgets/binding.dart:1087
#610 BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2620
#611 RenderObjectToWidgetAdapter.attachToRenderTree
package:flutter/…/widgets/binding.dart:1086
#612 WidgetsBinding.attachRootWidget
package:flutter/…/widgets/binding.dart:927
#613 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure>
package:flutter/…/widgets/binding.dart:908
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
for (int i; i < recentTransactions.length; i++) {
This is the part causing the Error, since it is stated: "The method '<' was called on null." You have to initalise your int i = 0, so the code should look like
for (int i = 0; i < recentTransactions.length; i++) {