参数类型 '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。即使这些是相同的文件(假设文件系统不区分大小写),它们也被视为不同的库,因此类型不匹配。
您需要更改其中一个导入语句以匹配另一个。
我正在尝试在 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。即使这些是相同的文件(假设文件系统不区分大小写),它们也被视为不同的库,因此类型不匹配。
您需要更改其中一个导入语句以匹配另一个。