Вход в Flutter с использованием API ⇐ Android
-
Гость
Вход в Flutter с использованием API
Я пытаюсь использовать API для экрана входа в систему, но постоянно получаю эту ошибку. Я хочу иметь возможность войти через API в свое приложение Flutter. Первая часть — это то, что отправляется в API, а вторая часть — это ответ сервера, как показано в коде ниже:
I/flutter ( 892): {электронная почта: rashid.david12@gmail.com, пароль: 123456789} I/flutter (892): {ошибки: [Обязательно поле электронной почты. Обязательно поле пароля.]} Это мой код, что мне делать или какой-нибудь обходной путь для описанной выше ошибки?
import 'package:flutter/material.dart'; импортируйте «пакет: http/http.dart» как http; импортировать «дротик: конвертировать»; класс Signin расширяет StatefulWidget { @переопределить _SigninState createState() => _SigninState(); } класс _SigninState расширяет State { // Для индикатора CircularProgressIndicator. Bool видимый = ложь; // Получение значения из виджета TextField. окончательный emailController = TextEditingController(); окончательный парольКонтроллер = TextEditingController(); Будущий userLogin() async{ // Показ CircularProgressIndicator. setState(() { видимый = правда; }); // Получение значения от контроллера Строка электронной почты = emailController.text; Строковый пароль = парольController.text; // URL API ВХОДА НА СЕРВЕР вар URL = 'http://192.236.160.238/api/login'; // Сохраняем все данные с именем параметра. var data = {'электронная почта': электронная почта, 'пароль': пароль}; // Запуск вызова веб-API. var ответ = ожидайте http.post(url, body: json.encode(data[email])); печать (данные); // Получение ответа сервера в переменную. вар сообщение = jsonDecode(response.body); печать (сообщение); // Если ответное сообщение совпадает. если (сообщение == 'успех') { // Скрытие индикатора CircularProgressIndicator. setState(() { видимый = ложь; }); // Переход к дому и Отправка электронной почты на следующий экран. Navigator.pushNamed(context, '/home'); }еще{ // Если адрес электронной почты или пароль не совпадают. // Скрытие индикатора CircularProgressIndicator. setState(() { видимый = ложь; }); // Показ диалогового окна оповещения с ответным сообщением JSON. // показатьДиалог( // контекст: контекст, // строитель: (контекст BuildContext) { // возвращаем AlertDialog( // заголовок: новый текст(сообщение), // действия: [ // Плоская кнопка( // дочерний элемент: новый текст("ОК"), // onPressed: () { // Navigator.of(context).pop(); // }, // ), // ], // ); // }, // ); } } @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( ведущий: Icon(Icons.menu), title: const Text('Приложение самообслуживания Bdm'), centerTitle: правда, действия: [ Заполнение( отступ: EdgeInsets.symmetric(по горизонтали: 16), дочерний элемент: Значок(Icons.search), ), ], Цвет фона: Colors.blue, высота: 0,0, ), тело: Заполнение( отступ: EdgeInsets.fromLTRB(30.0, 40.0, 30.0, 0.0), ребенок: Столбец( crossAxisAlignment: CrossAxisAlignment.start, дети: [ Центр( ребенок: CircleAvatar( BackgroundImage: AssetImage('assets/rcmsbg.png'), радиус: 60,0, ), ), SizedBox(высота: 10,0), ТекстФормФилд( контроллер: emailController, украшение: InputDecoration(labelText: 'Введите имя пользователя или адрес электронной почты'), ), SizedBox(высота: 10,0), ТекстФормФилд( контроллер: парольконтроллер, украшение: InputDecoration(labelText: 'Введите пароль'), автофокус: ложный, obscureText: правда, ), SizedBox(высота: 20,0), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: логин пользователя, дочерний элемент: Текст('логин'), цвет: Цвета.зеленый, минШирина: 300,0, ), SizedBox(высота: 20,0), Текст('Забыли пароль?'), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: () { Navigator.pushNamed(context, '/resetpassword'); }, дочерний элемент: Text('Сбросить пароль'), цвет: Цвета.зеленый, минШирина: 200,0, ), SizedBox(высота: 20,0), Text('Еще нет учетной записи?'), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: () { Navigator.pushNamed(context, '/signup'); }, дочерний элемент: Текст («Зарегистрироваться»), цвет: Цвета.зеленый, минШирина: 200,0, ), ], ), // ], ), // ), ); } }
Я пытаюсь использовать API для экрана входа в систему, но постоянно получаю эту ошибку. Я хочу иметь возможность войти через API в свое приложение Flutter. Первая часть — это то, что отправляется в API, а вторая часть — это ответ сервера, как показано в коде ниже:
I/flutter ( 892): {электронная почта: rashid.david12@gmail.com, пароль: 123456789} I/flutter (892): {ошибки: [Обязательно поле электронной почты. Обязательно поле пароля.]} Это мой код, что мне делать или какой-нибудь обходной путь для описанной выше ошибки?
import 'package:flutter/material.dart'; импортируйте «пакет: http/http.dart» как http; импортировать «дротик: конвертировать»; класс Signin расширяет StatefulWidget { @переопределить _SigninState createState() => _SigninState(); } класс _SigninState расширяет State { // Для индикатора CircularProgressIndicator. Bool видимый = ложь; // Получение значения из виджета TextField. окончательный emailController = TextEditingController(); окончательный парольКонтроллер = TextEditingController(); Будущий userLogin() async{ // Показ CircularProgressIndicator. setState(() { видимый = правда; }); // Получение значения от контроллера Строка электронной почты = emailController.text; Строковый пароль = парольController.text; // URL API ВХОДА НА СЕРВЕР вар URL = 'http://192.236.160.238/api/login'; // Сохраняем все данные с именем параметра. var data = {'электронная почта': электронная почта, 'пароль': пароль}; // Запуск вызова веб-API. var ответ = ожидайте http.post(url, body: json.encode(data[email])); печать (данные); // Получение ответа сервера в переменную. вар сообщение = jsonDecode(response.body); печать (сообщение); // Если ответное сообщение совпадает. если (сообщение == 'успех') { // Скрытие индикатора CircularProgressIndicator. setState(() { видимый = ложь; }); // Переход к дому и Отправка электронной почты на следующий экран. Navigator.pushNamed(context, '/home'); }еще{ // Если адрес электронной почты или пароль не совпадают. // Скрытие индикатора CircularProgressIndicator. setState(() { видимый = ложь; }); // Показ диалогового окна оповещения с ответным сообщением JSON. // показатьДиалог( // контекст: контекст, // строитель: (контекст BuildContext) { // возвращаем AlertDialog( // заголовок: новый текст(сообщение), // действия: [ // Плоская кнопка( // дочерний элемент: новый текст("ОК"), // onPressed: () { // Navigator.of(context).pop(); // }, // ), // ], // ); // }, // ); } } @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( ведущий: Icon(Icons.menu), title: const Text('Приложение самообслуживания Bdm'), centerTitle: правда, действия: [ Заполнение( отступ: EdgeInsets.symmetric(по горизонтали: 16), дочерний элемент: Значок(Icons.search), ), ], Цвет фона: Colors.blue, высота: 0,0, ), тело: Заполнение( отступ: EdgeInsets.fromLTRB(30.0, 40.0, 30.0, 0.0), ребенок: Столбец( crossAxisAlignment: CrossAxisAlignment.start, дети: [ Центр( ребенок: CircleAvatar( BackgroundImage: AssetImage('assets/rcmsbg.png'), радиус: 60,0, ), ), SizedBox(высота: 10,0), ТекстФормФилд( контроллер: emailController, украшение: InputDecoration(labelText: 'Введите имя пользователя или адрес электронной почты'), ), SizedBox(высота: 10,0), ТекстФормФилд( контроллер: парольконтроллер, украшение: InputDecoration(labelText: 'Введите пароль'), автофокус: ложный, obscureText: правда, ), SizedBox(высота: 20,0), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: логин пользователя, дочерний элемент: Текст('логин'), цвет: Цвета.зеленый, минШирина: 300,0, ), SizedBox(высота: 20,0), Текст('Забыли пароль?'), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: () { Navigator.pushNamed(context, '/resetpassword'); }, дочерний элемент: Text('Сбросить пароль'), цвет: Цвета.зеленый, минШирина: 200,0, ), SizedBox(высота: 20,0), Text('Еще нет учетной записи?'), Плоская кнопка( форма: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), сторона: BorderSide(цвет: Colors.green)), onPressed: () { Navigator.pushNamed(context, '/signup'); }, дочерний элемент: Текст («Зарегистрироваться»), цвет: Цвета.зеленый, минШирина: 200,0, ), ], ), // ], ), // ), ); } }
Мобильная версия