【问题标题】:Provider not found exception未找到提供程序异常
【发布时间】:2020-11-29 04:09:54
【问题描述】:

我们有一个有两个按钮的封面。一个指向承包商的登录和注册页面,另一个按钮指向 Hirer 登录和注册。 为了检查用户是否已经登录到应用程序,我们使用了一个包含以下代码的 wrapper.dart:

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    print(user);
    enter code here
    if (user == null) {
      return Authenticate();
    } else {
      return Home();
    }
  }
}

这是我们的contractorwrapper 代码sn-p。我们也为hirerWrapper 提供了一个类似的。我们收到此错误:

/flutter (23750): ══╡ 小部件库发现的异常╞════════════════════════════ ═══════════════════════════ I/flutter (23750):在构建 ContractorWrapper(dirty) 时引发了以下 ProviderNotFoundException: I/flutter (23750):错误:在此 ContractorWrapper 小部件上方找不到正确的提供程序

【问题讨论】:

  • 添加您的 main.dart 或应用代码代码
  • 请在您构建 MaterialApp(...) 的位置添加代码

标签: firebase flutter dart google-cloud-firestore provider


【解决方案1】:
   class MyApp extends StatelessWidget {
    @override
   Widget build(BuildContext context) {
    return   MultiProvider(
    providers: [
    ChangeNotifierProvider(
  create: (context) => User())],
  child: MaterialApp(
    home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.blue,
          title: Text("First appbar"),
        ),
        body: Text("content")),
       ),
     );
 }
   }

【讨论】:

    【解决方案2】:

    假设User 类扩展ChangeNotifier 类,您必须在MaterialApp 上方添加ChangeNotifierProvider,它定义了User 的创建方式。

    Here 您可以找到一个很好的指南,如何将 Provider 集成到您的应用中。

    如下所示:

    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ChangeNotifierProvider(
          create: (context) => User(),
          child: MaterialApp(
            home: Scaffold(
                appBar: AppBar(
                  backgroundColor: Colors.blue,
                  title: Text("First appbar"),
                ),
                body: Text("content")),
          ),
        );
      }
    }
    
    //just an example
    class User extends ChangeNotifier {
      String _name;
    
      set name(String value) {
        _name = value;
        notifyListeners();
      }
    
      String get name => _name;
    }
    

    如果有不清楚的地方 - 随时提问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2021-02-03
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多