Flutter:提供程序错误如何添加新页面

发布于 2025-01-12 10:48:15 字数 1497 浏览 2 评论 0原文

抱歉,这是我第一次使用提供商 我不知道如何让按钮将我带到另一个页面 我制作了一个带有过滤器的网页 主屏幕

Scaffold(
  key: context.read<MenuController>().scaffoldKey,
  drawer: DrawerView(),
  body: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [

        if (Responsive.isDesktop(context))
          Expanded(
            flex: 2,
            // default flex = 1
            // and it takes 1/6 part of the screen
            child: DrawerView(),
          ),
        // We want this side menu only for large screen

        Expanded(
          // It takes 5/6 part of the screen
          flex: 8,
          child: DashboardScreen(),
        ),
      ],
    ),
);

该页面分为三个部分 提供程序部分、仪表板部分和统计信息部分

菜单控制器

    class MenuController extends ChangeNotifier {
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  GlobalKey<ScaffoldState> get scaffoldKey => _scaffoldKey;

  void controlMenu() {
    if (!_scaffoldKey.currentState!.isDrawerOpen) {
      _scaffoldKey.currentState!.openDrawer();
    }
  }


}

main.dart

home: MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (context) => MenuController(),
      ),
    ],
    child: MainScreen(),
  ),

错误:无法在此 MainScreen Widget 上方找到正确的提供程序

发生这种情况是因为您使用了不包含提供程序的 BuildContext 由您选择。有一些常见的场景:

  • 您在 main.dart 中添加了一个新的提供程序并执行了热重载。 要修复,请执行热重启。

Sorry, this is my first time using a provider
I don't know how to make the button take me to another page
I made a web page with filters
Main Screen

Scaffold(
  key: context.read<MenuController>().scaffoldKey,
  drawer: DrawerView(),
  body: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [

        if (Responsive.isDesktop(context))
          Expanded(
            flex: 2,
            // default flex = 1
            // and it takes 1/6 part of the screen
            child: DrawerView(),
          ),
        // We want this side menu only for large screen

        Expanded(
          // It takes 5/6 part of the screen
          flex: 8,
          child: DashboardScreen(),
        ),
      ],
    ),
);

The page is divided into three parts
The provider part, the dashboard part, and the stats part

Menu Controller

    class MenuController extends ChangeNotifier {
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  GlobalKey<ScaffoldState> get scaffoldKey => _scaffoldKey;

  void controlMenu() {
    if (!_scaffoldKey.currentState!.isDrawerOpen) {
      _scaffoldKey.currentState!.openDrawer();
    }
  }


}

main.dart

home: MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (context) => MenuController(),
      ),
    ],
    child: MainScreen(),
  ),

Error: Could not find the correct Provider above this MainScreen Widget

This happens because you used a BuildContext that does not include the provider
of your choice. There are a few common scenarios:

  • You added a new provider in your main.dart and performed a hot-reload.
    To fix, perform a hot-restart.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╭ゆ眷念 2025-01-19 10:48:15

声明&实施如下提供者

 @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            ChangeNotifierProvider(
              create: (context) => MenuController(),
            ),
          ],
          child: MainScreen(),
        );
      }

Declare & implement provider like below

 @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            ChangeNotifierProvider(
              create: (context) => MenuController(),
            ),
          ],
          child: MainScreen(),
        );
      }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文