首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaterialButton onPress函数不工作

MaterialButton onPress函数不工作
EN

Stack Overflow用户
提问于 2022-08-06 11:50:33
回答 1查看 60关注 0票数 0

我使用Material作为一个可重用的组件,但是它的操作无论如何都不起作用。这就是我面临的错误

代码语言:javascript
复制
Exception caught by gesture 
The following _CastError was thrown while handling a gesture:
Null check operator used on a null value

When the exception was thrown, this was the stack: 
#0      ComplaintsScreen.build.<anonymous closure>.<anonymous closure> (package:elagak/Modules/drawer_screens/complaints.dart:177:62)
#1      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:1005:21)
#2      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24)
#3      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:613:11)
#4      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:298:5)
#5      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:269:7)
#6      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
#7      GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:449:20)
#8      GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:425:22)
#9      RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:329:11)
#10     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:380:7)
#11     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:344:5)
#12     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:302:7)
#13     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:285:7)
#17     _invoke1 (dart:ui/hooks.dart:170:10)
#18     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
#19     _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#cfff4
  debugOwner: GestureDetector
  state: ready
  won arena
  finalPosition: Offset(274.1, 357.3)
  finalLocalPosition: Offset(264.1, 34.3)
  button: 1
  sent tap down

这是我的密码

代码语言:javascript
复制
MyButtonClass(
                                title: "ارسال الطلب",
                                color: "#1D71B8",
                                    pressAction: () {
                              cubit
                                  .contactUS(
                                      email: cubit.loginModel!.data.email.toString() ?? emailController.text,
                                      name: cubit.loginModel!.data.name
                                          .toString() ?? nameController.text,
                                      phone: cubit.loginModel!.data.phone
                                          .toString() ?? phoneController.text,
                                      body: bodyController.text,
                                      title: titleController.text,
                                      //context: context
                              )
                                  .then((value) => showDialog(
                                      context: context,
                                      builder: (BuildContext context) {
                                        return Dialog(
                                          shape: RoundedRectangleBorder(
                                              borderRadius:
                                                  BorderRadius.circular(20.0)),
                                          child: SizedBox(
                                            height: 200,
                                            child: Padding(
                                              padding: const EdgeInsets.all(10),
                                              child: Column(
                                                mainAxisAlignment:
                                                    MainAxisAlignment.center,
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.center,
                                                children: [
                                                  myImage(
                                                      "assets/images/splash/للوجو.png"),
                                                  const Text(
                                                      "شكرا لك يسعادنا دائما انك معانا",
                                                      style: TextStyle(
                                                          fontSize: 16,
                                                          fontWeight:
                                                              FontWeight.w600)),
                                                ],
                                              ),
                                            ),
                                          ),
                                        );
                                      }))
                                  .catchError((e) => print(e.toString()));
                            })

MyButtonClass

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';

class MyButtonClass extends StatelessWidget {
  MyButtonClass({
    required this.pressAction,
    required this.color,
    required this.title,
    Key? key}) : super(key: key);
    void Function()? pressAction;
    String color;
    String title;
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      width: double.infinity,
      height: 60,
      child: MaterialButton(
          shape:
          RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0)),
          onPressed: pressAction,
          color: HexColor(color),
          child: Text(title,
              style: const TextStyle(fontSize: 16, color: Colors.white))),
    );
  }
}

事实上,我在5个以上的类中使用了这个类,并且在所有的类中都在工作,但是在这里它不工作

我的接触器功能

代码语言:javascript
复制
Future contactUS(
      {required String email,
      required String name,
      required String phone,
      required String body,
      required String title,
      }) async {
    emit(HomeRegisterLoadingState());
    await http.post(Uri.parse('${api}contact-us'), body: {
      'email': email,
      'name': name,
      'phone': phone,
      'body': body,
      'title': title
    }, headers: {
      'Accept': 'application/json'
    }).then((value) {
      if (jsonDecode(value.body)['code'] == 201) {
        Fluttertoast.showToast(msg: jsonDecode(value.body)['msg'].toString());
        emit(HomeRegisterSuccessState());
      } else {
        Fluttertoast.showToast(msg: "حاول مرة اخرى ");
        emit(HomeRegisterErrorState());
      }
    }).catchError((e) {
      Fluttertoast.showToast(msg: "يرجي المحاولة في وقت لاحق");
      print(e.toString());
      emit(HomeRegisterErrorState());
    });
  }

有人能告诉我如何解决这个问题吗?问题是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-08-06 12:05:51

作为您的错误Null check operator used on a null value

在您的代码中,此异常具有用于null值的条件null

您的代码:cubit.loginModel!.data

在您的情况下,此cubit.loginModel返回null,请在执行其他操作之前使用print调试此值并修复数据或添加if (cubit.loginModel != null)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73259481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档