参数类型 'Stream<MyUser?>' 无法分配给参数类型 'Stream<MyUser?>?'

The argument type 'Stream<MyUser?>' can't be assigned to the parameter type 'Stream<MyUser?>?'

我正在尝试在 Whosebug this playlist. But, it's kind of outdated so I'm trying to keeping up with today. I'm a totally beginner. I read 的帮助下创建一个用户系统,但我跟不上。这是它给出的错误:

The argument type 'Stream<MyUser?>' can't be assigned to the parameter type 'Stream<MyUser?>?'.

这里是 main.dart:(具体错误就在“值:AuthService().user”行中。“AuthService().user”部分是红色下划线。 )

import 'package:flutter/material.dart';
import 'package:unistuff_main/screens/wrapper.dart';
import 'package:provider/provider.dart';
import 'package:unistuff_main/services/auth.dart';
import 'package:unistuff_main/models/myuser.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return StreamProvider<MyUser?>.value(
      initialData: null,
      value: AuthService().user,
      child: MaterialApp(
        home: Wrapper(),
      ),
    );
  }
}

这是我的 myuser.dart 文件:

class MyUser {
  final String? uid;

  MyUser({this.uid});
}

这里是 auth.dart:(如果您注意到我还没有添加任何登录方法。这会导致问题吗?)

import 'package:firebase_auth/firebase_auth.dart';
import 'package:unistuff_main/models/MyUser.dart';

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance; //private data member

  //create MyUser object based on FirebaseUser
  MyUser? _userfromFirebase(User user) {
    return user != null ? MyUser(uid: user.uid) : null;
  }

  //auth change user stream
  Stream<MyUser?> get user {
    return _auth
        .authStateChanges()
        .map((User? user) => _userfromFirebase(user!));
  }

  //sign in with email & password
  Future signInWithMail() async {
    try {} catch (e) {}
  }

  //register with email & password

  //sign out
}

感谢您的帮助..

您的 AuthService().user 类型似乎不能为空,因此请尝试将用户类型从 auth.dart 更改为 Stream?。

Stream<MyUser?>? get onAuthStateChanges => FirebaseAuth.instance
  .authStateChanges()
  .map((currentUser) => MyUser.fromSnapshot(currentUser!));

我不确定,但您可能正在使用 FirebaseAuth.instance 中的 authStateChanges()。因此,如果它不能解决您的问题,请打印 AuthService().user :)

在出现错误的行中,尝试使用运算符??如果为 null,则传递原始对象。

例如:

MyObject(
  stringField: myString ?? '', //you are ensuring that if your String is null, there will be no error
);

库 URI 区分大小写。 AuthService 从 MyUser.dart 导入 MyUser,而 MyApp 从 myuser.dart 导入 MyUser。即使这些是相同的文件(假设文件系统不区分大小写),它们也被视为不同的库,因此类型不匹配。

您需要更改其中一个导入语句以匹配另一个。