未为类型定义运算符“[]”尝试定义运算符“[]”

Posted

技术标签:

【中文标题】未为类型定义运算符“[]”尝试定义运算符“[]”【英文标题】:The operator '[]' isn't defined for the type Try defining the operator '[]' 【发布时间】:2021-06-11 12:49:45 【问题描述】:

我正在学习开发,我知道某处有一个简单的错误,但我已经被冻结了几个小时。

我的模特

class MonthModel 
  String name;
  
  List day = [];
  List facture = [];

  MonthModel(this.name);
  MonthModel.fromJson(Map<dynamic, dynamic> map)
  : name = map['payments'] ?? '';

  


my repository:

class RealtimeRepository
  //const RealtimeRepository();

  

  Future<List<MonthModel>> getMonth() async 
    DatabaseReference databaseReference =
    FirebaseDatabase.instance.reference().child("payments");
    var monthSnapshot = await databaseReference.once();
    List<MonthModel> month = [];
    print(month);
    monthSnapshot.value.entries.forEach((e) 
      print(e);
      MonthModel data = MonthModel.fromJson(e.value);
      month.add(data);
      
    );
    print(month.length);
    return month;
  

我的建造者:

class BuildView1 extends StatelessWidget 
  var lists =  RealtimeRepository().getMonth();
  //print(lists);
  @override
  Widget build(BuildContext context) 
    return ListView.builder(
      itemCount: 10,
      itemBuilder: (BuildContext context, int index) 
        return ListTile(title: Text(lists[]);  <--------------PROBLEM
      ,
      
    );
  

我得到'Future的实例而不是List 为什么?

【问题讨论】:

因为列表不是列表而是 Future 并且必须先完成才能显示它。看看FutureBuilder 而您在[] 中缺少index 【参考方案1】:

您必须使用FutureBuilder 才能在Future 完成后显示数据:

class BuildView1 extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return FutureBuilder<List<MonthModel>>(
        future: RealtimeRepository().getMonth(),
        builder: (context, snapshot) 
          // Wait for snapshot to complete
          if (snapshot.connectionState == ConnectionState.done &&
              snapshot.hasData) 
            final list = snapshot.data;
            return ListView.builder(
              itemCount: list.length,
              itemBuilder: (context, index) 
                return ListTile(title: Text(list[index]));
              ,
            );
           else 
            return CircularProgressIndicator();
          
        );
  

【讨论】:

以上是关于未为类型定义运算符“[]”尝试定义运算符“[]”的主要内容,如果未能解决你的问题,请参考以下文章

未为 Future<double> 类型定义运算符 <

减少颤振计数器上的数量,错误:未为“字符串”类型定义运算符“-”

未为类型“Object Function()”定义运算符“[]”

Firebase Firestore 错误:未为“对象”类定义运算符“[]”

Cloud Firestore 错误未为“对象”类型定义运算符“[]”。升级到 2.0.0 后?

Flutter Firestore:未为类“Object?”定义运算符“[]”。 - “对象”来自“飞镖:核心”