如何解决错误:在此包装器小部件上方找不到正确的Provider <User>
我正在关注YouTube教程,以使用Flutter构建应用。由于某种原因,我收到此错误。我找不到针对此问题的任何修复程序。
///在构建Wrapper(dirty)时引发了以下ProviderNotFoundError: 错误:在此包装小部件上方找不到正确的提供程序
要解决,请:
- 确保提供者是该包装小部件的祖先
- 向提供者提供类型
- 为消费者提供类型
- 将类型提供给Provider.of()
- 始终使用包导入。例如:`import'package:my_app / my_code.dart';
- 确保使用正确的
context
。
这是我的main.dart代码
void main() => runApp(Gradebook());
class Gradebook extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<User>.value(
value: AuthService().user,child: MaterialApp(
home: Wrapper(),),);
}
Wrapper.dart
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
if (user == null){
return Authenticate();
} else{
return Home();
}
}
}
在此处创建流提供程序。
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
// create user obj based on firebase user
User _userFromFirebaseUser(FirebaseUser user) {
return user != null ? User(uid: user.uid) : null;
}
//auth change user stream
Stream<User> get user {
return _auth.onAuthStateChanged
.map((FirebaseUser user) => _userFromFirebaseUser(user));
}
}
这是Authenticate.dart
class Authenticate extends StatefulWidget {
@override
_AuthenticateState createState() => _AuthenticateState();
}
class _AuthenticateState extends State<Authenticate> {
bool showLogin = true;
void toggleView() {
setState(() => showLogin = !showLogin);
}
@override
Widget build(BuildContext context) {
if(showLogin){
return Login(toggleView: toggleView);
} else{
return Register(toggleView: toggleView);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。