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

lsmd5eda  于 12个月前  发布在  Flutter
关注(0)|答案(1)|浏览(125)

我试图在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,
      ),
    );
  }
}

wpcxdonn

wpcxdonn1#

这样做是不对的

onTap: onMemberPressed(1)

字符串
因为这会将onMemberPressed(1)的结果赋值给onTap。所以你需要这样做

onTap: () => onMemberPressed(1)

相关问题