无法在此小部件上方找到正确的提供程序 - Flutter

2024-03-30

我是 Flutter 新手,我在 Flutter 应用程序中使用 Provider,我的 main.dart 文件如下所示:

import 'package:flutter/material.dart';
import 'package:provider_practice/screens/first_screen.dart';
import 'package:provider_practice/screens/second_screen.dart';
import 'package:provider/provider.dart';
import 'package:provider_practice/counter.dart';

void main() {
  runApp(MaterialApp(

    home: ChangeNotifierProvider<Counter>(
      create: (context) => Counter(),
      child: FirstScreen(),
    ),

    routes: {
      "/first" : (context) => FirstScreen(),
      "/second" : (context) => SecondScreen(),
    },
  ));
}

我的代码在 FirstScreen() 上运行良好,但是当我导航到 SecondScreen() (通过使用 Navigator.pushNamed())时,出现以下错误:

The following ProviderNotFoundException was thrown building SecondScreen(dirty):
Error: Could not find the correct Provider<Counter> above this SecondScreen Widget

有没有什么办法解决这一问题 ?我使用的是 Provider 版本 ^5.0.0

第一个屏幕.dart :-

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_practice/counter.dart';

class FirstScreen extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    final counter = Provider.of<Counter>(context , listen: false);

    return Scaffold(
      appBar: AppBar(
        title: Text("First Screen"),
      ),

      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Consumer<Counter>(
                  builder: (_ , counter , __) => Text("You pressed the button 
${counter.firstCounter} times.")
              ),
              SizedBox(height: 20),
              RaisedButton(
                onPressed: counter.firstIncrement,
                child: Text("Click Me"),
              ),
              SizedBox(height: 20),
              RaisedButton(
                onPressed: () {
                  Navigator.pushNamed(context, "/second");
                },
                child: Text("Go to Second"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Second_screen.dart :-

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_practice/counter.dart';

class SecondScreen extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    final counter = Provider.of<Counter>(context , listen: false);

    return Scaffold(
      appBar: AppBar(
        title: Text("Second Screen"),
      ),

      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Consumer<Counter>(
                  builder: (_ , counter , __) => Text("You pressed the button 
${counter.secondCounter} times.")
              ),
              SizedBox(height: 20),
              RaisedButton(
                onPressed: counter.secondIncrement,
                child: Text("Click Me"),
              ),
              SizedBox(height: 20),
              RaisedButton(
                onPressed: () {
                  //Navigator.maybePop(context);
                  Navigator.pushNamed(context, "/first");
                  //Navigator.pop(context);
                },
                child: Text("Go to First"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

反飞镖:-

import 'package:flutter/foundation.dart';

class Counter with ChangeNotifier {
  int firstCounter = 0;
  int secondCounter = 0;

  void firstIncrement() {
    firstCounter++;
    notifyListeners();
  }

  void secondIncrement() {
    secondCounter++;
    notifyListeners();
  }
}

如果没有看到您的代码的可复制片段,我们无法提供帮助, 无论如何,您可以在材料应用程序之前返回多提供商并在此处添加您的提供商

....
return MultiProvider(
      providers: [
        ChangeNotifierProvider<Counter>(
            create: (context) => Counter()),
]
child:MaterialApp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在此小部件上方找到正确的提供程序 - Flutter 的相关文章

随机推荐