在页面之间切换函数 returns null (flutter)

Toggle between pages function returns null (flutter)

我可能尝试了 4 种不同的方法来编写使用切换功能在登录页面和注册页面之间切换的代码,但它总是给我一个错误,但这种类型不会给我代码中的错误它在 运行 控制台中打印一条错误消息“处理手势时抛出了以下 _CastError: 用于空值的空检查运算符

这是我的身份验证文件'authenticate.dart':

class _AuthenticateState extends State<Authenticate> {

  bool showSignIn = false;
  void Function()? toggleView() {
      setState(() => showSignIn = !showSignIn);
  }

  @override
  Widget build(BuildContext context) {
    if(showSignIn) {
      return SignIn(toggleView: toggleView());
    } else {
      return Register(toggleView: toggleView());
    }
  }
}

这是我的 'register.dart' 文件:

class Register extends StatefulWidget {

  final void Function()? toggleView;
  Register({ required this.toggleView});

  @override
  _RegisterState createState() => _RegisterState();
}

class _RegisterState extends State<Register> {

  final AuthService _auth = AuthService();

  //text field state
  String email = '';
  String password = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.brown[100],
      appBar: AppBar(
        backgroundColor: Colors.brown[400],
        elevation: 0,
        title: Text('Sign up to the breakfast club'),
        actions: [
          TextButton.icon(
            icon: Icon(
              Icons.person,
            ),
            label: Text('Sign In'),
            onPressed: () {
              print('Sign in clicked');
              widget.toggleView!();
            },
            style: TextButton.styleFrom(
              primary: Colors.white,
            ),
          ),

而我的'sign_in.dart'和'register.dart'完全一样,除了这部分:

onPressed: () {
              print('Register clicked');
              widget.toggleView!();
            },

我认为这里的问题是您通过函数 toggleView() 发送,这与通过函数本身发送其参数的所有范围都完整不同。你想创建一个回调。

您应该将所有函数定义放在参数中而不命名,例如:

Register(toggleView: () {setState(() => showSignIn = !showSignIn);});

这样 showSignIn 参数的范围就很清楚了,并且引用了 Authentication.dart 文件中那个名字的变量。