我正在尝试将一个函数传递给 Flutter 中的子 wisget。子部件应通过此函数返回按下按钮的索引。
子窗口小部件是一个侧面菜单(抽屉),根据选择的菜单,父窗口小部件中的页面应该发生变化。但是,问题是我无法调用传递给子窗口小部件的方法,因为一旦调用它就会出现以下错误:
Expected a value of type '() => void', but got one of type 'Null'
重要的是,我想处理父窗口小部件中的值并从子窗口中检索它。
家长小工具
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
exit(0);
},
child: Scaffold(
drawer: SideMenu(
onMemberPressed: (int value) {
// onMemberPressed(value);
print(value);
},
),
),
);
}
子部件(抽屉):
class SideMenu extends StatelessWidget {
final Function(int) onMemberPressed;
const SideMenu({
super.key,
required this.onMemberPressed,
});
@override
Widget build(BuildContext context) {
return Drawer(
elevation: 10,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topRight: Radius.circular(0),
bottomRight: Radius.circular(0),
),
),
child: SingleChildScrollView(
child: Column(children: [
DrawerHeader(
padding: EdgeInsets.zero,
child: Image.asset("lib/images/logo.png",),
),
//Anzeige der Mitglieder und ein widget zum hinzufügen von Mitgliedern
DrawerListTile(title: "Dashboard", icon: Icons.dashboard, onTap: () {}),
//Anzeige der Mitglieder und ein widget zum hinzufügen von Mitgliedern
DrawerListTile(title: "Member", icon: Icons.group, onTap: onMemberPressed(1)),
//Anzeige der Teams und ein widget zum hinzufügen von Teams
DrawerListTile(title: "Teams", icon: Icons.groups, onTap: () {}),
//Anzeige der User und ein widget zum hinzufügen von admins und Mdoeratoren
DrawerListTile(title: "User", icon: Icons.person, onTap: () {}),
//Anzeige des eigenen Nutzers um den Verein zu verlassen
DrawerListTile(
title: "Comming Soon", icon: Icons.block, onTap: () {}),
])),
);
}
}
class DrawerListTile extends StatelessWidget {
const DrawerListTile({
super.key,
required this.title,
required this.icon,
required this.onTap,
});
final String title;
final IconData icon;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return ListTile(
onTap: onTap,
horizontalTitleGap: 0,
leading: Icon(
icon,
color: Colors.white,
size: 16,
),
title: Text(
title,
style: const TextStyle(
color: Colors.white,
),
textAlign: TextAlign.center,
),
);
}
}
这样做是错误的
onTap: onMemberPressed(1)
因为这会将
onMemberPressed(1)
的结果分配给 onTap
。所以你需要这样做
onTap: ()=> onMemberPressed(1)