我想获取当前用户位置,以根据网址内的纬度/经度更新附近的商店。
但是我不知道如何在两个不同的类之间交互数据。 我想让它像“ AppConfig.latitude = _position.latitude;”一样工作。我尝试了几种方法,包括在stackoverflow和youtube上发现的继承的小部件,但仍然无法使用。肯定是我缺少了什么。
当我使用bloc时,我不知道如何使用bloc更新'AppConfig类'中的数据。可以简单地使用SetState来完成吗?昨天我整天都在搜寻这个问题。请引导我采取正确的方法
class _CurrentLocationState extends State<CurrentLocation> {
Position _position;
Future<void> _initPlatformState() async {
Position position;
try {
final Geolocator geolocator = Geolocator()
...
setState(() {
_position = position;
// print(${_position.latitude})
// 35.9341...
// print(${_position.longitude})
// -117.0912...
<*I want to make it work something like this*>
AppConfig.latitude = _position.latitude;
AppConfig.longitude = _position.longitude;
<*this is how I tried with bloc*>
latLongBloc.getUserLocation(LatLng(position.latitude, position.longitude));
});
<* latitude/longitude need to be updated with a current user location *>
abstract class AppConfig {
static const double latitude = 0;
static const double longitude = 0;
static const List<String> storeName = ['starbucks'];
}
<* I need to use AppConfig.latitude for url in Repository class*>
class Repository {
...
Future<List<Business>> getBusinesses() async {
String webAddress =
"https://api.yelp.com/v3/businesses/search?latitude=${AppConfig.latitude}&longitude=${AppConfig.longitude}&term=${AppConfig.storeName}";
...
}
这是我的bloc.dart文件
class LatLongBloc {
StreamController _getUserLocationStreamController = StreamController<LatLng>();
Stream get getUserLocationStream => _getUserLocationStreamController.stream;
dispose(){
_getUserLocationStreamController.close();
}
getUserLocation(LatLng userLatLong) {
_getUserLocationStreamController.sink.add(userLatLong);
}
}
final latLongBloc = LatLongBloc();
答案 0 :(得分:0)
您想在课程/小部件之间共享状态,对吗?还有其他状态管理模式,例如ScopedModel
或Redux
。每种模式都有其优缺点,但是如果您不了解,则不必使用BLoC。
我建议使用ScopedModel
,因为我认为它很容易理解。您的数据/状态位于中心位置,可以使用ScopedModel
进行访问。如果您不喜欢使用这种方法,请尝试使用Redux
或其他模式:)
希望它对您有帮助:D
您的Glup3