gpt4 book ai didi

flutter - Theme.of(context) 作为常量

转载 作者:行者123 更新时间:2023-12-03 02:50:43 24 4
gpt4 key购买 nike

我有几个地方有重复的代码,对于BoxDecoration

decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: Theme.of(context).hintColor.withOpacity(0.15),
offset: Offset(0, 3),
blurRadius: 10)
],
),

所以我想将 BoxDecoration 提取到单独的 dart 文件中并重新使用它。
有点像

static const boxDecoration = BoxDecoration(...);

然后使用它

final container = Container(
decoration: boxDecoration
)

但我在一些事情上卡住了:1. 如果我把它放在只包含常量的文件中,我仍然需要访问 context,例如在 Theme.of(context).primaryColor 中,只能从 build(Context) 方法中获取2. 然后,我创建一个新的无状态小部件

import 'package:flutter/material.dart';

class FlutterTemplateStyle extends StatelessWidget {
static var boxDecoration;

@override
Widget build(BuildContext context) {
boxDecoration = BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: Theme.of(context).hintColor.withOpacity(0.15),
offset: Offset(0, 3),
blurRadius: 10)
],
);

return Container();
}
}

并尝试访问 decoration: FlutterTemplateStyle.boxDecoration,但它不起作用。我想这是因为 build 从未被调用过。

我怎样才能实现这种不变的样式?

谢谢

最佳答案

您不能将 constany 方法调用一起使用,因为无法在编译时评估方法 - 这是 const 值的要求。

如果您知道您的 primaryColor 是恒定的,永远不会改变,并且您永远不想动态更 retrofit 饰的颜色,则可以指定不带主题的颜色:颜色:常量颜色(0xfef1d2e1).
否则,你不想使用 const。如果您从不重新分配变量,您可能希望使用 final,但是,如果您需要访问您的 context,这将不起作用。

话虽如此,您可能只想创建一个返回装饰的函数,这样您就可以在多个地方使用它:

BoxDecoration myAwesomeBoxDecoration(BuildContext context) => BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: Theme.of(context).hintColor.withOpacity(0.15),
offset: const Offset(0, 3),
blurRadius: 10,
),
],
);

让我解释一下为什么我认为将 BoxDecoration 设为 constant 的想法是违反直觉的:

装饰的颜色取决于应用的主题,这完全是在运行时创建的。这意味着为了让你的 BoxDecoration 适应 Theme,它不能是 constant 因为它是 adaptive .

关于flutter - Theme.of(context) 作为常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57960695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com