У меня есть коллекция с именем местоположение в пожарном депо, в нем есть документ с автоматически сгенерированными полями идентификаторов долгота и широта . Я хочу обновить эти два поля, когда когда-либо меняется местоположение. Моя проблема заключается в том, что при изменении местоположения значение добавляется в долгота и широта , но их идентификатор изменился, что означает, что эти поля не обновлялись, вместо обновления добавляются новые. Мой код: Класс модели
class Node{
String longitude;
String latitude;
String id;
Node({this.longitude, this.latitude, this.id});
Node.fromMap(Map<String, dynamic> data, String id):
longitude = data['longitude'],
latitude = data['latitude'],
id=id;
Map<String, dynamic> toMap(){
return {
'longitude':longitude,
'latitude' : latitude
};
}
}
FirestoreService для добавления местоположения в firestore
import 'package:cloud_firestore/cloud_firestore.dart';
import 'node.dart';
class FirestoreService {
static final FirestoreService _firestoreService =
FirestoreService._internal();
Firestore _db = Firestore.instance;
FirestoreService._internal();
factory FirestoreService() {
return _firestoreService;
}
Future<void> addNode(Node node)async{
return await _db.collection('location').add(node.toMap());
}
Future<void> updateNode(Node node){
return _db.collection('location').document(node.id).
updateData(node.toMap());
}
}
В этом классе у меня есть Streame Builder, который выбирает мое местоположение, а также отображает мой длинный и лат в textview
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_realtime_location/services/geolocator_service.dart';
import 'firestore_service.dart';
import 'node.dart';
class MapLocationSendFirestore extends StatefulWidget {
MapLocationSendFirestore({Key key}) : super(key: key);
@override
_MapLocationSendFirestoreState createState() => _MapLocationSendFirestoreState();
}
class _MapLocationSendFirestoreState extends State<MapLocationSendFirestore> {
final GeolocatorService geoService=GeolocatorService();
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<Position>(
stream: geoService.getUserLocation(),
builder: (context, snapshoot){
Node node= Node(longitude: snapshoot.data.longitude.toString(),
latitude: snapshoot.data.latitude.toString());
FirestoreService().addNode(node);
if(!snapshoot.hasData)
{
return Center(child: CircularProgressIndicator());
}
return Center(
child: Text('${snapshoot.data.latitude} and ${snapshoot.data.longitude}'),
);
}),
);
}
}
Изображение моего пожарного магазина