未为类型定义运算符“[]”尝试定义运算符“[]”
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();
);
【讨论】:
以上是关于未为类型定义运算符“[]”尝试定义运算符“[]”的主要内容,如果未能解决你的问题,请参考以下文章
减少颤振计数器上的数量,错误:未为“字符串”类型定义运算符“-”
未为类型“Object Function()”定义运算符“[]”
Firebase Firestore 错误:未为“对象”类定义运算符“[]”