我在Flutter应用程序中为Auth使用BloC模型,也在基于角色的实现中使用,因此我必须检查Firestore以显示基于Role的其他主页,但是该类可以管理主页显示提供者错误,我不知道为什么。
class LandingPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final AuthService auth = Provider.of<AuthService>(context);
return StreamBuilder<User>(
stream: auth.onAuthStateChanged,
builder: (_, AsyncSnapshot<User> snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
final User user = snapshot.data;
if (user == null) {
return SignInPage.create(context, onSignedIn: () => Navigator.popAndPushNamed(context,"/roleDirector"));
}
return Provider<User>.value(
value: user,
child: RoleDirector(),
);
} else {
return SignInPage.create(context, onSignedIn: () => Navigator.popAndPushNamed(context,"/roleDirector"));
}
},
);
}
}
class RoleDirector extends StatelessWidget {
Future<String> _getRole(String useruid, BuildContext context) async {
String role;
try {
await Firestore.instance.collection('users').document(useruid).get().then((userInfor) {
role=userInfor['role'];
});
} on PlatformException catch (e) {
await PlatformExceptionAlertDialog(
title: "Error al recuperar el rol del usuario.",
exception: e,
).show(context);
print(e.message);
Navigator.popAndPushNamed(context, "/landingPage");
}
return role;
}
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
String uid = user.uid;
final AuthService auth = Provider.of<AuthService>(context);
return Scaffold(
body:FutureBuilder(
future: _getRole(uid, context),
builder: (context, snapshot){
if (snapshot.connectionState == ConnectionState.done) {
String role = snapshot.data;
switch(role){
case "buyer":{
return BuyerPage();
}
break;
case "seller":{
return SellerPage();
}
break;
case "foundation":{
return FundationPage();
}
break;
}
} else {
return CircularProgressIndicator();
}
if(snapshot.hasError){
print("error");
}
return BuyerPage();
},
),
);
}
}
在此RoleDirector小部件上方找不到正确的提供程序。要修复,请:
*确保提供者是此RoleDirector小部件的祖先 *为提供者提供类型*为消费者提供类型
*将类型提供给Provider.of() *始终使用包导入。
*确保使用正确的上下文。
我试图直接返回或推送SellerPage,但是它起作用了,但是当我尝试基于角色时,它失败了。