Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 引发了另一个异常:NoSuchMethodError:The方法';[]和#x27;在null上调用了。在flatter中登录api时出错_Java_Api_Flutter_Dart - Fatal编程技术网

Java 引发了另一个异常:NoSuchMethodError:The方法';[]和#x27;在null上调用了。在flatter中登录api时出错

Java 引发了另一个异常:NoSuchMethodError:The方法';[]和#x27;在null上调用了。在flatter中登录api时出错,java,api,flutter,dart,Java,Api,Flutter,Dart,下面是一个错误代码,我遇到了一个错误,方法调用为null。请在此帮助开发者: 我/弗利特(15897):{“状态”:“Ok”,“代码”:200,“授权”:“86f3d01a-150c-34d5-bb61-3ad7052e0248:OIX1QXHUYD2Q6F3LKPZISXEPTP1ATCQSKWCT/ugBI=”,“用户ID”:“DWVOT3Y2TZRP2T4UDVZCKJAU0TSUT09”,“用户”:{“名字”:“马哈尔”,“姓氏”:“卡图尔”,“电子邮件”:“马哈尔”。catur@gma

下面是一个错误代码,我遇到了一个错误,方法调用为null。请在此帮助开发者:

我/弗利特(15897):{“状态”:“Ok”,“代码”:200,“授权”:“86f3d01a-150c-34d5-bb61-3ad7052e0248:OIX1QXHUYD2Q6F3LKPZISXEPTP1ATCQSKWCT/ugBI=”,“用户ID”:“DWVOT3Y2TZRP2T4UDVZCKJAU0TSUT09”,“用户”:{“名字”:“马哈尔”,“姓氏”:“卡图尔”,“电子邮件”:“马哈尔”。catur@gmai l、 com、“电话”:“6285959640524”},“消息”:“登录成功”,“时间戳”:“2021-03-12 07:41:21.72”} I/flatter(15897):引发了另一个异常:NoSuchMethodError:对null调用了方法“[]”

This is an error code:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:http/io_client.dart';
import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:selon_mart/Components/custom_surfix_icon.dart';
import 'package:selon_mart/Components/form_error.dart';
import 'package:flutter_bcrypt/flutter_bcrypt.dart';
import 'package:selon_mart/helper/keyboard.dart';
import 'package:selon_mart/Auth/login_navigator.dart';
import 'package:selon_mart/forgot_password/forgot_password_screen.dart';
import 'package:selon_mart/login_success/login_success_screen.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
import 'package:selon_mart/util/api.dart';
import 'package:selon_mart/HomeOrderAccount/Home/UI/home.dart';

import 'scaffold_wrapper.dart';

import 'themes/colors.dart';
import 'themes/fonts.dart';

import 'package:selon_mart/Components/default_button.dart';
import 'package:selon_mart/contants.dart';
import 'package:selon_mart/size_config.dart';

class SignForm extends StatefulWidget {
  @override
  _SignFormState createState() => _SignFormState();
}

class _SignFormState extends State<SignForm> {
  final _formKey = GlobalKey<FormState>();
  String email;
  final usernameController = TextEditingController();
  final passwordController = TextEditingController();
  String passwordHash;
  bool remember = false;
  final List<String> errors = [];
  // final deviceTarget = nativeRuntime.instanceNamed('UIDevice');

  DeviceInfoPlugin deviceInfo =
  DeviceInfoPlugin(); // instantiate device info plugin
  AndroidDeviceInfo androidDeviceInfo;
  IosDeviceInfo iosDeviceInfo;
  String deviceIdAndroid = "";
  String deviceIdIos = "";

  bool password = true;

  void _toggle() {
    setState(() {
      password = !password;
    });
  }

  void getDeviceinfoAndroid() async {
    androidDeviceInfo =
    await deviceInfo.androidInfo; // instantiate Android Device Information
    setState(() {
      deviceIdAndroid = androidDeviceInfo.androidId;
    });
  }

  void getDeviceinfoIos() async {
    iosDeviceInfo =
    await deviceInfo.iosInfo; // instantiate Ios Device Information
    setState(() {
      deviceIdIos = iosDeviceInfo.identifierForVendor;
    });
  }

