提供者未找到异常

时间:2020-08-09 10:33:32

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

我们有一个包含两个按钮的封面。一个进入承包商的登录和注册页面,另一个按钮进入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的代码片段。我们也为hirerWrapper提供了类似的服务。我们收到此错误:

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

2 个答案:

答案 0 :(得分:0)

假设类User扩展了类ChangeNotifier,则必须在ChangeNotifierProvider上方添加一个MaterialApp,以定义如何创建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;
}

如果不清楚,请随时提问。

答案 1 :(得分:0)

   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")),
       ),
     );
 }
   }