Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 错误:在此小部件上方找不到正确的提供程序_Flutter_Flutter Provider - Fatal编程技术网

Flutter 错误:在此小部件上方找不到正确的提供程序

Flutter 错误:在此小部件上方找不到正确的提供程序,flutter,flutter-provider,Flutter,Flutter Provider,这个屏幕是一个抽屉式屏幕,它接受auth bloc,以便向用户提供信息并允许用户注销。 虽然我使用的是正确的提供程序,但还是出现了此错误 The following ProviderNotFoundError was thrown building Pets4allDrawer(dirty): I/flutter (32011): Error: Could not find the correct Provider<AuthService> above this Pets4allDr

这个屏幕是一个抽屉式屏幕,它接受auth bloc,以便向用户提供信息并允许用户注销。 虽然我使用的是正确的提供程序,但还是出现了此错误

The following ProviderNotFoundError was thrown building Pets4allDrawer(dirty):
I/flutter (32011): Error: Could not find the correct Provider<AuthService> above this Pets4allDrawer Widget
I/flutter (32011): To fix, please:
I/flutter (32011):   * Ensure the Provider<AuthService> is an ancestor to this Pets4allDrawer Widget
I/flutter (32011):   * Provide types to Provider<AuthService>
I/flutter (32011):   * Provide types to Consumer<AuthService>
I/flutter (32011):   * Provide types to Provider.of<AuthService>()
I/flutter (32011):   * Ensure the correct `context` is being used. 
生成Pets4allDrawer(脏)时引发了以下ProviderNotFoundError: I/flatter(32011):错误:在此Pets4allDrawer小部件上方找不到正确的提供程序 I/颤振(32011):要修复,请: I/flatter(32011):*确保提供程序是这个Pets4allDrawer小部件的祖先 I/颤振(32011):*向供应商提供类型 I/颤振(32011):*向用户提供类型 I/flatter(32011):*向提供者提供类型。of() I/颤振(32011):*确保使用了正确的“上下文”。 我想知道为什么使用Provider.of(context)不起作用,调用时找不到它

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:pets4all/blocs/authBloc.dart';
import 'package:provider/provider.dart';

class Pets4allDrawer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final AuthService authService = Provider.of<AuthService>(context);
    final user$ = authService.user.where((user) => user != null);
    return StreamBuilder<FirebaseUser>(
      stream: user$,
      builder: (context, snap) {
        final user = snap.data;
        if (snap.hasData) {
          return Drawer(
            child: ListView(
              children: <Widget>[
                ListTile(
                  leading: Icon(Icons.person_outline),
                  title: Text(user.displayName),
                  onTap: null,
                ),

                ListTile(
                  leading: Icon(Icons.home),
                  title: Text("Home"),
                  onTap: null,
                ),


                Align(
                  heightFactor: 3.5,
                  alignment: Alignment.bottomLeft,
                  child: FlatButton(
                    child: Text(
                      'Log out',
                      style: TextStyle(color: Colors.redAccent),
                    ),
                    onPressed: () {
                      Navigator.pop(context);
                      authService.signOut();
                    },
                  ),
                ),
              ],
            ),
          );
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}

import'package:firebase_auth/firebase_auth.dart';
进口“包装:颤振/材料.省道”;
导入“package:pets4all/blocs/authBloc.dart”;
导入“包:provider/provider.dart”;
类Pets4allDrawer扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终AuthService AuthService=Provider.of(上下文);
最终用户$=authService.user.where((用户)=>user!=null);
返回流生成器(
流:用户$,
生成器:(上下文,捕捉){
最终用户=snap.data;
if(snap.hasData){
回程抽屉(
子:ListView(
儿童:[
列表砖(
前导:图标(图标、人物轮廓),
标题:文本(user.displayName),
onTap:null,
),
列表砖(
前导:图标(Icons.home),
标题:文本(“主页”),
onTap:null,
),
对齐(
高度系数:3.5,
对齐:对齐。左下角,
孩子:扁平按钮(
子:文本(
“注销”,
样式:TextStyle(颜色:Colors.redAccent),
),
已按下:(){
Navigator.pop(上下文);
authService.signOut();
},
),
),
],
),
);
}否则{
返回循环ProgressIndicator();
}
},
);
}
}
这就是我给抽屉打电话的地方

class TabScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    List<String> lol = ["questions", "events"];
    return StatefulProvider<ForumServices>(
        valueBuilder: (BuildContext context) => ForumServices(),
        child: Consumer<ForumServices>(
            builder: (BuildContext context, forumServices) {
          return StreamBuilder<List<String>>(
              stream: forumServices.forumsTypes$,
              builder: (context, snapshot) {
                if (!snapshot.hasData) {
                  return CircularProgressIndicator();
                }
                List<String> types = snapshot.data;
                num tabLen = types.length;

                return DefaultTabController(
                  length: tabLen,
                  child: Scaffold(
                    drawer: Pets4allDrawer(),
类选项卡屏幕扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
列表lol=[“问题”,“事件”];
返回状态提供程序(
valueBuilder:(BuildContext上下文)=>ForumServices(),
儿童:消费者(
生成器:(BuildContext上下文,forumServices){
返回流生成器(
流:forumServices.forumsTypes$,
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回循环ProgressIndicator();
}
列表类型=snapshot.data;
num tabLen=types.length;
返回DefaultTabController(
长度:表,
孩子:脚手架(
抽屉:Pets4allDrawer(),

检查您是否已在某个祖先小部件中注册提供程序,如示例所示:

 return MultiProvider(
    providers: [
      ChangeNotifierProvider(
        builder: (_) => FirebaseNotificationNotifier(),
      ),],

我没有看到你在任何地方添加一个
AuthService
。这正常吗?可能是你在创建一个新的Pets4allDrawer时忘记将其包装到提供者小部件中。我通过使用提供者包装material应用解决了这个问题。它的价值是auth服务这是个错误。你得到答案了吗,我也被卡住了