dart Firebase Snapshot.data双Map使用

xriantvc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

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


的数据

Expanded(
  child: StreamBuilder<DocumentSnapshot>(
      stream: FirebaseFirestore.instance
          .collection("deger").doc("1")
          .snapshots(),
      builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
       final  Map<Double, Double> map = snapshot.data!["item"] as  Map<Double, Double>;
          return VerticalSlider(
            min: parameters.minDecibels,
            max: parameters.maxDecibels,
            value: map as double,
            onChanged: band.setGain,
          );

      }),
),

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

c7rzv4ha

c7rzv4ha1#

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

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

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

const item = {
  "item1": 1.5,
  "item2": 1.5,
  "item3": 1.5,
};

void main() {
  final updated = item.map((key, value) => MapEntry(int.parse(key.substring(4)), value));
  print(updated);
  final typed = updated as Map<double,double>;
  print(typed);
}

相关问题