StateNotifier.value()でLocatorMixinは使えない
issueの通り.
MultiProviderにあるProvider同士でやり取りしたい場合,.valueを使えばインジェクションはできる
code:dart
class JustRepository {
Future<String> getString() async {
await Future.delayed(const Duration(seconds: 1));
return 'just';
}
}
class AccessRepository {
final JustRepository justRepository;
AccessRepository({this.justRepository});
Future<String> getStringFromDataSource() async {
return await justRepository.getString();
}
}
void main() {
final just = JustRepository();
runApp(MultiProvider(
providers: [
Provider.value(value: just),
Provider(create: (_) => AccessRepository(justRepository: just)),
],
child: MyApp(),
));
}
このシチュエーションをStateNotifierでやった場合,まぁできるけど.valueの方はLocatorMixinのread<T>()が使えなかった.
LocatorMixinの動作原理はStateNotifierProviderのデフォルトコンストラクタで LocatorMixinを検知してProvider.of()を渡していることであり,
.valueのほうではそれが行われないために使えないということだった.
こういうシチュエーションでController間のやり取りをしたい場合は,issueのRemiさんみたいな感じにするかより下位でデータのやり取りをしよう.