Failed assertion: line 1233 pos 12: 'renderObject.child == child': is not true

160 Views Asked by At

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 ?

0

There are 0 best solutions below