私がやろうとしているのは、リストタイルをタップすると、地図上のその場所(緯度と経度に基づく)に新しいマーカーが生成されることです。
ただし、変数は更新されず、初期値0のみが表示されます。0を削除してホットリロードを開始すると、nullとして出力されます。
class UpdatedStoresListState extends State<UpdatedStoresList> {
double updatedLat = 0;
double updatedLon = 0;
@override
void initState() {
super.initState();
}
ListTileウィジェットをタップすると、新しい緯度と経度が生成されます。
class UpdatedStoresListState extends State<UpdatedStoresList> {
...
children: <Widget>[
GestureDetector(
onTap: () {
setState(() {
updatedLat = snapshot.data[index].latitude;
updatedLon = snapshot.data[index].longitude;
print('Lat: $updatedLat');
// 52.902...
print('Lon: $updatedLon');
// -129.9031...
});
},
child: ListTile(
'Marker'ウィジェットに新しい値を使用する必要があります。これは、別の.dartファイルの別のstatefulwidgetにあります。
class _MainMapState extends State<MainMap> {
...
Marker(
width: 40.0,
height: 40.0,
point: LatLng(UpdatedStoresListState().updatedLat, UpdatedStoresListState().updatedLon),
builder: (ctx) => Container(
child: FlutterLogo(),
),
)
私はあなたが提供できるどんな助けにも本当に感謝します
BLoCを使用してこれを行うことに興味がある場合は、次のようにします。ファイルlat_long_bloc.dartを作成し、そのファイルに次のようにBLoCを作成します。
class LatLongBloc {
StreamController _latLongStreamController = StreamController<LatLong>();
Stream get latLongStream => _latLongStreamController.stream;
dispose(){
_latLongStreamController.close();
}
updateLatLong(LatLng latLong){
_latLongStreamController.sink.add(latLong);
}
}
final latLongBloc = LatLongBloc();
そして、GestureDetectureで、コードを次のように変更します。
GestureDetector(
onTap: () {
updatedLat = snapshot.data[index].latitude;
updatedLon = snapshot.data[index].longitude;
latLongBloc.updateLatLong(LatLng(updatedLat , updatedLon ));
},
child: ListTile(
そして、MarkerをStreamBuilderでラップします。
StreamBuilder(
stream: latLongBloc.latLongStream,
builder: (context, snapshot) {
LatLng latLog = snapshot.data;
return Marker(
width: 40.0,
height: 40.0,
point: LatLng(latLog.lat, latLog.long),
builder: (ctx) => Container(
child: FlutterLogo(),
),
);
},
)
つまり、BLoCのupdateLatLong()を呼び出すたびに、マーカーウィジェットが更新されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加