flutter - 如何在flutter中将Widget传递给const Constructor?

标签 flutter dart

我有一个类(class)可以在我的flutter应用程序中存储标题,正文和选项卡图标。

class Destination {
  const Destination(
      {this.title,
      this.icon,
      this.color = Colors.blue,
      this.body: const Center(
        child: Text("Example"),
      )});

  final String title;
  final IconData icon;
  final MaterialColor color;
  final Widget body;
}

我正在尝试使用创建所有选项卡的列表
const List<Destination> allDestinations = <Destination>[
  Destination(title: 'Calculate', icon: Icons.edit, body: const Calculator()),
  Destination(
    title: 'Detail',
    icon: Icons.details,
  )
];

但是它不断显示错误,无论我是否添加const,都必须使用常量值初始化const变量。 Calculator()只是StatefulWidget。因此,感谢您对我做错事的帮助。

最佳答案

如我所说,Calculator没有const构造函数。有时您无法为Widget创建const构造函数。因为小部件必须是immutable class,这可能会破坏您的用途。

在Flutter中,一些小部件具有const constructor,而有些则没有(例如Column,Row,AnimatedContainer)。通常原因是它们是交互式的(内部和外部)。

示例中的另一个技巧是,如果将const放在variable的右侧,即does not need any const的分配位置。因为如果此变量是const,则右侧必须已经是const,因此无需每次都定义const

同样的事情也适用于树,如果父级具有const,子级必须是const,而无需放置另一个const。

在您的示例中,如果Calculator具有const构造函数,则将const放入Calculator不会有任何区别。

因此,它具有与您完全相同的功能:

const List<Destination> allDestinations = <Destination>[
  Destination(title: 'Calculate', icon: Icons.edit, body: Calculator()),
  Destination(
    title: 'Detail',
    icon: Icons.details,
  )
];

关于flutter - 如何在flutter中将Widget传递给const Constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671790/

相关文章:

flutter - 未为静态变量和类中声明的方法定义 Getter

flutter - 导航栏中的过渡

flutter - 只处理特定区域的鼠标事件

ios - Flutter 使用 Facebook 登录

dart - Dart,为什么Iterable <T>可以存储在List <T>变量中?

flutter - Flutter:通过切换和递归调用打破彼此

flutter - 为什么一个函数可能不会在 flutter 中的 initState(){ super.initState()} 中被调用,但如果稍后在同一页面中调用则可以正常工作?

dart - StreamBuilder 快照始终是 ConnectionState.waiting

android - Flutter 中的 rxdart 用法未被识别

flutter - 如何在 Flutter 中导入 Dart IndexedDB 库?