这是代码:
import 'package:flutter/material.dart';
import 'package:flutterapp/ui/pages/notes_home.dart';
import 'package:provider/provider.dart';
import 'package:flutterapp/ui/pages/splash.dart';
import 'package:flutterapp/ui/pages/user_info.dart';
import 'package:flutterapp/ui/pages/auth/login.dart';
import 'package:flutterapp/model/user_repository.dart';
import 'package:path/path.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
builder: (_) => UserRepository.instance(),
child: Consumer
// ignore: missing_return
(builder: (context, UserRepository user, _) {
// ignore: missing_return
switch (user.status){
case Status.Uninitialized:
return Splash();
case Status.Unauthenticated:
case Status.Authenticating:
return LoginPage();
case Status.Authenticated:
return NotesHomePage();
}
}),
);
}
}
以上代码中的“ builder:(_)=> UserRepository.instance(),这一行显示错误
无法将参数类型'Widget Function(BuildContext)'分配给参数类型'Widget Function(BuildContext,Widget)'
并且每当我运行程序时,它就会显示出来
在此LoginPage小部件上方找不到正确的提供程序
UserRepository代码:
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated }
class UserRepository with ChangeNotifier {
FirebaseAuth _auth;
FirebaseUser _user;
GoogleSignIn _googleSignIn;
Status _status = Status.Uninitialized;
UserRepository.instance()
: _auth = FirebaseAuth.instance,
_googleSignIn = GoogleSignIn() {
_auth.onAuthStateChanged.listen(_onAuthStateChanged);
}
Status get status => _status;
FirebaseUser get user => _user;
Future<bool> signIn(String email, String password) async{
try {
_status = Status.Authenticating;
notifyListeners();
await _auth.signInWithEmailAndPassword(email: email, password: password);
return true;
}catch(e){
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
Future<bool> signUp(String email, String password) async{
try {
_status = Status.Authenticating;
notifyListeners();
await _auth.createUserWithEmailAndPassword(email: email, password: password);
return true;
}catch(e){
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
Future<bool> signInWithGoogle() async{
try{
_status =Status.Authenticating;
notifyListeners();
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(idToken: googleAuth.idToken, accessToken: googleAuth.accessToken);
await _auth.signInWithCredential(credential);
return true;
}catch(e) {
print(e);
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
Future signOut() async {
_auth.signOut();
_googleSignIn.signOut();
_status = Status.Unauthenticated;
notifyListeners();
return Future.delayed(Duration.zero);
}
Future<void> _onAuthStateChanged(FirebaseUser firebaseUser) async{
if(firebaseUser == null) {
_status = Status.Unauthenticated;
}else{
_user = firebaseUser;
_status = Status.Authenticated;
}
notifyListeners();
}
}
请帮助
尝试一下:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<UserRepository>(
create: (context) => UserRepository.instance(),
child: Consumer
// ignore: missing_return
(builder: (context, UserRepository user, child) {
// ignore: missing_return
switch (user.status){
case Status.Uninitialized:
return Splash();
case Status.Unauthenticated:
case Status.Authenticating:
return LoginPage();
case Status.Authenticated:
return NotesHomePage();
}
}),
);
}
}