首页 > 解决方案 > 未定义名称用户

问题描述

我有 3 个屏幕,登录、主页和聊天。在聊天中我想使用用户,但由于某些原因我收到错误。

尝试将用户传递给聊天时主页类中的错误:'未定义的名称'用户''。

这里的代码示例:

class Login extends StatefulWidget {
  @override
  _LoginState createState() => _LoginState();
}

class _LoginState extends State<Login> {
  String email;
  String password;

  final FirebaseAuth _auth = FirebaseAuth.instance;

  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
  
  Future<String> login(String _email, String _password) async {
    FirebaseUser user = (await _firebaseAuth.signInWithEmailAndPassword(
            email: _email, password: _password))
        .user;
    () =>
        Navigator.push(context, MaterialPageRoute(builder: (context) => Bar(user: user)));
  }
 ...

为什么没有定义?我想通过 Homepage() 将用户从 Login() 传递到 Chat()。先感谢您

编辑: 我注意到它不仅在列表中定义,而且还可以正常工作。我怎样才能将它传递给列表?

class HomePage extends StatefulWidget {
  final FirebaseUser user;

  const HomePage({Key key, this.user}) : super(key:key);

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


class _BarState extends State<HomePage> {

  void test() {
    () =>
        Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => 
Chat(user: widget.user))); < ---- WORKING
  }

  int tabIndex = 0;
  List<Widget> widgetOptions = [
    Match(),
    Chat(user: widget.user), < --- NOT WORKING
    AddBook(),
    Profile(),
  ];

标签: flutterdart

解决方案


在这里,您要访问其他屏幕中的用户对象,而不是在 cconstructor 中传递它,而是创建一个单例类,像这样

class AuthUser {
  static var authUserId;
  static var email;
  static var userName;
  static var role;
  static var companyId;
} 

在登录时设置这样的值,请在这里检查 print(user); 并分别设置值

Future<String> login(String _email, String _password) async {
    FirebaseUser user = (await _firebaseAuth.signInWithEmailAndPassword(
            email: _email, password: _password))
        .user;
    () =>
AuthUser.email = user.email,
AuthUser.email = user.userName,
..........
       ));
  }

访问其他屏幕中的数据,例如 AuthUser.email、AuthUser.userName.....


推荐阅读