Не удалось получить последнее значение, используя 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, трепетает стабильный канал