flutter 项目中用户出现意外的空值

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

我希望在我的 Flutter 项目中有一个帐户创建过程,以便刚刚注册的新用户可以在不同页面上以干净的方式填写用户变量,而不是直接进入主页。我正在尝试修改 Mitch Koko 项目,他只是让用户在应用程序本身中编辑变量(Twitter 克隆应用程序教程)。我复制了他获取用于访问 bio 变量的用户配置文件的方式。但是,当我在构建小部件中使用它来访问名称变量时,用户仍然为空。我的想法是检查名称变量,看看它是否是我为每个新用户硬编码的“默认”。

在此输入图片描述

这是有问题的代码本身...同样,用户似乎为空。不过,用户 id 变量是正确的。

我一直在调试并尝试以不同的方式访问用户ID。我想不出还有什么可以尝试的。

flutter firebase dart visual-studio-code
1个回答
0
投票

loadUser() 会花费一些时间,但你声明 user 不为空。 将 (user!.name == 'default') 替换为 (user?.name == 'default') 或使用其他方法,例如 future builder 等。

class RegisterOrHomeState extends State<RegisterOrHome> {
  final auth  = AuthService();
  late final databaseProvider = Provider.of<DatabaseProvider>(context, listen: false);

  // user info
  UserProfile? user;
  String currentUserId = AuthService().getCurrentUid();
  // on startup
  @override
  void initState() {

    super.initState();
    // load user info
    loadUser(); 

  }

  Future<void> loadUser() async {
    // get the user profile info
  user = await databaseProvider.userProfile(currentUserId);
  }

  @override
  Widget build(BuildContext context) {
    // Error is here
    // --> loadUser() will take time but you declare user as not null
    // replace (user!.name == 'default') by (user?.name == 'default') or use other method
    // like future builder etc.
    if (user!.name == 'default'){
    return const Create AccountPageOne();
    }else{
    return const HomePage();
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.