dart Firebase Snapshot.data双Map使用

xriantvc  于 2024-01-04  发布在  其他
关注(0)|答案(1)|浏览(94)

我想在Firebase中创建一个Map,并从那里获取滑块值。但它给出了一个错误。“类型'_Map<String,dynamic>'不是类型强制转换中类型'Map<Double,Double>'的子类型“


的数据

  1. Expanded(
  2. child: StreamBuilder<DocumentSnapshot>(
  3. stream: FirebaseFirestore.instance
  4. .collection("deger").doc("1")
  5. .snapshots(),
  6. builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
  7. final Map<Double, Double> map = snapshot.data!["item"] as Map<Double, Double>;
  8. return VerticalSlider(
  9. min: parameters.minDecibels,
  10. max: parameters.maxDecibels,
  11. value: map as double,
  12. onChanged: band.setGain,
  13. );
  14. }),
  15. ),

字符串
我找不到解决办法。

c7rzv4ha

c7rzv4ha1#

items中的键不是一个数字。它们是像"item1""item2"等字符串。
如果你只想解释其中的数字部分(例如12等),你必须在代码中解析键。
类似于:

  1. snapshot.data!["item"].map((key, value) => MapEntry(int.parse(key.substring(4)), value));

字符串
因此,上面的代码首先从字符串中删除"item"前缀,然后将剩余的转换为数字。
一个完整的例子我tested in DartPad

  1. const item = {
  2. "item1": 1.5,
  3. "item2": 1.5,
  4. "item3": 1.5,
  5. };
  6. void main() {
  7. final updated = item.map((key, value) => MapEntry(int.parse(key.substring(4)), value));
  8. print(updated);
  9. final typed = updated as Map<double,double>;
  10. print(typed);
  11. }

展开查看全部

相关问题