参数类型 'Stream<User>' 不能分配给参数类型 'Stream<UserModel>

时间:2021-05-31 07:54:02

标签: firebase flutter dart firebase-authentication

我正在 Flutter 中开发一个应用程序,这是我的新手,但我正在取得进展。但是,我遇到了以下错误:

错误:无法将参数类型“Stream”分配给参数类型“Stream”。 'Stream' 来自 'dart:async'。 “用户”来自“包:firebase_auth/firebase_auth.dart” 值:AuthServices().user,

下面是我的ma​​in.dart代码

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamProvider<UserModel>.value(
        value: AuthServices().user,
        child: MaterialApp(
          home: WelcomeScreen(),
          routes: {
            WelcomeScreen.id: (context) => WelcomeScreen(),
            LoginScreen.id: (context) => LoginScreen(),
            RegistrationScreen.id: (context) => RegistrationScreen(),
            ModuleScreen.id: (context) => ModuleScreen(),
            LectureListScreen.id: (context) => LectureListScreen(),
            SettingsScreen.id: (context) => SettingsScreen(),
            ResetPasswordScreen.id: (context) => ResetPasswordScreen(),
            ChangePasswordScreen.id: (context) => ChangePasswordScreen(),
            ChangeEmailScreen.id: (context) => ChangeEmailScreen(),
            PracticalListScreen.id: (context) => PracticalListScreen(),
            TestingListScreen.id: (context) => TestingListScreen(),
            TestScreen.id: (context) => TestScreen(),
          },
        ));
  }
}

这是我的UserModel.dart代码

class UserModel {
  final String uid;
  final bool isAnonymous;
  UserModel({this.uid, this.isAnonymous});
}

class UserData {
  final String uid;
  final String email;
  final String firstName;
  final String patronymic;
  final String lastName;
  final String studentID;

  UserData(
      {this.uid,
      this.email,
      this.firstName,
      this.patronymic,
      this.lastName,
      this.studentID});
}

我已经尝试了所有可能的方法,也在网上查看过,但找不到问题所在。但是,我认为这与我在调用 Authservices 或解析它以便它可以接受参数时无法获得正确的“上下文”有关。

在这种情况下通过指出我做错了什么以及我需要做什么来解决这个问题的任何帮助将不胜感激。

谢谢您的期待

1 个答案:

答案 0 :(得分:0)

当您定义 StreamProvider<UserModel> 时,这意味着您还必须为其提供一个 UserModel 类型的值。

但是,这个 UserModel 是您自己的类,而您提供的 valueAuthServices().user,它的类型是 Stream<User> 而不是 Stream<UserModel>

首先,通过命名构造函数将 User 转换为 UserModel,如下所示,

class UserModel {
  ....
  
  UserModel.fromUser(User user): UserModel(/* copy data from User into your UserModel */);

那就这样用吧,

StreamProvider<UserModel>.value(
  value: AuthServices().user.map<UserModel>((e) => UserModel.fromUser(e));,
  ....