有没有办法在DART/Ffltter中创建编译时方法?我想创建一个helper方法来返回DataTable标头.旧代码如下所示:

DataTable(
  columns: const [
    DataColumn(label: Row(children: [Icon(Icons.foo1), Text('Bar 1')])),
    DataColumn(label: Row(children: [Icon(Icons.foo2), Text('Bar 2')])),
    DataColumn(label: Row(children: [Icon(Icons.foo3), Text('Bar 3')])),
    DataColumn(label: Row(children: [Icon(Icons.foo4), Text('Bar 4')])),
  ],
  // ...

为了使代码更具可读性和一致性,我创建了一个helper方法:

static Row _generateTableHeader(IconData icon, String text) {
  return Row(children: [Icon(icon), Text(text)],);
}

我现在无法将列数组声明为const.有没有办法将_generateTableHeader方法声明为编译时方法,以便我仍然可以使用coluns数组的常量声明,并且仍然可以从性能提升中获益?

或者我应该改成StatelessWidget分?或者是从Row继承的类?

推荐答案

是的,你应该创建一个StatelessWidget.这样,您就可以利用const构造函数,小部件现在就可以重用了.查看这个answer了解更多关于为什么在创建可重用的窗口小部件树时,类比函数更受欢迎.

class TableHeader extends StatelessWidget {
  const TableHeader(this.icon, this.text, {super.key});

  final IconData icon;
  final String text;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [Icon(icon), Text(text)],
    );
  }
}

Flutter相关问答推荐

无法在主屏幕视图中设置当前日期容器'

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

使用ThemeProvider不在亮模式和暗模式之间切换

Flutter 对齐:不适用于多行文字

SupabaseFlutter 集成问题:无法更新行

video_player在Android上返回401 Unauthorized with Bunny CDN

如何在扩展其他小部件时访问Ref

确保通过在CheckIfFavoriteMovieEvent((event,emit){...})上注册处理程序误差

带有图标抖动的自定义下拉按钮

GitHub Actions工作流secret中的特殊字符未被保留

任务';:app:check DebugDuplicateClasss';的Ffltter Share_plus抛出执行失败

Android工作室Flutter 热重新加载更新后不工作

顶部对齐ListTile的[前导、标题、尾随]小部件

尽管我的 url 链接正确,但 ArgumentError(无效参数:URI 文件中未指定主机:///)错误

Flutter:在 pubspec.yaml 中找不到assets资源

在 Flutter 中,SpinEdit 叫什么?

如何计算 Firestore 集合中的文档数量?

输入处于活动状态时如何设置文本字段标签的样式?

String类型不是Widget类型的子类型?在dart 中

如何在 flutter 中制作这种类型的扩展瓦片