You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错:QueryDocumentSnapshot类型无法转为Usuario模型实例

错误原因

你存储在_usuariosFiltrados列表中的元素是Firestore返回的QueryDocumentSnapshot类型,而EditarUsuario组件要求接收的usuario参数是自定义的Usuario类型,二者类型不匹配所以抛出异常。


最优解决方案(推荐)

调整数据存储逻辑,从获取数据阶段就把快照转换为Usuario对象存储,避免后续反复转换,同时简化筛选逻辑:

  1. 首先修改列表的类型声明,明确存储的是Usuario类型:
// 把原来的泛型动态列表改成指定Usuario类型
List<Usuario> _allResults = [];
List<Usuario> _usuariosFiltrados = [];
  1. 修改Firestore数据获取逻辑,拿到快照后直接转换为Usuario对象存入列表:
getUsuariosSnapShot() async {
  var data = await FirebaseFirestore.instance
      .collection("users")
      .orderBy("username")
      .get();
  setState(() {
    // 遍历所有文档快照,统一转成Usuario对象
    _allResults = data.docs.map((snapshot) => Usuario.fromSnapshot(snapshot)).toList();
  });
  searchResultsList();
  return "complete";
}
  1. 优化筛选逻辑,无需重复调用fromSnapshot转换对象,直接用已转换的Usuario字段判断:
searchResultsList(){
  var showResults = <Usuario>[];
  if(_controller.text.isNotEmpty){
    var busqueda = _controller.text.toLowerCase();
    for (var usuario in _allResults) {
      if (usuario.username.toLowerCase().contains(busqueda) 
          || usuario.about.toLowerCase().contains(busqueda) 
          || usuario.city.toLowerCase().contains(busqueda) 
          || usuario.country.toLowerCase().contains(busqueda) 
          || usuario.email.toLowerCase().contains(busqueda) 
          || usuario.first_name.toLowerCase().contains(busqueda) 
          || usuario.last_name.toLowerCase().contains(busqueda) 
          || usuario.web.toLowerCase().contains(busqueda)){
        showResults.add(usuario);
      }
    }
  } else {
    showResults = List.from(_allResults);
  }
  setState(() {
    _usuariosFiltrados = showResults;
  });
}

修改完成后你原来的跳转传参代码无需改动,_usuariosFiltrados[index]本身就是Usuario类型,不会再出现类型错误。


临时修复方案

如果不想改动现有存储和筛选逻辑,也可以在传参时当场把快照转换为Usuario对象:

onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => EditarUsuario(
      // 手动把快照转成Usuario类型
      usuario: Usuario.fromSnapshot(_usuariosFiltrados[index]),
    ),),
  );
}

内容的提问来源于stack exchange,提问作者mvasco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:54:05