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

时间:2019-11-02 13:59:08

标签: flutter dart

我有一个可在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。因此,感谢您对我做错事的帮助。

2 个答案:

答案 0 :(得分:1)

如果使Calculator构造函数为const会怎样:

class Calculator extends StatefulWidget {
  const Calculator({Key key}) : super(key: key);

  @override
  _CalculatorState createState() => _CalculatorState();
}

答案 1 :(得分:1)

正如我所说,Calculator没有const构造函数。有时您无法为小部件创建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,
  )
];