【问题标题】:Undefined name user未定义名称用户
【发布时间】:2020-07-22 14:35:01
【问题描述】:

我有 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)));
  }
 ...

为什么没有定义?我想将 user 从 Login() 通过 Homepage() 传递到 Chat()。 提前谢谢你

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

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(),
  ];

【问题讨论】:

  • 我们看不到整个代码。
  • 你能告诉我们你的Chat class是什么样的吗?

标签: flutter dart


【解决方案1】:

这里你想访问其他屏幕中的用户对象,而不是在 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.....

【讨论】:

  • 这个主意不错,但是我该如何设置密码呢? AuthUser.password = user.password 不起作用,可能是出于安全原因
  • 是的,出于安全考虑,但您可以尝试 AuthUser.password = password,您在登录期间从用户那里获取密码
  • 你好,我刚刚回到代码,我在聊天中根本不需要密码变量,我只使用了电子邮件,谢谢你解决了我的问题
【解决方案2】:

改用 Chat(user: widget.user)。

【讨论】:

  • 感谢您的回答,它部分有效,但不适用于我的情况。我更新了问题
【解决方案3】:

当您使用有状态小部件以及从构造函数获取属性时,您需要这样做:

widget.varNameInConstructor

大多数时候它是不需要的,但如果你想将它分配给你自己的 state 中的新变量,你可以在 initState 中进行。

【讨论】:

  • 感谢您的回答,它部分有效,但不适用于我的情况。我更新了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2018-11-19
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多