Geolocator.getCurrentPosition()がエミュレーターで機能していません。 ただし、実際のデバイスで動作しています。
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class LoadingScreen extends StatefulWidget {
<strong i="6">@override</strong>
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
void getLocation() async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.low,
);
print(position);
}
<strong i="7">@override</strong>
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
getLocation();
},
child: Text('Get Location'),
),
),
);
}
}
これはコードであり、print(position)は緯度と経度を印刷していません。
iOSまたはAndroidでテストしていますか?
ところで、シミュレーター/エミュレーターで位置情報の更新を有効にしていることを確認してください。 これは、シミュレーター/エミュレーターの設定で行うことができます。
また、シミュレーター/エミュレーターはLocationAccuracy.low
で常にうまく機能するとは限りません。これを、より高いレベルに移動してみてください。
私はAndroidエミュレーターに取り組んでいます。 高精度の位置を取得する必要がないので、粗い位置にアクセスするための許可のみを要求しました。 @mvanbeusekomのコメントを見た後、マニフェストに<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
必要な権限を追加した後、 LocationAccuracy,high
を試してみたかったのです。
ただし、その許可を追加した後、低精度と高精度の両方の要求が機能しました。 面白い。
今のところこの問題を閉じます。 AndroidエミュレーターがCOARSE権限でうまく機能しないことは既知の問題です。 これは、COARSEロケーションがセルラーネットワークに基づいて位置を三角測量しようとするためです。セルラーネットワークはエミュレーターでは使用できません。
最も参考になるコメント
私はAndroidエミュレーターに取り組んでいます。 高精度の位置を取得する必要がないので、粗い位置にアクセスするための許可のみを要求しました。 @mvanbeusekomのコメントを見た後、マニフェストに
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
必要な権限を追加した後、LocationAccuracy,high
を試してみたかったのです。ただし、その許可を追加した後、低精度と高精度の両方の要求が機能しました。 面白い。