Java 引发了另一个异常:NoSuchMethodError:The方法';[]和#x27;在null上调用了。在flatter中登录api时出错
下面是一个错误代码,我遇到了一个错误,方法调用为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调用了方法“[]”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
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);
},
),
],
);
}
}