【问题标题】:Flutter Navigator "argument type 'Context' can't be assigned to the parameter type 'BuildContext'"Flutter Navigator“参数类型'Context'不能分配给参数类型'BuildContext'”
【发布时间】:2019-11-17 12:09:52
【问题描述】:

我正在尝试将我的 menuButton 类别名称传递给下一页,并在我的 categoryScreens 上设置下一页的状态。

目前我收到一条红色波浪线,上面写着“参数类型'Context'不能分配给参数类型'BuildContext'”

import 'package:flutter/material.dart';
import 'package:boardwalk/Screens/categoryScreen.dart';
import 'package:boardwalk/Widgets/headerCategory.dart';
import 'package:path/path.dart';

class homeMenu extends StatelessWidget {
  const homeMenu({Key key}) : super(key: key);
  Padding menuButton(String category, IconData categoryIcon) {
    return Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        child: Container(
          width: 95,
          child: InkWell(
            onTap: ()=>
              Navigator.of(context).push(MaterialPageRoute(builder: (context) => categoryScreen()));
            ,
            child: Column(
              children: <Widget>[
                Center(
                  child: Container(
                    height: 70,
                    width: 70,
                    decoration: BoxDecoration(
                      gradient: LinearGradient(
                        colors: [Colors.deepPurple, Colors.deepPurpleAccent],
                      ),
                      shape: BoxShape.circle,
                    ),
                    child: Icon(
                      categoryIcon,
                      size: 40.0,
                      color: Colors.white,
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(6.0),
                  child: Text(
                    category,
                    style: TextStyle(
                      color: Colors.deepPurpleAccent,
                      fontSize: 14,
                    ),
                  ),
                )
              ],
            ),
          ),
        ));
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.only(top: 8.0),
      child: Container(
        height: 100,
        width: 400,
        child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
          menuButton('Home', Icons.home),
          menuButton('Eat', Icons.restaurant_menu),
          menuButton('Shop', Icons.store),
          menuButton('Travel', Icons.airplanemode_active),
          menuButton('Play', Icons.local_activity),
          menuButton('Service', Icons.build),
        ]),
      ),
    );
  }
}

如果导航器不喜欢上下文,我不确定要在导航器中传递什么,我完全不确定此时会发生什么。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    其实这个问题是导入 path.dart 包引起的。要解决此问题,请将上下文更改为 this.context

    【讨论】:

      【解决方案2】:

      我只是将上下文更改为 this.context 并在寻找解决方案 2 小时后解决了问题!

      【讨论】:

        【解决方案3】:

        小部件无权访问build 方法之外的BuildContext。如果您在这里创建像menuButton 这样的可重用Widget 函数,那么您必须传入您在build 方法中收到的BuildContext 实例。

        所以你的代码变成了,

        class homeMenu extends StatelessWidget {
          const homeMenu({Key key}) : super(key: key);
        
          Padding menuButton(BuildContext context, String category, IconData categoryIcon, BuildContext context) {
            return Padding(
                padding: const EdgeInsets.symmetric(horizontal: 10),
                ...
                );
          }
        
          @override
          Widget build(BuildContext context) {
            return Padding(
              padding: const EdgeInsets.only(top: 8.0),
              child: Container(
                height: 100,
                width: 400,
                child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
                  menuButton(context, 'Home', Icons.home),
                  ...
                ]),
              ),
            );
          }
        }
        

        【讨论】:

          【解决方案4】:

          如果 "import packages" 没有帮助意味着您应该尝试以下语句。

          声明BuildContext上下文;这是一个参数。

          【讨论】:

            猜你喜欢
            • 2020-06-25
            • 2019-04-23
            • 2020-07-08
            • 1970-01-01
            • 1970-01-01
            • 2021-03-16
            • 1970-01-01
            • 2021-08-13
            相关资源
            最近更新 更多