我正在尝试制作一个自定义应用程序栏,我发现在无状态小部件中实现preferredSizeWidget会使其工作并且使其工作,但由于某种原因,我的自定义应用程序栏之一没有被脚手架接受,并出现错误:
参数类型“Widget”无法分配给参数类型“PreferredSizeWidget?”。
这是navigation.dart:
Scaffold(
appBar: [
const HomeAppBar(),
const AccountAppBar(),
const SettingsAppBar(),
][pageIndex],
body: ...
);
HomeAppBar() 和 SettingsAppBar() 被接受,没有问题,但 AccountAppBar: 出现错误
这是所有 3 个 appBar 小部件的实现:
class AccountAppBar extends StatelessWidget implements PreferredSizeWidget {
const AccountAppBar({super.key});
@override
Widget build(BuildContext context) {
return const Placeholder();
}
@override
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
}
出于某种原因,AccountAppBar() 只被接受为有状态小部件,不会导致任何问题
当我测试该代码时,它显示整个列表上的错误,而不仅仅是
AccountAppBar()
。也许您的其他应用程序栏是有状态的?在这种情况下,我猜测正在发生的事情是两种不同类型的小部件被类型提升到它们最明显的共同祖先(类型“Widget”)。
试一试:
appBar: <PreferredSizeWidget>[
const HomeAppBar(),
const AccountAppBar(),
const SettingsAppBar(),
][pageIndex],
这将显式键入列表,而不依赖于分析器的推理系统。