簡體   English   中英

Flutter Riverpod/Provider:為 stateNotifier 設置初始 state

[英]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())”

另外,我應該如何實例化我的全局提供者變量?

好吧,這幾乎取決於您希望如何在應用程序的生命周期中應用它,您可以使用StreamProviderFutureProvider獲取位置,然后將其傳遞給您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM