【发布时间】:2020-04-14 06:28:04
【问题描述】:
我在 Android Studio 中的 stateless 小部件
中收到此警告这个类(或者这个类继承自的一个类)被标记为 '@imutable' 但它的一个或多个实例字段不是最终的
当我想在构建方法之外创建变量时。我该如何摆脱这个警告......还是我做错了什么?
可复制代码
class TestScreen extends StatelessWidget {
final List<Map<String, dynamic>> list = [
{'id': 1, 'name': 'name1'},
{'id': 2, 'name': 'name2'}
];
List<int> _ids = [];
@override
Widget build(BuildContext context) {
_ids.clear();
return Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: list.length,
itemBuilder: (BuildContext context, int index) {
_ids.add(list[index]['id']);
return ListTile(
title: Text(list[index]['name']),
);
}),
),
FlatButton(
child: Text('Print all ids'),
onPressed: () {
print(_ids.toString());
},
)
],
),
);
}
}
平安无事的警告信息
【问题讨论】:
-
不可变的意思是一个初始化一次的类,包括所有的类变量。一旦初始化,就永远无法更改。不可变类保证是线程安全的!在此处更改状态的任何方法都要小心。
-
@MartinStrejc 我刚刚用更好的示例编辑了我的代码,那么在这种情况下你的方法是什么。你会在哪里放置
_ids变量以消除该警告