首页 > 解决方案 > 为什么在 firebase 连接期间 int map 操作出现错误?as String' 不是 'int' 类型的子类型

问题描述

在firebase连接期间,我得到一个错误类型'String'不是'int'类型的子类型


class _VeriTabaniState extends State<VeriTabani> {
  @override
  Widget build(BuildContext context) {
    return _buildBody(context, sahteSnapshot);
  }

  Widget _buildBody(BuildContext context, List<Map> snapshot) {
    return ListView(
      padding: EdgeInsets.only(top: 25.0),
      //buildListItem ztn bir liste, children içine alır direk
      children:
          //sahte datalardan gelen herşey için döndüreceğim
          //buildListItem'ı creat method ile oluşturdum
          snapshot
              .map<Widget>((data) => _buildListItem(context, data))
              .toList(),
    );
  }

  _buildListItem(BuildContext context, Map data) {
    //sahtelerden her gelen için yeni bir kayıt üretecek
    final kayitWidget = Kayit.fromMap(data);
    return Padding(
      //biz bunlara tıklarız mıklarız, hangisinin olduğunu anlamak için key
      key: ValueKey(kayitWidget.okulisim),
      padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.2),
      child: Container(
        decoration: BoxDecoration(
            border: Border.all(color: Colors.blueAccent),
            borderRadius: BorderRadius.circular(5.0)),
        child: ListTile(
          title: Text(kayitWidget.okulisim),
          trailing: Text(kayitWidget.sayi.toString()),
          //firebase'e yollayacağız
          onTap: () => {},
        ),
      ),
    );
  }
}

//sahte veriler oluşturalım
final sahteSnapshot = [
  {"okulisim": "Sau", "sayi": "1"},
  {"okulisim": "Metu", "sayi": "2"},
  {"okulisim": "Kou", "sayi": "3"},
  {"okulisim": "Boun", "sayi": "4"},
];

class Kayit {
  String okulisim;
  String sayi;
  DocumentReference reference;

  //kayit icin bir constructer oluşturalım
  //fb icin çok kullanılan bir yapısı var bunların
  Kayit.fromMap(Map<String, dynamic> map, {this.reference})
      : assert(map["okulisim"] != null),
        assert(map["sayi"] != null),
        okulisim = map["okulisim"],
        sayi = map["sayi"];

  //dbdeki anlık değisimler
  Kayit.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data(), reference: snapshot.reference);

  @override
  String toString() => "Kayıt<$okulisim : $sayi>";
}

实际上是我得到 int String 错误的地方:

Kayit.fromMap(Map<String, dynamic> map, {this.reference})
      : assert(map["okulisim"] != null),
        assert(map["sayi"] != null),
        okulisim = map["okulisim"],
        sayi = map["sayi"];

当我将变量 int 设置为 String 时它会修复

class Kayit {
  String okulisim;
  String sayi;
  DocumentReference reference;

  //kayit icin bir constructer oluşturalım
  //fb icin çok kullanılan bir yapısı var bunların
  Kayit.fromMap(Map<String, dynamic> map, {this.reference})
      : assert(map["okulisim"] != null),
        assert(map["sayi"] != null),
        okulisim = map["okulisim"],
        sayi = map["sayi"];

如何?

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


String' 不是 'int' 类型的子类型

您正在String从数据库中检索 a 并将其分配给 a int,因此您会收到上述错误。要解决此问题,请将变量更改为类型String或将其保存int在数据库中:

final sahteSnapshot = [
  {"okulisim": "Sau", "sayi": 1},
  {"okulisim": "Metu", "sayi": 2},
  {"okulisim": "Kou", "sayi": 3},
  {"okulisim": "Boun", "sayi": 4},
];

推荐阅读