Здравствуйте, ребята / Я пытаюсь создать форму входа, используя флаттер, используя HTTP-запросы. API принимает два параметра: CustEmail и CustPassword. Но когда я запускаю приложение, я получаю сообщение об ошибке тип 'String' не является подтипом типа 'Карта'
PS: когда я проверяю это с помощью Postman, когда Я даю значения для параметров, если значения существуют в базе данных, я получаю ответ «ИСТИНА». Если значения не существуют в базе данных, ответ «ЛОЖЬ»
Это мой код в main.dart
void main() => runApp(new MaterialApp(
title: 'Forms in Flutter',
home: new LoginPage(),
routes: <String, WidgetBuilder>{
'/home_page': (BuildContext context) => new HomePage(),
},
));
class LoginPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _LoginPageState();
}
class _LoginData {
String email = '';
String password = '';
}
class _LoginPageState extends State<LoginPage> {
final GlobalKey<FormState> _formKey = new GlobalKey<FormState>();
_LoginData _data = new _LoginData();
//<<<<<<<<<<<Email Validation>>>>>>>>>
String _validateEmail(String value) {
// If empty value, the isEmail function throw a error.
// So I changed this function with try and catch.
try {
Validate.isEmail(value);
} catch (e) {
return 'The E-mail Address must be a valid email address.';
}
return null;
}
//<<<<<<<<<password Validation>>>>>>>>>>
String _validatePassword(String value) {
if (value.length < 8) {
return 'The Password must be at least 8 characters.';
}
return null;
}
//<<<<<<<<<Submit and Login>>>>>>>>>>>>>>>
void submit() {
// First validate form.
if (this._formKey.currentState.validate()) {
_formKey.currentState.save(); // Save the form now.
Map<dynamic, dynamic> mapData = <dynamic, dynamic>{
"CUST_EMAIL": '${_data.email}',
"CUST_PASSWORD": '${_data.password}'
};
_login(mapData);
var emailStr = _data.email;
var passwordStr = _data.email;
}
}
String msg = "";
//<<<<<<<<<<<<<<<<<<<<Sending http request>>>>>>>>>>>>>>
Future<List> _login(jsonObj) async {
try {
final response = await http.get(
'http://192.168.8.101/DIVSS%20ENGINE/DivssService.asmx/GetCustomerDetailsForMobile?CustEmail=${_data.email}&CustPassword=${_data.password}');
Map<String, dynamic> value = json.decode(response.body);
String state = value[''];
print(state);
if (state == 'TRUE') {
Navigator.pushReplacementNamed(context, '/home_page');
} else {
msg = "Login Failed!";
}
} catch (e) {
print(e.toString());
msg = "Login Failed!";
}
}
@override
Widget build(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size;
return new Scaffold(
appBar: new AppBar(
title: new Text('Login'),
),
body: new Container(
padding: new EdgeInsets.all(20.0),
child: new Form(
key: this._formKey,
child: new ListView(
children: <Widget>[
new TextFormField(
keyboardType: TextInputType
.emailAddress, // Use email input type for emails.
decoration: new InputDecoration(
hintText: 'you@example.com',
labelText: 'E-mail Address'),
//validator: this._validateEmail,
onSaved: (String value) {
this._data.email = value;
}),
new TextFormField(
obscureText: true, // Use secure text for passwords.
decoration: new InputDecoration(
hintText: 'Password', labelText: 'Enter your password'),
//validator: this._validatePassword,
onSaved: (String value) {
this._data.password = value;
}),
new Container(
width: screenSize.width,
child: new RaisedButton(
child: new Text(
'Login',
style: new TextStyle(color: Colors.white),
),
onPressed: this.submit,
color: Colors.blue,
),
margin: new EdgeInsets.only(top: 20.0),
),
new Container(
padding: EdgeInsets.only(top: 20.0), child: new Text(msg)),
],
),
)),
);
}
}
I попытался выполнить это действие входа в систему с помощью java, но мне было труднее сделать это с помощью java. Не могли бы вы рассказать мне, что я сделал неправильно? Большое вам спасибо!