我试图在Flutter中传递一个函数给子控件。子控件应该通过这个函数返回按下按钮的索引。
子部件是一个侧菜单(抽屉),根据选择的菜单,父部件中的页面应该会改变。然而,问题是我不能调用我传递给子部件的方法,因为我一调用它就会发生以下错误:Expected a value of type '() => void', but got one of type 'Null'
重要的是,我想处理父控件中的值并从子控件中检索它。
父Widget
@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,
),
);
}
}
型
1条答案
按热度按时间wpcxdonn1#
这样做是不对的
字符串
因为这会将
onMemberPressed(1)
的结果赋值给onTap
。所以你需要这样做型