方法'call'在null上被调用。接收方:null尝试过的呼叫:call(navegacion_bloques)

时间:2020-04-27 20:47:20

标签: flutter dart nosuchmethoderror

请给我一些时间,我遇到此错误“ mainMenu()。onMenuTap()” ,但我不知道如何解决。

在处理手势时引发了以下NoSuchMethodError:

“调用”方法是在null上调用的。

收件人:空

尝试通话:通话(navegacion_bloques)

在StatelessWidget类中,它工作正常,但我将所有内容都传递给Statefulwidget,因此无法使用此功能。

我的代码是这样的:

 import 'package:flutter/material.dart';
 import 'package:example/bloc/navegacion_bloques/navegacion_bloques.dart';
 import 'package:example/ui/pages/productos/categorias.dart';
 import 'package:example/ui/pages/productos/productdetails.dart';

 class mainMenu extends StatefulWidget with NavigationStates{

 final Function onMenuTap;
 const mainMenu({Key key, this.onMenuTap}) : super(key: key);

 @override
 _mainMenu createState() => _mainMenu();
}

class _mainMenu extends State<mainMenu>
{

  final categorias= allCategories;

@override
Widget build(BuildContext context) {
  return SingleChildScrollView(
    scrollDirection: Axis.vertical,
    physics: ClampingScrollPhysics(),
    child: Container(
      decoration: BoxDecoration(
        gradient: LinearGradient(
            colors: [Colors.deepPurple[300], Colors.deepPurpleAccent]
        ),
        borderRadius:BorderRadius.only(
            bottomLeft: Radius.circular(30),
            bottomRight: Radius.circular(30),
            topLeft: Radius.circular(20),
            topRight: Radius.circular(20)),

      ),
      padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 40),
      child: Column(
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            mainAxisSize: MainAxisSize.max,
            children:[
              InkWell(child: Icon(Icons.menu,color: Colors.grey[300],),
                onTap:(){
                mainMenu().onMenuTap();
                },),
              Text(
                "",
                style: TextStyle(
                    color: Colors.white,
                    fontSize: 22,
                    fontFamily: 'BalooMedium'),
              ),
              InkWell(child: Icon(Icons.shopping_cart,color: Colors.grey[300],),
                onTap:(){
                  mainMenu().onMenuTap();
                },),
            ],
          ),
          SizedBox(
            height: 5,
          ),
          Container(
            padding: const EdgeInsets.only(left: 10.0,right: 10.0),
            child: Column(
              children: <Widget>[
                Row(
                  children:[
                    Text(
                      "store",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 28,
                          fontFamily: 'BalooMedium'),
                    )
                  ],
                ),
                Row(
                  children:[
                    Text(
                      "hi",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 15,
                          fontFamily: 'BalooMedium'),
                    )
                  ],
                ),
                Row(
                  children:[
                    Text(
                      "There!",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 15,
                          fontFamily: 'BalooMedium'),
                    )
                  ],
                )
              ],
            ),
          ),
          SizedBox(
            height: 10,
          ),
          Padding(
            padding: EdgeInsets.only(left: 10.0,right: 10.0),
            child: TextField(
              style: TextStyle(
                fontFamily: 'BalooMedium',
                fontSize: 18.0,
                color: Colors.grey[200],
              ),
              decoration: InputDecoration(
                prefixIcon: IconButton(icon: Icon(Icons.search,color: Colors.grey[200],),onPressed: null,),
                hintText: '¿Qué Necesitas?',
                hintStyle:TextStyle(
                  fontFamily: 'BalooMedium',
                  fontSize: 18.0,
                  color: Colors.grey[200],
                ),
                suffixIcon: IconButton(icon: Icon(Icons.filter_list,color: Colors.grey[200],),onPressed: null,),
              ),
            ),
          ),
        ],
      ),
    ),
  );

}
buildCategoriasGrid(Categorias categorias){
  return GestureDetector(
      onTap: () {
        Navigator.of(context).push(MaterialPageRoute(
            //builder: (context) => productdetails(selectedInstructor: categorias)
        ));
      },
      child: Padding(
          padding: EdgeInsets.all(5.0),
          child: Stack(
            children: <Widget>[
              Container(
                  height: 150.0, width: 100.0, color: Colors.transparent),
              Positioned(
                  left: 30.0,
                  top: 65.0,
                  child: Container(
                      height: 30.0,
                      width: 40.0,
                      decoration: BoxDecoration(boxShadow: [
                        BoxShadow(
                            blurRadius: 7.0,
                            color: Colors.grey.withOpacity(0.75),
                            offset: Offset(5, 25),
                            spreadRadius: 12.0)
                      ]))),

              Positioned(
                  left: 12.0,
                  top: 15.0,
                  child: Hero(
                      tag: categorias.productImg,
                      child: Container(
                          height: 110.0,
                          width: 85.0,
                          decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(7.0),
                              image: DecorationImage(
                                  image: AssetImage(categorias.productImg),
                                  fit: BoxFit.cover))))),

              Positioned(
                  left: 22.0,
                  top: 138.0,
                  child: Column(
                    children: <Widget>[
                      Text(categorias.productName,
                        style: TextStyle(
                          fontFamily: 'BalooMedium',
                          fontSize: 10.0,
                          color: Colors.grey[200],
                        ),),
                      Row(children: [
                        Icon(
                          Icons.star,
                          color: Colors.grey.withOpacity(0.5),
                          size: 15.0,
                        ),
                        SizedBox(width: 3.0),
                        Text(categorias.productRating,
                          style: TextStyle(
                            fontFamily: 'BalooMedium',
                            fontSize: 10.0,
                            color: Colors.grey[200],
                          ),)
                      ])
                    ],
                  ))
            ],
          )));
}

}

1 个答案:

答案 0 :(得分:0)

替换

mainMenu().onMenuTap()

widget.onMenuTap()

调用mainMenu()只会创建一个mainMenu类的新实例,而没有相应的信息,因此onMenuTap()为空。

widget属性是“状态对象的配置[哪个是对应的StatefulWidget实例。” Source

因此,widget属性在State对象中使用时,包含您需要的信息,因此onMenuTap()将包含提供的参数。