I have created a provider where I have created a future to get user id from SharedPreferences.
I have created my provider like below
class UserInfoProvider with ChangeNotifier{
late int _userId;
get userID {
return _userId;
}
Future getAndSetUserId() async
{
final prefs = await SharedPreferences.getInstance();
final userEnt = json.decode(prefs.getString('userEnt') ?? '{}');
_userId = userEnt['userId'];
}
}
I have a screen called SilverCommonAppBar
, Where I have tried to get this user Id like below
class SilverCommonAppBar extends StatefulWidget {
const SilverCommonAppBar({
Key? key,
}) : super(key: key);
@override
State<SilverCommonAppBar> createState() => SilverCommonAppBarState();
}
class SilverCommonAppBarState extends State<SilverCommonAppBar> {
late int userId;
bool _isInit = true;
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() {
if(_isInit)
{
Provider.of<UserInfoProvider>(context).getAndSetUserId();
}
_isInit = false;
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
userId = Provider.of<UserInfoProvider>(context).userID;
print(Provider.of<UserInfoProvider>(context).userID);
return Container();
}
}
I'm getting error : Failed assertion: line 1233 pos 12: 'renderObject.child == child': is not true.
Error details :
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY
╞═══════════════════════════════════════════════════════════
The following assertion was thrown building Consumer<AuthProvider>(dependencies:
[_InheritedProviderScope<AuthProvider?>]):
'package:flutter/src/widgets/binding.dart': Failed assertion: line 1233 pos 12:
'renderObject.child
== child': is not true.
Either the assertion indicates an error in the framework itself, or we should provide
substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
Consumer<AuthProvider>
Consumer:file:///Users/alimonkarim/Desktop/project/miles_design_flutter/lib/main.dart:50:10
When the exception was thrown, this was the stack:
#2 RenderObjectToWidgetElement.removeRenderObjectChild
(package:flutter/src/widgets/binding.dart:1233:12)
#3 RenderObjectElement.detachRenderObject
(package:flutter/src/widgets/framework.dart:6005:37)
#4 Element.deactivateChild (package:flutter/src/widgets/framework.dart:3857:11)
#5 Element.updateChild (package:flutter/src/widgets/framework.dart:3540:9)
#6 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4832:16)
#7 Element.rebuild (package:flutter/src/widgets/framework.dart:4529:5)
#8 StatelessElement.update (package:flutter/src/widgets/framework.dart:4883:5)
#9 Element.updateChild (package:flutter/src/widgets/framework.dart:3530:15)
#10 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4832:16)
#11 Element.rebuild (package:flutter/src/widgets/framework.dart:4529:5)
#12 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#13 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:891:21)
#14 RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:370:5)
#15 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#16 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#17 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
(package:flutter/src/scheduler/binding.dart:864:7)
(elided 6 frames from class _AssertionError, class _RawReceivePortImpl, class _Timer, and
dart:async-patch)
══════════════════════════════════════════════════════════════════════════════════════════════════
══
If I make userId static , that means If I remove late and set user id with 88
int userId = 88;
And if I remove below lines , it's working fine
userId = Provider.of<UserInfoProvider>(context).userID;
print(Provider.of<UserInfoProvider>(context).userID);
Why I'm not able to set userId from provider to late userId ?