You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用PaginatedDataTable报BookModel无[]实例方法错误求助

报错原因

运行抛出Class 'BookModel' has no instance method '[]',是因为你对BookModel类的实例使用了Map类型的[]键值访问语法。
你的controller.books是List<BookModel>类型,列表里的每个元素都是BookModel类的实例对象,不是可通过['字段名']取值的Map结构,BookModel类本身没定义[]方法,自然会报这个错。
另外现有代码还有三个隐藏问题:一是BookModel的属性全是下划线开头的私有属性,外部无法直接访问;二是没有实现DataTableSource要求的几个必选覆写属性,后续运行也会报错;三是定义的DataColumn数量和DataCell数量不匹配,也会触发组件报错。

修复方案
  1. 调整BookModel类,开放属性访问:
class BookModel{
  // 移除私有属性的下划线前缀,改为公开可访问
  String name;
  String writer;
  String img;
  String price;
  String webSite;

  BookModel(this.name, this.writer, this.img, this.price, this.webSite);
}
  1. 重写MyData类的逻辑,明确类型、修正取值方式、补全必选覆写:
class MyData extends DataTableSource {
  final controller = Get.find<Controller>();
  // 明确指定数据类型为BookModel列表,不要用动态类型
  late final List<BookModel> _data;

  MyData() {
    _data = controller.books;
  }

  @override
  DataRow? getRow(int index) {
    // 加索引边界判断,避免越界崩溃
    if (index >= _data.length) return null;
    final currentBook = _data[index];
    return DataRow(
      cells: [
        // 直接通过对象属性取值,不要用[]的Map语法
        // 注意单元格顺序要和你定义的列顺序一一对应
        DataCell(Text(currentBook.webSite)),
        DataCell(Text(currentBook.name)),
      ],
    );
  }

  // 补全DataTableSource必须覆写的三个属性
  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => _data.length;

  @override
  int get selectedRowCount => 0;
}
  1. 检查PaginatedDataTable的列配置,保证columns数量和每个DataRow的cells数量完全一致:
Widget bodyData() => PaginatedDataTable(
  source: _data,
  columns: const [
    DataColumn(label: Text('WebSite')),
    DataColumn(label: Text('Book Name')),
    // 如果要显示作者列就加对应的DataColumn,不要留cells比columns多的情况
    // DataColumn(label: Text('Writer')),
  ],
  // 其他配置比如rowsPerPage按需添加即可
);
避坑提示
  • 开发时尽量给变量明确指定类型,不要用var声明动态类型的集合,IDE可以提前帮你检出类型错误,不用等到运行才崩溃
  • 自定义类的属性如果需要跨类访问,不要用下划线开头的私有命名,否则会出现访问限制
  • 使用PaginatedDataTable时必须保证DataColumn数量和每一行的DataCell数量完全匹配,否则会抛出组件约束错误

内容的提问来源于stack exchange,提问作者dsfsfsdf rwrrwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:00:49