我正在尝试重构一些重复的代码,使其更容易更新。第一个明显的候选者是我的项目重复使用scaffold appBar属性,该属性在二十多个位置是相同的(或几乎相同)。所以,我想把appBar变成一个小部件,在这里我可以只编写appBar: FbAppBar(title: 'Fonts'),
,而不是在24个不同的文件中编写5或6行代码。
这是我的第一次尝试:
class FbAppBar extends StatelessWidget implements PreferredSizeWidget {
FbAppBar({
required String title,
super.key,
});
late String title;
@override
Widget build(BuildContext context) {
return AppBar(
systemOverlayStyle: SystemUiOverlayStyle.dark,
foregroundColor: Colors.grey[800],
backgroundColor: Colors.transparent,
elevation: 0,
title: Text(
title.hardcoded,
style: Theme.of(context).textTheme.titleLarge,
),
actions: [],
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
这个^^在title变量上得到了一个“LateInitializationError”。所以,我把它修改成这样:
class FbAppBar extends StatelessWidget implements PreferredSizeWidget {
FbAppBar({
required String title,
super.key,
});
String? title;
@override
Widget build(BuildContext context) {
return AppBar(
systemOverlayStyle: SystemUiOverlayStyle.dark,
foregroundColor: Colors.grey[800],
backgroundColor: Colors.transparent,
elevation: 0,
title: Text(
title!.hardcoded,
style: Theme.of(context).textTheme.titleLarge,
),
actions: [],
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
这让我得到了一个“Null check used on a null value”错误。
显然我错过了一些东西(希望简单)。标题不会为空(实际上),因为我从调用代码中传递了一个字符串(即appBar: FbAppBar(title: 'Fonts'),
),但我不明白为什么这在这里不起作用。
2条答案
按热度按时间s2j5cfk01#
您缺少作业部分(即
this
)来分配title
属性,所以它应该是这样的:jw5wzhpr2#
很可能在应用状态中有一个点title属性为null。此外,
String
没有getterhardcoded
,除非你有一个***自定义扩展***为此创建。您可以将您的
FbAppBar
更改为下面的。