0

所以我想要一个提供者,其初始状态将是用户的位置,这就是我现在拥有的,对吗?

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())”

另外,我应该如何实例化我的全局提供者变量?

4

1 回答 1

2

好吧,这几乎取决于您希望如何在应用程序的生命周期中应用它,您可以使用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 的状态

于 2020-12-06T17:25:14.577 回答