Http-запрос в форме входа с использованием флаттера не удалось - PullRequest
0 голосов
/ 16 апреля 2020

Здравствуйте, ребята / Я пытаюсь создать форму входа, используя флаттер, используя 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. Не могли бы вы рассказать мне, что я сделал неправильно? Большое вам спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...