【问题标题】:The argument type 'Stream<User>' can't be assigned to the parameter type 'Stream<UserModel>参数类型“Stream<User>”不能分配给参数类型“Stream<UserModel>”
【发布时间】:2021-05-31 07:54:02
【问题描述】:

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

错误:不能将参数类型“Stream”分配给参数类型“Stream”。 “流”来自“飞镖:异步”。 “用户”来自“包: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 或解析它以便它可以接受参数时无法获得正确的“上下文”有关。

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

谢谢你的期待

【问题讨论】:

  • AuthServices().user的类型是什么?是User,对吧?我想说错误信息很清楚。

标签: firebase flutter dart firebase-authentication


【解决方案1】:

当您定义StreamProvider&lt;UserModel&gt; 时,意味着您还必须为其提供UserModel 类型的值。

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

首先,通过命名构造函数将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));,
  ....

【讨论】:

  • 非常感谢您的帮助。但是,如果您允许我,我想问一下您的 fromUser(用户用户)参数来自哪里。这对我来说需要有点清楚。抱歉问这个。提前谢谢你
  • 这是一个你必须创建的命名构造函数。打开此dart.dev/guides/language/language-tour#constructors 并向下滚动以查看有关命名构造函数的说明。这是你问的吗?
猜你喜欢
  • 2021-09-04
  • 2021-08-20
  • 2021-09-26
  • 2023-03-13
  • 1970-01-01
  • 2021-10-28
  • 2021-12-30
  • 2021-10-19
  • 2021-11-05
相关资源
最近更新 更多