FutureBuilder snapshot returning null, possible json parsing failure - flutter

I am trying to render a list based on an API response. Here is the model :
class ProductModel {
final int id;
final String name;
final String nameBn;
final String price;
final String priceBn;
final bool oldPrice;
final String oldPriceVal;
final String oldPriceValBn;
final List<ImageBunny> image;
final String slug;
final String shortDescriptionOpt;
final String shortDescription;
final String shortDescriptionBn;
final int maxItem;
final bool size;
final List<String> sizeList;
final bool color;
final List<String> colorList;
final bool unit;
final String unitBn;
final String unitEn;
final int ranking;
ProductModel(
{this.id,
this.name,
this.nameBn,
this.price,
this.priceBn,
this.oldPrice,
this.oldPriceVal,
this.oldPriceValBn,
this.image,
this.slug,
this.shortDescriptionOpt,
this.shortDescription,
this.shortDescriptionBn,
this.maxItem,
this.color,
this.colorList,
this.ranking,
this.size,
this.sizeList,
this.unit,
this.unitBn,
this.unitEn
});
}
and the listview component:
class Products extends StatelessWidget {
#override
Widget build(BuildContext context) {
return _buildProductsListPage();
}
_buildProductsListPage() {
return Container(
color: Colors.grey[100],
child: FutureBuilder<List<ProductModel>>(
future: _parseProductsFromResponse(),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.active:
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.none:
return Center(child: Text("Unable to connect right now"));
case ConnectionState.done:
return ListView.builder(
itemCount: 18,
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemBuilder: (context, index) {
print(index);
print(snapshot.data);
return ProductComponent(
product1: snapshot.data[index - 1],
product2: snapshot.data[index],
);
},
);
}
},
),
);
}
Future<dynamic> _getProducts() async {
var response = await http.get('https://example.com/api/featured/').catchError(
(error) {
return false;
},
);
return json.decode(response.body);
}
Future<List<ProductModel>> _parseProductsFromResponse() async {
List<ProductModel> productsList = <ProductModel>[];
var dataFromResponse = await _getProducts();
dataFromResponse['results'].forEach(
(newProduct) {
//print(newProduct);
//parse the product's images
List<ImageBunny> imagesOfProductList = [];
print("hit 1");
newProduct["image"].forEach(
(newImage) {
print("hit 2");
imagesOfProductList.add(
new ImageBunny(
imageMobileFeatureList: newImage["imageMobileFeatureList"],
imageMobileProductDetails: newImage["imageMobileProductDetails"],
),
);
},
);
// parse Size List
List<String> sizeList = [];
newProduct["size_list"].forEach((value) {
print("hit 3");
sizeList.add(value);
});
print("hit 4");
// parse Color List
List<String> colorList = [];
newProduct["color_list"].forEach((value) {
print("hit 5");
var color = value.toString();
var colorVal = color.substring(1, color.length);
colorList.add(colorVal);
});
print("hit 6");
//parse new product's details
ProductModel product = ProductModel(
id: int.tryParse(newProduct["id"]),
name: newProduct["name"].toString(),
nameBn: newProduct["name_bn"].toString(),
price: newProduct["price"].toString(),
priceBn: newProduct["price_bn"].toString(),
oldPrice: newProduct["old_price"],
oldPriceVal: newProduct["old_price_val"] != null? newProduct["old_price_val"].toString(): "",
oldPriceValBn: newProduct["old_price_val_bn"] != null? newProduct["old_price_val_bn"].toString(): "",
slug: newProduct["slug"].toString(),
shortDescriptionOpt: newProduct["short_description_opt"],
shortDescription: newProduct["short_description"].toString(),
shortDescriptionBn: newProduct["short_description_bn"].toString(),
maxItem: newProduct["max_item"],
size: newProduct["size"],
sizeList: sizeList,
color: newProduct["color"],
colorList: colorList,
unit: newProduct["unit"],
unitBn: newProduct["unit_bn"] != null? newProduct["unit_bn"].toString() : "",
unitEn: newProduct["unit_en"] != null? newProduct["unit_en"].toString() : "",
ranking: newProduct["ranking"],
image: imagesOfProductList,
);
print("hit 7");
productsList.add(product);
},
);
print(productsList);
return productsList;
}
}
and the terminal output:
I/flutter (14968): hit 1
I/flutter (14968): hit 2
I/flutter (14968): hit 4
I/flutter (14968): hit 6
I/flutter (14968): 0
I/flutter (14968): null
I/flutter (14968): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (14968): The following NoSuchMethodError was thrown building:
I/flutter (14968): The method '[]' was called on null.
I/flutter (14968): Receiver: null
I/flutter (14968): Tried calling: [](-1)
I/flutter (14968):
I/flutter (14968): When the exception was thrown, this was the stack:
I/flutter (14968): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
I/flutter (14968): #1 Products._buildProductsListPage.<anonymous closure>.<anonymous closure> (package:eknimishei/partials/products.dart:73:46)
I/flutter (14968): #2 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:398:15)
I/flutter (14968): #3 SliverMultiBoxAdaptorElement._build.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1006:67)
I/flutter (14968): #4 _HashMap.putIfAbsent (dart:collection-patch/collection_patch.dart:137:29)
I/flutter (14968): #5 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1006:26)
I/flutter (14968): #6 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1019:55)
I/flutter (14968): #7 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2258:19)
I/flutter (14968): #8 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1012:11)
I/flutter (14968): #9 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:275:23)
I/flutter (14968): #10 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1740:58)
I/flutter (14968): #11 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:797:15)
I/flutter (14968): #12 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1740:13)
I/flutter (14968): #13 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:264:5)
I/flutter (14968): #14 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:348:5)
I/flutter (14968): #15 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:78:12)
I/flutter (14968): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11)
I/flutter (14968): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #19 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:407:13)
I/flutter (14968): #20 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1651:12)
I/flutter (14968): #21 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1614:20)
I/flutter (14968): #22 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #23 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #24 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #25 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #26 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #27 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #28 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #29 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #30 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #31 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #32 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #33 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #34 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #35 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #36 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #37 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #38 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #39 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #40 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #41 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #42 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #43 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #44 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #45 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter (14968): #46 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #47 RenderSliverList.performLayout.advance (package:flutter/src/rendering/sliver_list.dart:201:17)
I/flutter (14968): #48 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:234:19)
I/flutter (14968): #49 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #50 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11)
I/flutter (14968): #51 RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
I/flutter (14968): #52 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:407:13)
I/flutter (14968): #53 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1322:12)
I/flutter (14968): #54 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1240:20)
I/flutter (14968): #55 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1519:7)
I/flutter (14968): #56 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:766:18)
I/flutter (14968): #57 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:347:19)
I/flutter (14968): #58 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:701:13)
I/flutter (14968): #59 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
I/flutter (14968): #60 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
I/flutter (14968): #61 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
I/flutter (14968): #62 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:864:5)
I/flutter (14968): #66 _invoke (dart:ui/hooks.dart:219:10)
I/flutter (14968): #67 _drawFrame (dart:ui/hooks.dart:178:3)
I/flutter (14968): (elided 3 frames from package dart:async)
I/flutter (14968): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (14968): 1
I/flutter (14968): null
I/flutter (14968): Another exception was thrown: NoSuchMethodError: The method '[]' was called on null.
I/flutter (14968): 2
I/flutter (14968): null
I/flutter (14968): Another exception was thrown: NoSuchMethodError: The method '[]' was called on null.
So from terminal output , we can see its not printing hit 7 , so something wrong with json parsing.

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.

