![](/img/trans.png)
[英]How to modify the state of a StateNotifier Provider from another provider in Riverpod?
[英]Flutter Riverpod/Provider: Setting an initial state for a stateNotifier
所以我想要一個提供者,他的初始 state 將是用戶的位置,這就是我現在擁有的,對嗎?
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/all.dart';
import 'package:location/location.dart';
class MapApiState {
final LocationData userLocation;
MapApiState({@required this.userLocation});
}
class MapNotifier extends StateNotifier<MapApiState> {
static Location _location = Location();
MapNotifier() : super(null) {
_location.getLocation().then((initialState) =>
super.state = MapApiState(userLocation: initialState));
}
}
這是正確的方法嗎? 我現在如何為此聲明全局提供程序變量? super(null) 讓我擔心。 但我不能只放“super(_location.getLocation())”
另外,我應該如何實例化我的全局提供者變量?
好吧,這幾乎取決於您希望如何在應用程序的生命周期中應用它,您可以使用StreamProvider
或FutureProvider
獲取位置,然后將其傳遞給您的StateNotifier
final locationProvider = FutureProvider<LocationData>((ref) {
final Location _location = Location();
return _location.getLocation();
});
final singleDetailDealProvider = StateNotifierProvider<MapNotifier>((ref) {
final location = ref.watch(locationProvider);
return MapNotifier(location.data?.value);
});
class MapNotifier extends StateNotifier<MapApiState> {
MapNotifier(LocationData location) : super(location);
}
這樣,如果您想在其他地方使用該位置,您可以調用 locationProvider 而無需依賴 MapNotifier 的 state
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.