gpt4 book ai didi

firebase - 如何从列表元素中获取单个值

转载 作者:行者123 更新时间:2023-12-04 14:05:34 28 4
gpt4 key购买 nike

我正在尝试将名为“data”的列表中的一个值写入 firestore,该列表有两个元素和两个值,mileage 和 geodistance。目前 firestore 正在将里程和地理距离写入 firestore,而实际上我只需要将里程写入 firestore。目前我正在使用 final mileager = data.elementAt(0);将元素放入 firestore,但是当我只需要元素中的单个值时,它会上传元素中的所有内容。如何从此列表中获取单个值并将其写入 firestore?基本上我使用地理定位器来查看哪个点最近,然后我想将该点的“里程”写入 firestore。下图显示了当前的里程数。这很接近,但我希望它只是一个字段和值,而不是 map 。

enter image description here

import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:geolocator/geolocator.dart';
import 'package:intl/intl.dart';

final _firestore = FirebaseFirestore.instance;

class Geodistancer {
final int? mileage;
final double geodistance;

const Geodistancer({
required this.mileage,
required this.geodistance,
});
}

Future<Position> getLocation() async {
var currentLocation;
try {
currentLocation = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.best);
} catch (e) {
currentLocation = null;
}
return currentLocation;
}

Future<void> backgroundUpdate() async {
Firebase.initializeApp();
FirebaseAuth auth = FirebaseAuth.instance;
Position _fetchedUserLocation = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);

getLocation().then((position) async {
_fetchedUserLocation = position;
final distanceInMiles1 = Geolocator.distanceBetween(
_fetchedUserLocation.latitude, _fetchedUserLocation.longitude,
45.4906999, -122.49727);
final distanceInMiles2 = Geolocator.distanceBetween(
_fetchedUserLocation.latitude, _fetchedUserLocation.longitude, 45.48144,
-122.50433);

List<dynamic> data = [
{"mileage": 1, "geodistance": distanceInMiles1},
{"mileage": 2, "geodistance": distanceInMiles2},
];
data.sort((a, b) => a["geodistance"].compareTo(b["geodistance"]));

User firebaseUser = (auth.currentUser)!;
String uid = firebaseUser.uid;
DateTime dateTime = DateTime.now();
String dateString = DateFormat().format(dateTime);
double latitude = _fetchedUserLocation.latitude.toDouble();
double longitude = _fetchedUserLocation.longitude.toDouble();
final speedInMilesPerHour = _fetchedUserLocation.speed * 2.23694;
final mileager = data.elementAt(0);

_firestore
.collection('locations')
.add({
'Uid': uid,
'DateTime': dateString,
'Mileage': mileager,
'Speed': speedInMilesPerHour.round().toString() + ' MPH',
'position': GeoPoint(latitude, longitude)
});
});
}

最佳答案

改成这样:

final mileager = data.elementAt(0)["mileage"];

因为之前,您正确获取了索引为 0 的元素,但该元素是一个 Map。您想要的是该元素中索引 0 处的键“里程”处的值。该元素应该作为单个字段而不是 map 发布到 firebase,您应该很好。

保持其余代码不变。

关于firebase - 如何从列表元素中获取单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68639301/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com