Running Palette Generator (by flutter team) inside an async function freezes the app for a bit

I was trying to use the palette generator plugin by flutter team. However, when I run the function, the UI freezes for two seconds or three. Here is how im trying to use it:
void _generateColorPalette(BuildContext context) async {
try {
if (this.imageData == null) {
return;
}
setState(() {
isLoading = true;
});
final PaletteGenerator _temp = await PaletteGenerator.fromImageProvider(
MemoryImage(imageData as Uint8List));
setState(() {
isLoading = false;
pallete = _temp.colors.toList();
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Pallete Generated!'),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
),
),
);
} catch (e) {
setState(() {
isLoading = false;
});
print('Error occured while generating the palette: $e');
}
}
I also tried using it in a compute function but to no avail cause i get this error:
Restarted application in 2,281ms.
I/Timeline( 4948): Timeline: Activity_launch_request time:96984061
W/Activity( 4948): Slow Operation: Activity com.example.glitter/.MainActivity onActivityResult took 187ms
I/flutter ( 4948): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 4948): The following _CastError was thrown while resolving an image:
I/flutter ( 4948): Null check operator used on a null value
I/flutter ( 4948):
I/flutter ( 4948): When the exception was thrown, this was the stack:
I/flutter ( 4948): #0 ImageProvider.resolveStreamForKey
I/flutter ( 4948): #1 ImageProvider.resolve.<anonymous closure>
I/flutter ( 4948): #2 ImageProvider._createErrorHandlerAndKey.<anonymous closure>.<anonymous closure>
I/flutter ( 4948): #3 SynchronousFuture.then
I/flutter ( 4948): #4 ImageProvider._createErrorHandlerAndKey.<anonymous closure>
I/flutter ( 4948): #8 ImageProvider._createErrorHandlerAndKey
I/flutter ( 4948): #9 ImageProvider.resolve
I/flutter ( 4948): #10 PaletteGenerator.fromImageProvider
I/flutter ( 4948): #11 _ImageScreenState.generatePallete
I/flutter ( 4948): #12 _IsolateConfiguration.apply
I/flutter ( 4948): #13 _spawn.<anonymous closure>
I/flutter ( 4948): #14 _spawn.<anonymous closure>
I/flutter ( 4948): #15 Timeline.timeSync (dart:developer/timeline.dart:163:22)
I/flutter ( 4948): #16 _spawn
I/flutter ( 4948): #17 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:286:17)
I/flutter ( 4948): (elided 4 frames from class _RawReceivePortImpl and dart:async)
I/flutter ( 4948):
I/flutter ( 4948): Image provider: MemoryImage(Uint8List#e9679, scale: 1.0)
I/flutter ( 4948): Image configuration: ImageConfiguration(devicePixelRatio: 1.0)
I/flutter ( 4948): Image key: MemoryImage(Uint8List#e9679, scale: 1.0)
I/flutter ( 4948): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 4948): Error occured: TimeoutException: Timeout occurred trying to load from MemoryImage(Uint8List#e9679, scale: 1.0)
Reloaded 1 of 949 libraries in 1,408ms.
I/flutter ( 4948): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 4948): The following _CastError was thrown while resolving an image:
I/flutter ( 4948): Null check operator used on a null value
I/flutter ( 4948):
I/flutter ( 4948): When the exception was thrown, this was the stack:
I/flutter ( 4948): #0 ImageProvider.resolveStreamForKey
I/flutter ( 4948): #1 ImageProvider.resolve.<anonymous closure>
I/flutter ( 4948): #2 ImageProvider._createErrorHandlerAndKey.<anonymous closure>.<anonymous closure>
I/flutter ( 4948): #3 SynchronousFuture.then
I/flutter ( 4948): #4 ImageProvider._createErrorHandlerAndKey.<anonymous closure>
I/flutter ( 4948): #8 ImageProvider._createErrorHandlerAndKey
I/flutter ( 4948): #9 ImageProvider.resolve
I/flutter ( 4948): #10 PaletteGenerator.fromImageProvider
I/flutter ( 4948): #11 _ImageScreenState.generatePallete
I/flutter ( 4948): #12 _IsolateConfiguration.apply
I/flutter ( 4948): #13 _spawn.<anonymous closure>
I/flutter ( 4948): #14 _spawn.<anonymous closure>
I/flutter ( 4948): #15 Timeline.timeSync (dart:developer/timeline.dart:163:22)
I/flutter ( 4948): #16 _spawn
I/flutter ( 4948): #17 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:286:17)
I/flutter ( 4948): (elided 4 frames from class _RawReceivePortImpl and dart:async)
I/flutter ( 4948):
I/flutter ( 4948): Image provider: MemoryImage(Uint8List#53605, scale: 1.0)
I/flutter ( 4948): Image configuration: ImageConfiguration(devicePixelRatio: 1.0)
I/flutter ( 4948): Image key: MemoryImage(Uint8List#53605, scale: 1.0)
I/flutter ( 4948): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 4948): Error occured: TimeoutException: Timeout occurred trying to load from MemoryImage(Uint8List#53605, scale: 1.0)
Reloaded 2 of 949 libraries in 1,273ms.
Heres how I was trying to use it in isolate:
void _generateColorPalette(BuildContext context) async {
try {
if (this.imageData == null) {
return;
}
setState(() {
isLoading = true;
});
// final PaletteGenerator _temp = await PaletteGenerator.fromImageProvider(
// MemoryImage(imageData as Uint8List));
final List<Color>? _temp =
await compute(generatePalette, imageData as Uint8List);
if (_temp == null) {
return;
}
setState(() {
isLoading = false;
// pallete = _temp.colors.toList();
pallete = _temp;
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Pallete Generated!'),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
),
),
);
} catch (e) {
setState(() {
isLoading = false;
});
print('Error occured while generating the palette: $e');
}
}
and the isolated function:
Future<List<Color>?> generatePalette(Uint8List _image) async {
try {
final PaletteGenerator _generator =
await PaletteGenerator.fromImageProvider(MemoryImage(_image));
return _generator.colors.toList();
} catch (e) {
print('Error occured while generating palette in the isolate: $e');
}
}
Any ideas on what might be missing?

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