Flutter中PaginatedDataTable2复选框无法勾选的问题求助
PaginatedDataTable2复选框无法勾选的解决办法
你的问题出在这几个核心点:
- 所有行共用同一个
isChecked变量,点任何一行的复选框都会修改这个全局变量,导致状态混乱 - 修改选中状态后没有通知数据源刷新,UI无法同步更新
- DataRow没有绑定选中状态,复选框不知道自己该显示选中还是未选中
修复步骤:
给每条数据添加独立的选中状态
调整数据生成逻辑,让每条数据自带selected字段,确保每行的选中状态互不干扰:final List<Map<String, dynamic>> _data = List.generate( 200, (index) => { "title": "Meyve", "price": " ", "kilo": " ", "selected": false, // 新增选中状态字段 });修改MyData类的核心逻辑
去掉全局的isChecked,改用当前行数据的selected状态,修改后调用notifyListeners()通知数据源刷新UI:class MyData extends DataTableSource { final List<Map<String, dynamic>> _data = List.generate( 200, (index) => { "title": "Meyve", "price": " ", "kilo": " ", "selected": false, }); @override DataRow? getRow(int index) { final rowData = _data[index]; return DataRow( selected: rowData["selected"], // 绑定选中状态到复选框 onSelectChanged: (bool? value) { if (value == null) return; // 更新当前行的选中状态 rowData["selected"] = value; // 通知数据源刷新,触发UI更新 notifyListeners(); }, cells: [ DataCell(Text(rowData["title"])), DataCell(TextFormField( decoration: InputDecoration(label: Text('fiyat')), )), DataCell(TextFormField( decoration: InputDecoration(label: Text('kilo')), )), ]); } // 必须实现DataTableSource的其他必填方法 @override bool get isRowCountApproximate => false; @override int get rowCount => _data.length; @override int get selectedRowCount => _data.where((row) => row["selected"]).length; }在State中管理数据源实例
在main.dart的页面State类里初始化MyData实例,确保状态更新能正确传递到UI:class _YourPageState extends State<YourPage> { late MyData _data; @override void initState() { super.initState(); _data = MyData(); } @override Widget build(BuildContext context) { return Scaffold( // ...其他页面代码 body: Container( child: Padding( padding: const EdgeInsets.fromLTRB(5, 0, 5, 75), child: PaginatedDataTable2( header: const Center(child: Text('Ürünler')), showCheckboxColumn: true, checkboxHorizontalMargin: 10, rowsPerPage: 8, source: _data, columns: [ DataColumn(label: Text('Stok Adı')), DataColumn(label: Text('Price')), DataColumn(label: Text('Price')), ], ), ), ), ); } }
完成以上修改后,每行的复选框就能独立勾选,状态变化也会实时同步到UI上。
内容的提问来源于stack exchange,提问作者ckot
相关产品推荐
相关产品推荐

