'Flutter _dependants.isEmpty is not true

I have the following error randomly poping in my app after un logged in : enter image description here

It's very random, sometimes in 5 times logging in it will appears 2 times, sometimes I can run the app dozens of times and have nothing.

Here is my main.dart :

void main() async {
  
  WidgetsFlutterBinding.ensureInitialized();
  
  SystemChrome.setEnabledSystemUIMode(
    SystemUiMode.manual,
    overlays: [],
  );

  return runApp(MyApp());
}

class HomePageController {
  var updateHeaderBar;
  var classifyTasks;
}

class MyApp extends StatefulWidget {
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  P3provider _p3provider = P3provider();

  final HomePageController _controller = HomePageController();
  
   @override
  void initState() {
    super.initState();
  }

  authentification() async {
    await _p3provider.authentification();
  }

  getConnectedRessourceData() async {
    await _p3provider.getConnectedRessourceData();
  }

  loadTasks() async {
    await _p3provider.tasks();
    print("longueur taches apres appel : " + ContextManager.tasks.length.toString());
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'beoticPROJECT',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        textTheme: Theme.of(context).textTheme.apply(
              bodyColor: LightColors.kDarkBlue,
              displayColor: LightColors.kDarkBlue,
              fontFamily: 'Poppins'
            ),
      ),
      home: LoginScreen(),
      debugShowCheckedModeBanner: false,
    ); 
  }
}

And here is my login_page.dart (where there is my LoginScreen widget):

P3provider _p3provider = P3provider();

final HomePageController _controller = HomePageController();

Future<bool> authentification(String username, String password) async {
  return await _p3provider.authentification2(username, password);
}

getConnectedRessourceData() async {
  print("getConnectedRessourceData exécuté");
  await _p3provider.getConnectedRessourceData();
}

loadTasks() async {
  print("loadTasks exécuté");
  await _p3provider.tasks();
  print("longueur taches apres appel : " + ContextManager.tasks.length.toString());
}

Future<String> lostPassword(String username) async {
  return await _p3provider.lostPassword(username);
}

class LoginScreen extends StatelessWidget {

  Future<String?> _authUser(LoginData data) async {
    debugPrint('Email: ${data.name}, Mot de passe: ${data.password}');

    var authSuccessful = await authentification(data.name, data.password).then((value) {
      getConnectedRessourceData();
      loadTasks();
    });
    
    print("valeur authSuccessful: " + authSuccessful.toString());

    if (ContextManager.isConnected == false) {
      return 'Le nom d\'utilisateur ou le mot de passe est incorrect';
    } else {
      return null;
    }
  }

  Future<String?> _recoverPassword(String name) async {
    debugPrint('Name: $name');
    var response = await lostPassword(name);
    print("retour fonction : "+response.toString());
    if (response == "1") {
      return null;
    } else {
      return 'L\'utilisateur n\'existe pas';
    }
  }

  @override
  Widget build(BuildContext context) {
    return FlutterLogin(
      theme: LoginTheme(
        titleStyle: TextStyle(
          color: BeoColors.orange,
          fontSize: 38.0
        ),
        primaryColor: BeoColors.darkGreyBlue
      ),
      title: 'beoticPROJECT',
      logo: AssetImage('lib/src/media/img/beo_logo.png'),
      onLogin: _authUser,
      onSubmitAnimationCompleted: () {
        Navigator.of(context).pushReplacement(MaterialPageRoute(
          builder: (context) => HomePage(p3provider: _p3provider, controller: _controller,),
        ));
      },
      onRecoverPassword: _recoverPassword,
    );
  }
}

Any help would be appreciated.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source