  Future<void> hash() async {
    _login();
  }


  void addError({String error}) {
    if (!errors.contains(error))
      setState(() {
        errors.add(error);
      });
  }

  void removeError({String error}) {
    if (errors.contains(error))
      setState(() {
        errors.remove(error);
      });
  }



  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: [
          buildEmailFormField(),
          SizedBox(height: getProportionateScreenHeight(30)),
          buildPasswordFormField(),
          SizedBox(height: getProportionateScreenHeight(30)),
          Row(
            children: [
              Checkbox(
                value: remember,
                activeColor: kPrimaryColor,
                onChanged: (value) {
                  setState(() {
                    remember = value;
                  });
                },
              ),
              Text("Remember me"),
            ],
          ),
          FormError(errors: errors),
          SizedBox(height: getProportionateScreenHeight(30)),
          Row (
            children: [
              GestureDetector(
                onTap: () =>
                    Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (context) => LoginNavigator())
                    ),
                child: Text("Login via phone",
                  style:  TextStyle(decoration: TextDecoration.underline),
                ),
              )
            ],
          ),
          FormError(errors: errors),
          SizedBox(height: getProportionateScreenHeight(30)),
          Row (
            children: [
              GestureDetector(
                onTap: () => Navigator.pushNamed(
                    context, ForgotPasswordScreen.routeName),
                child: Text(
                  "Forgot Password",
                  style: TextStyle(decoration: TextDecoration.underline),
                ),
              ),
            ],
          ),
          FormError(errors: errors),
          SizedBox(height: getProportionateScreenHeight(20)),
          buttonLogin(context),
        ],
      ),
    );
  }

  void _showLoading(String text) {
    showDialog(
      context: context,
      barrierDismissible: false,
      child: Dialog(
        child: Padding(
          padding: EdgeInsets.fromLTRB(25, 20, 25, 20),
          child: Row(
            mainAxisSize: MainAxisSize.min,
            children: [
              new CircularProgressIndicator(),
              new Padding(
                padding: EdgeInsets.all(20),
                child: Text(text),
              ),
            ],
          ),
        ),
      ),
    );
  }

  TextFormField buildPasswordFormField() {
    return TextFormField(
      controller: passwordController,
      obscureText: password,
      onChanged: (value) {
        if (value.isNotEmpty) {
          removeError(error: kPassNullError);
        } else if (value.length >= 8) {
          removeError(error: kShortPassError);
        }
        return null;
      },
      validator: (value) {
        if (value.isEmpty) {
          addError(error: kPassNullError);
          return "";
        } else if (value.length < 8) {
          addError(error: kShortPassError);
          return "";
        }
        return null;
      },
      decoration: InputDecoration(
        labelText: "Password",
        hintText: "Enter your password",
        // If  you are using latest version of flutter then lable text and hint text shown like this
        // if you r using flutter less then 1.20.* then maybe this is not working properly
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon: IconButton(
          color: Colors.black,
          onPressed: () {
            setState(() {
          _toggle();
            });
        },
          icon: password
            ? Icon(MdiIcons.eyeOffOutline)
              : Icon(MdiIcons.eyeOutline),
        ),
      ),
    );
  }

  Widget buttonLogin(BuildContext context) {
    return Container(
      padding: EdgeInsets.symmetric(horizontal: 25.0),
      child: FlatButton(
        onPressed: () {
          setState(() {
            _login();
          });
        },
        padding: EdgeInsets.all(0),
        child: Ink(
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(6),
            color: Colors.red,
          ),
          child: Container(
            alignment: Alignment.center,
            constraints:
            BoxConstraints(maxWidth: double.infinity, minHeight: 50),
            child: Text(
              "Masuk",
              style: ThemeFonts.textStyle600
                  .copyWith(fontSize: 18, color: Colors.white),
            ),
          ),
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(6),
        ),
      ),
    );
  }

  TextFormField buildEmailFormField() {
    return TextFormField(
      keyboardType: TextInputType.emailAddress,
      controller: usernameController,
      onSaved: (newValue) => email = newValue,
      onChanged: (value) {
        if (value.isNotEmpty) {
          removeError(error: kEmailNullError);
        } else if (emailValidatorRegExp.hasMatch(value)) {
          removeError(error: kInvalidEmailError);
        }
        return null;
      },
      validator: (value) {
        if (value.isEmpty) {
          addError(error: kEmailNullError);
          return "";
        } else if (!emailValidatorRegExp.hasMatch(value)) {
          addError(error: kInvalidEmailError);
          return "";
        }
        return null;
      },
      decoration: InputDecoration(
        labelText: "Email",
        hintText: "Enter your email",
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/Mail.svg"),
      ),
    );
  }

  Future<Null> _login() async {
    print("Login");
    try {
      // HttpClient client = new HttpClient();
      // client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true);
      _showLoading("Please Wait...");
      SharedPreferences prefs = await SharedPreferences.getInstance();
      var dtUname = usernameController.text;
      var dtPass = passwordController.text;
      // final ioc = new HttpClient();
      // ioc.badCertificateCallback =
          // (X509Certificate cert, String host, int port) => true;
      // final http = new IOClient(ioc);

      // set up POST request arguments
      var headers = {"Content-Type": "application/json" ,"Accept": "application/json"};

      // make POST request
      final msg = jsonEncode({
        "email": dtUname,
        "password": dtPass,
        "device": "android"});

      return http.post(await Env().postLoginCustomer(), headers: headers,
          body: msg
      ).then((response) {
        print(response.body);
        final body = jsonDecode(response.body);

        if (body["code"] == "200" && body["status"] == "Ok") {
          prefs.setString("userid", body['data']['userid']);
          prefs.setString("email", body['data']['email']);
          prefs.setInt("password", body['data']['password']);
          setState(() {
            // Navigator.pop(context);
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                builder: (context) => HomePage(),
              ),
            );
          });
        } else if (body["code"] == "404"){
          addError(error: kPassNullError);
        } else {
          setState(() {
            Navigator.pop(context);
          });
          showDialog(
            barrierDismissible: false,
            context: context,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text(
                  body['data']['message'],
                  style: ThemeFonts.textStyle500
                      .copyWith(fontSize: 16, color: Colors.black),
                ),
                // content: Text(body['data']),
                actions: <Widget>[
                  new RaisedButton(
                    child: Text('Ok'),
                    textColor: Colors.grey,
                    onPressed: () {
                      Navigator.pop(context);
                    },
                  ),
                ],
              );
            },
          );
        }
      }).catchError((error) {
        print(error);
      });
    } catch (e) {
      print(e);
    }
    return null;
  }
}
这是一个错误代码:
导入“dart:async”;
导入“dart:convert”;
导入“dart:io”;
导入“包:http/io_client.dart”;
导入“package:device_info/device_info.dart”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:selon_mart/Components/custom_surfix_icon.dart”;
导入“package:selon_mart/Components/form_error.dart”;
进口“包装:颤振/颤振飞镖”;
导入“package:selon_mart/helper/keyboard.dart”;
导入“package:selon_mart/Auth/login_navigator.dart”;
导入“package:selon_-mart/forget_password/forget_password_screen.dart”;
导入“包:selon_mart/login_success/login_success_screen.dart”;
导入“包装:材料\设计\图标\颤振/材料\设计\图标\颤振.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
将“package:http/http.dart”导入为http;
导入“package:selon_mart/util/api.dart”;
导入“package:selon_mart/HomeOrderAccount/Home/UI/Home.dart”;
导入“scaffold_wrapper.dart”;
导入“主题/颜色.省道”;
导入“themes/fonts.dart”;
导入“package:selon_-mart/Components/default_-button.dart”;
导入“包装:selon_mart/contants.dart”;
导入“package:selon_mart/size_config.dart”;
类SignForm扩展StatefulWidget{
@凌驾
_SignFormState createState();
}
类_SignFormState扩展状态{
final _formKey=GlobalKey();
字符串电子邮件;
最终用户名控制器=TextEditingController();
最终密码控制器=TextEditingController();
字符串密码哈希;
bool记住=错误;
最终列表错误=[];
//最终设备目标=nativeRuntime.instanceNamed('UIDevice');
deviceInfo插件deviceInfo=
DeviceInfo插件();//实例化设备信息插件
AndroidDeviceInfo和AndroidDeviceInfo;
IosDeviceInfo IosDeviceInfo;
字符串deviceandroid=“”;
字符串deviceIdIos=“”;
bool password=true;
void _toggle(){
设置状态(){
密码=!密码;
});
}
void getDeviceInfo()异步{
androidDeviceInfo=
wait deviceInfo.androidInfo;//实例化Android设备信息
设置状态(){
DeviceAndRoid=androidDeviceInfo.Android;
});
}
void getDeviceInfo()异步{
iosDeviceInfo=
wait deviceInfo.iosInfo;//实例化Ios设备信息
设置状态(){
deviceIdIos=iosDeviceInfo.identifierForVendor;
});
}
Future hash()异步{
_登录();
}
无效加法器({String error}){
如果(!errors.contains(error))
设置状态(){
错误。添加(错误);
});
}
void removeError({String error}){
if(errors.contains(error))
设置状态(){
错误。删除(错误);
});
}
@凌驾
小部件构建(构建上下文){
报税表(
键:_formKey,
子:列(
儿童:[
buildEmailFormField(),
尺寸箱(高度:30度),
buildPasswordFormField(),
尺寸箱(高度:30度),
划船(
儿童:[
复选框(
价值:记住,
activeColor:kPrimaryColor,
一旦更改:(值){
设置状态(){
记住=价值;
});
},
),
文本(“记住我”),
],
),
FormError(错误:错误),
尺寸箱(高度:30度),
划船(
儿童:[
手势检测器(
onTap:()=>
导航器。推(
上下文
材料路线(
生成器:(上下文)=>LoginNavigator()
),
子项:文本(“通过电话登录”,
样式:TextStyle(装饰:textEdition.下划线),
),
)
],
),
FormError(错误:错误),
尺寸箱(高度:30度),
划船(
儿童:[
手势检测器(
onTap:()=>Navigator.pushName(
上下文,放弃PasswordScreen.routeName),
子:文本(
“忘记密码”,
样式:TextStyle(装饰:textEdition.下划线),
),
),
],
),
FormError(错误:错误),
SizedBox(高度:GetControlutesCreenheight(20)),
buttonLogin(上下文),
],
),
);
}
void\u显示加载(字符串文本){
显示对话框(
上下文:上下文,
禁止:错误,
子:对话框(
孩子:填充(
填充:来自LTRB(25,20,25,20)的边缘设置,
孩子:排(
mainAxisSize:mainAxisSize.min,
儿童:[
新的CircularProgressIndicator(),
新填料(
填充:边缘设置。全部(20),
子:文本(Text),
),
],
),
),
),
);
}
TextFormField buildPasswordFormField(){
返回TextFormField(
控制器:密码控制器,
模糊文本:p
else if (body["code"] == "404"){
          addError(error: kPassNullError);
        } else {
          setState(() {
            Navigator.pop(context);
          });
          showDialog(
            barrierDismissible: false,
            context: context,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text(
                  body['data']['message'],
                  style: ThemeFonts.textStyle500
                      .copyWith(fontSize: 16, color: Colors.black),
                ),
                // content: Text(body['data']),
                actions: <Widget>[
                  new RaisedButton(
                    child: Text('Ok'),
                    textColor: Colors.grey,
                    onPressed: () {
                      Navigator.pop(context);
                    },
                  ),
                ],
              );
            },
else {
  if(body["code"] == "404"){
     addError(error: kPassNullError);
  } else {
     setState(() {
        Navigator.pop(context);
      });
      showDialog(
        barrierDismissible: false,
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text(
              body['data']['message'],
              style: ThemeFonts.textStyle500
                  .copyWith(fontSize: 16, color: Colors.black),
            ),
            // content: Text(body['data']),
            actions: <Widget>[
              new RaisedButton(
                child: Text('Ok'),
                textColor: Colors.grey,
                onPressed: () {
                  Navigator.pop(context);
                },
              ),
            ],
          );
  }
}