微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:在此包装器小部件上方找不到正确的Provider <User>

如何解决错误:在此包装器小部件上方找不到正确的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 举报,一经查实,本站将立刻删除。