Поставщик Flutter не предоставил обновленное значение в didChangeDependencies - PullRequest
0 голосов
/ 13 января 2020

Не удалось получить последнее значение, используя Provider.of в didChangeDependencies

, обеспечивающий виджет

  int counter = 0;

  @override
  void initState() {
    super.initState();

    FirebaseAuth.instance.onAuthStateChanged.listen((FirebaseUser user) async {
      if (user != null) {

        // Intentionally adding a delay to allow enough time to reproduce the issue
        await Future.delayed(Duration(seconds: 1));

        setState(() {
          counter += 1;
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    debugPrint('providing $counter');

    return Provider.value(
      value: counter,
      child: MaterialApp(/* routes here */),
    );
  }

Затем немедленно перейдите к маршруту потребления до Истекает будущее

Потребляющий виджет

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();

    final provided = Provider.of<int>(context);
    debugPrint('Dep changed $provided');
  }

Результат

I/flutter ( 5074): 0
I/flutter ( 5074): Dep changed 0
I/flutter ( 5074): 1
I/flutter ( 5074): Dep changed 0

Насколько я понимаю, вызов Provider.of в didChangeDependencies должен получить последнее значение. Вместо этого при щелчке на виджете-потребителе снова вызывается didChangeDependencies с правильным предоставленным значением.

Протестировано на провайдере ^ 4.0.1, трепетает стабильный канал

...