我想在flutter中创建一个应用程序页面,当我在街上走动时,gps的经度和纬度值会不断更新,就像谷歌Map一样。
我在代码中导入了以下库。
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:geolocator/geolocator.dart';
import 'dart:async';
接下来我创建了LocationPageWidget的基本框架
class LocationPage extends ConsumerWidget {
String longitude = "";
String latitude = "";
@override
Widget build(BuildContext context, WidgetRef ref) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Longitude:: $longitude"),
Text("Latitude:: $latitude"),
],
))));
}
}
我向LocationPage添加了一个构造函数,并将以下代码
LocationPage() {
final LocationSettings locationSettings = LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 100,
);
StreamSubscription<Position> positionStream =
Geolocator.getPositionStream(locationSettings: locationSettings)
.listen((Position? position) {
longitude = position!.longitude.toString();
latitude = position.latitude.toString();
});
}
我知道我做错了什么,但是我不知道怎么做!!我尝试了很多其他的方法来使用riverpod,但是都失败了。我知道Geolocator.getPositionStream
返回一个Stream<Position>
,我不知道下一步该怎么做!
以下是指向地理定位器包https://pub.dev/packages/geolocator的链接
1条答案
按热度按时间aor9mmx11#
您应该将StreamSubscription代码移出构造函数,放入LocationPage小部件的initState方法中,这样可以确保仅在第一次创建小部件时设置流,而不是每次重建小部件时都设置流。
当您在流中接收到新的位置时,还需要设置longitude和latitude变量的状态,以便小部件可以使用新的值重新构建。
下面是一个如何实现此功能的示例:
这应该对你有用,如果有用就告诉我!