Closed
Description
I am opening this issue based on conversation on #193
final testProvider = StreamProvider.autoDispose((ref) async* {
ref.onDispose(() {
print('testProvider disposed');
});
yield '1';
yield '2';
yield '3';
yield '4';
});
final someFutureProvider = FutureProvider((ref) async {
print('future is called');
return 'something';
});
final test2Provider = FutureProvider.autoDispose((ref) async {
final somefuture = await ref.watch(someFutureProvider.future);
print('somefuture is $somefuture');
final a = await ref.watch(testProvider.last);
print('a is $a');
return 'c';
});
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(
child: Consumer(
builder: (context, watch, child) {
final u = watch(test2Provider);
return u.when(
data: (a) => Text(
"anything",
style: TextStyle(color: Colors.white),
),
loading: () => Text(
'a',
style: TextStyle(color: Colors.white),
),
error: (e, s) => Text(
'b',
style: TextStyle(color: Colors.white),
));
},
),
));
}}
try to switch
final somefuture = await ref.watch(someFutureProvider.future);
print('somefuture is $somefuture');
final a = await ref.watch(testProvider.last);
print('a is $a');
with
final a = await ref.watch(testProvider.last);
print('a is $a');
final somefuture = await ref.watch(someFutureProvider.future);
print('somefuture is $somefuture');
what I found is, if I watch futureProvider first, then I'l' got infinite log like this
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
flutter: somefuture is something
flutter: a is 1
flutter: testProvider disposed
But if I switch the order, it will be okay
here's the log if I watch StreamProvider first
flutter: a is 1
flutter: future is called
flutter: somefuture is something
flutter: a is 4
flutter: somefuture is something