How to call changeNotifier from callback function? Flutter

Viewed 195

I call a function from the build function in my Flutter app. When I call notifyListeners(); from an async callback function I get the following exception:

setState() or markNeedsBuild() called during build.

My Provider:

class TechTaskProvider extends ChangeNotifier {
  ...
  void requestTasks() {
   
    CollectionReference<Map<String, dynamic>> _collection =
        FirebaseFirestore.instance
            .collection('techTasks')
            .doc(_currentTech!.uid)
            .collection('techTasks');

    _collection.get().then((s) {
        _handleResult(s);
        notifyListeners();
    });
}
  

My Trigger widget:

class Trigger extends StatefulWidget {
  const Trigger({Key? key}) : super(key: key);

  @override
  State<Trigger> createState() => _TriggerState();
}

class _TriggerState extends State<Trigger> {
  @override
  Widget build(BuildContext context) {
    MyProvider _myProv = Provider.of<MyProvider>(context);
    //
    if (isFirstRun) {
      //Set the first techincian:
      isFirstRun = false;
      // //Trigger Firestore request:
      _myProv.requestTasks();
    }
    return Page();
  }
}
1 Answers

Something like this should do the trick:

class _TriggerState extends State<Trigger> {
  @override
  Widget build(BuildContext context) {
    MyProvider _myProv = Provider.of<MyProvider>(context);
    //
    if (isFirstRun) {
      //Set the first techincian:
      isFirstRun = false;
      // //Trigger Firestore request:
      WidgetsBinding.instance!.addPostFrameCallback((_) => _myProv.requestTasks());

    }
    return Page();
  }
}
Related