无法在此消费者<TheState> 小部件上方找到正确的提供者<TheState>

Could not find the correct Provider<TheState> above this Consumer<TheState> Widget

获得:

Error: Could not find the correct Provider<TheState> above this Consumer<TheState> Widget

想知道为什么吗?谢谢

主线:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(const MyHomePage(
    title: 'ok',
  ));
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance?.addPostFrameCallback((_) {
      var state = Provider.of<TheState>(context, listen: false);
      state.initItems();
    });
  }

  @override
  Widget build(BuildContext context) {
    return DogList();
  }
}

class DogList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    

    //ERROR IS LINE BELOW
    return Consumer<TheState>(builder: (context, state, child) {
      var prod = state.getItems();
      return DogApp();
    });
  }
}

class DogApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    
    return SizedBox(height: 500, width: 500, child: Text("ok"));
  }
}

TheState.dart

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';

class TheState extends ChangeNotifier {
  int? items;
  Query? _feedQuery;
  final DatabaseReference kDb = FirebaseDatabase.instance.ref();
  Future<bool> dbInit() {
    try {
      _feedQuery!.onChildAdded.listen(_childAdded);
      initItems();
      return Future.value(true);
    } catch (error) {
      print("ERROR");
      return Future.value(false);
    }
  }

  int? getItems() {
    return items;
  }

  void initItems() {
    var calledFrom = "getItems";
    try {
      print("in try" + " " + calledFrom);
      kDb.child('item').once().then((DatabaseEvent event) {
        print("returned" + " " + calledFrom);
        final snapshot = event.snapshot;
        if (snapshot.value != null) {
          var map = snapshot.value as Map<dynamic, dynamic>;
          items = map.length;
        }
      }).catchError((e, stackTrace) {
        print("in catchError" + " " + calledFrom);
      }).whenComplete(() => print("COMPLETE" + " " + calledFrom));
    } catch (error) {
      print("catch" + " " + calledFrom);
    } finally {
      print("finally" + " " + calledFrom);
    }
  }

  void _childAdded(DatabaseEvent event) {}
}

如错误所述:您需要在小部件树上方的某处创建提供程序。

ChangeNotifierProvider(
  create: (_) => TheState(),
  child: //the rest of the tree of your app here
)

看看examples here