flutter - 如何更改 Flutter gridview.count 复选框列表的状态?
问题描述
我使用颤振 gridview.count 生成了一个复选框列表。现在我想分别更改每个复选框的状态。
你能告诉我如何更改复选框的值吗
网格视图
child: new GridView.count(
crossAxisCount: 2,
shrinkWrap: true,
childAspectRatio: 8.0,
children:
List.generate(pllistdata.length, (index) {
return Pldata(pllistdata[index], index);
}),
),
返回的小部件
Card Pldata(String plname, int id) {
return Card(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
'$plname',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black54,
fontSize: 16.0),
),
CircularCheckBox(
value: pl_status,
materialTapTargetSize: MaterialTapTargetSize.padded,
onChanged: (x) {
setState(() {
prefs.setStringList('PL', sflist);
});
},
activeColor: Colors.red[800],
inactiveColor: Colors.grey,
)
],
),
),
);
}
解决方案
将您的 Pldata 卡小部件更改为有状态类并在其构造函数中传递必要的值。此外,如果您已经有 pllistdata 列表,那么在使用 builder 构建 gridview 时会很好。我修改了你的代码。检查并查看它是否适合您。
child: GridView.builder(
itemCount: pllistdata.length,
shrinkWrap: true,
itemBuilder: (context, index) {
return Pldata(pllistdata[index], index);
},
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
),
并更改了有状态的 pldata
class Pldata extends StatefulWidget {
final String plname;
final int id;
Pldata(this.plname, this.id);
@override
_PldataState createState() => _PldataState();
}
class _PldataState extends State<Pldata> {
bool pl_status = false;
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
'${widget.plname}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black54,
fontSize: 16.0),
),
Checkbox(
onChanged: (x) {
setState(() {
pl_status = !pl_status;
// prefs.setStringList('PL', sflist);
// you can pass prefs via constructor or initialize in
// init
});
},
activeColor: Colors.red[800],
value: pl_status,
)
],
),
),
);
}
}
推荐阅读
- spring-boot - spring cloud stream kafka binder 可以允许/拒绝特定异常的重试吗?
- android - Robolectric 4.3.1 失败并显示消息:Android 29 需要 Java 9(具有 Java 1)
- c++ - 我需要我的子平方矩阵求和程序来输出最大平方的总和,但它正在寻找最大矩形的总和
- android - 更新函数内的文本视图
- android - 如何使用 MIT App Inventor 访问 websocket?
- c++ - std::vector 构造函数中奇怪的额外括号对?
- python - 如何在 python/pandas 中将一些值从一列转移到另一列?
- c# - 如何创建多级 json 并将其作为 Web 请求传递?
- android - 如何通过 MediaStore Uri 从 Documents 文件夹中删除 PDF 文件
- ios - BehaviorRelay 未在调用时更新集合视图中的视图。迅速