无法将函数传递给flutter中的子对象

问题描述 投票:0回答:1

我正在尝试将一个函数传递给 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,
      ),
    );
  }
}
flutter navigation-drawer
1个回答
0
投票

这样做是错误的

onTap: onMemberPressed(1)

因为这会将

onMemberPressed(1)
的结果分配给
onTap
。所以你需要这样做

onTap: ()=> onMemberPressed(1)
© www.soinside.com 2019 - 2024. All rights reserved.