【问题标题】:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>' --Flutter - RealtimeDatabase -未处理的异常:类型 'List<dynamic>' 不是类型 'Map<dynamic, dynamic>' 的子类型 --Flutter - RealtimeDatabase -
【发布时间】:2021-08-03 05:15:03
【问题描述】:

我正在尝试获取最新添加到数据库的信息。 我在互联网上看到了一种获取信息的方法,

await _lastKeyRef.once().then((DataSnapshot snapshot) {
  if (snapshot.value != null) {
    Map<dynamic, dynamic> _values = snapshot.value;
    _values.forEach((key, value) { 
       .... code ...
    });
 { 
{ 

但它给了我一个错误。

我留下代码,看看是否有人可以帮助我。

Picture of Realtime Database structure

final String _uid = SupermarketApp.sharedPreferences.getString(SupermarketApp.userUID);
final _turnRef = FirebaseDatabase.instance
      .reference()
      .child('cod')
      .child('service');


Future<void> createTurn() async {
    var _lastKeyRef = _turnRef.orderByKey().limitToLast(1);
    DateTime _timeNow = new DateTime.now();
    int _lastNumber;
    int _setNumber;

    await _lastKeyRef.once().then((DataSnapshot snapshot) {
      if (snapshot.value != null) {
        Map<dynamic, dynamic> _values = snapshot.value;
        _values.forEach((key, value) {
          _lastNumber = int.parse(key) + 1;
          _setNumber = value['num'] + 1;
        });

        if (_setNumber > 99) _setNumber = 1;

        _turnRef.child(_lastNumber.toString()).set(
            {'app': true, 'user_id': _uid, 'date': _timeNow.toString(), 'num': _setNumber});
      } else {
        _turnRef
            .child('1')
            .set({'app': true, 'user_id': _uid, 'date': _timeNow.toString(), 'num': 1});
      }
    });
}

Picture of the error

谢谢。

--编辑--

代码很好。 Exeption 是由于在实时数据库中将“1”作为键。我不知道为什么,但是我更改了密钥名称并且它可以工作。

【问题讨论】:

    标签: flutter dart firebase-realtime-database


    【解决方案1】:

    错误是因为snapshot.value 返回一个列表,但您将其读取为Map。

    将代码更新到下面的代码应该可以解决这个问题:

        List<dynamic> _values = snapshot.value;
        _values.forEach((element) {
        int key = _values.indexOf(element)l
        _lastNumber = int.parse(key) + 1;
        _setNumber = element['num'] + 1;
        });
    

    【讨论】:

    • 这确实有效。我不能使用'.key'和'.value',我必须使用'.keys'和'.values',然后给我这个错误:'[ERROR:flutter/lib/ui/ui_dart_state.cc(186)]未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'keys'。'
    • 您好,您可以为您添加的更改添加代码吗?
    • 另外,检查我添加的代码更新,看看它是否有效。
    • 代码不错。 Exeption 是由于在实时数据库中将“1”作为键。我不知道为什么,但是我更改了键名并且它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2020-05-24
    • 2019-09-26
    • 2021-05-21
    • 1970-01-01
    • 2020-11-05
    • 2021-12-29
    相关资源
    最近更新 更多