带颜色优化容器
摘要
#框架中添加了一个新的 ColoredBox
widget,并且 Container
widget 进行了优化,如果用户指定了 color
而不是 decoration
,则会使用它。
上下文
#通常情况下,Container
widget 的使用方式如下所示
dart
return Container(color: Colors.red);
以前,这段代码生成的 widget 层次结构使用 BoxDecoration
来实际绘制背景颜色。BoxDecoration
widget 涵盖了除了绘制背景颜色之外的许多其他情况,并且效率不如新的 ColoredBox
widget,后者只绘制背景颜色。
以前,想要根据 widget 树中容器的颜色进行断言的 widget 测试需要找到 BoxDecoration
来实际获取容器的颜色。现在,除非显式地将 BoxDecoration
作为 decoration
属性提供,否则它们可以直接检查 Container
本身的 color
属性。同时,向 Container
提供 color
和 decoration
仍然是一个错误。
迁移指南
#需要修改断言 Container
颜色或期望它创建 BoxDecoration
的测试。
迁移前的代码
dart
testWidgets('Container color', (WidgetTester tester) async {
await tester.pumpWidget(Container(color: Colors.red));
final Container container = tester.widgetList<Container>().first;
expect(container.decoration.color, Colors.red);
// Or, a test may have specifically looked for the BoxDecoration, e.g.:
expect(find.byType(BoxDecoration), findsOneWidget);
});
迁移后的代码
dart
testWidgets('Container color', (WidgetTester tester) async {
await tester.pumpWidget(Container(color: Colors.red));
final Container container = tester.widgetList<Container>().first;
expect(container.color, Colors.red);
// If your test needed to work directly with the BoxDecoration, it should
// instead look for the ColoredBox, e.g.:
expect(find.byType(BoxDecoration), findsNothing);
expect(find.byType(ColoredBox), findsOneWidget);
});
时间线
#包含在版本中:1.15.4
稳定版本:1.17
参考文献
#API 文档
相关问题
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新时间:2024-04-04。 查看源代码 或 报告问题.