Флаттер: анализ JSON данных и отображение в приложении - PullRequest
0 голосов
/ 26 апреля 2020

Если честно, я очень плохо знаком с Флаттером и Дартом около недели, go я начал учиться. Итак, у меня гораздо меньше понимания.

У меня есть страница регистрации, и я хотел бы показать ошибку в приложении. Моя внутренняя страница возвращает ошибки и статус в формате JSON. Как показано ниже.

{"errors":{"Password1":"Password could not be empty",
"Email1":"Invalid Email Format",
"Name":"Your name must be between 3 to 30 characters!"},
"success":false}

Я создал файл для разбора JSON, как показано ниже.

import 'dart:convert';

Signup signupFromJson(String str) => Signup.fromJson(json.decode(str));

String signupToJson(Signup data) => json.encode(data.toJson());

class Signup {
    Errors errors;
    bool success;

    Signup({
        this.errors,
        this.success,
    });

    factory Signup.fromJson(Map<String, dynamic> json) => Signup(
        errors: Errors.fromJson(json["errors"]),
        success: json["success"],
    );

    Map<String, dynamic> toJson() => {
        "errors": errors.toJson(),
        "success": success,
    };
}

class Errors {
    String password1;
    String email1;
    String name;

    Errors({
        this.password1,
        this.email1,
        this.name,
    });

    factory Errors.fromJson(Map<String, dynamic> json) => Errors(
        password1: json["Password1"],
        email1: json["Email1"],
        name: json["Name"],
    );

    Map<String, dynamic> toJson() => {
        "Password1": password1,
        "Email1": email1,
        "Name": name,
    };
}

Теперь мне нужно показать эти данные в приложении после Asyn c call.

Future userRegistration() async{
    try{
  // Showing CircularProgressIndicator.
  setState(() {
  visible = true ; 
  });


  // Getting value from Controller
  String name = nameController.text;
  String email = emailController.text;
  String password = passwordController.text;

  // SERVER API URL
  var url = 'http://192.168.100.10:8080/app/registerexec.php';

  // Store all data with Param Name.
  var data = {'name': name, 'email': email, 'password' : password};

  // Starting Web API Call.
  var response = await http.post(url, body: json.encode(data));

  // Getting Server response into a variable.

  final message = signupFromJson(response.body);

  if(response.statusCode == 200){
  setState(() {
    visible = false; 
  });

}
  // Showing Alert with Response JSON Message.

 }catch(e){
   return userRegistration();
 }
}

Подскажите, пожалуйста, как я могу показать JSON данные в SnackBar.

Я пытаюсь разрешить их с прошлых дней, но не получаю успеха .

Спасибо

Редактировать:

Мне удалось получить данные в Print после их определения вручную.
Как показано ниже. Но я хочу автоматизировать это. Таким образом, если есть какие-либо ошибки, которые он может показать, и если это успешно, тогда другое сообщение.

print(message.errors.email1);
  print(message.errors.name);
  print(message.errors.password1);
  print(message.success);

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете использовать FutureBuilder на своей закусочной. Я редактировал из кода, доступного здесь :

class SnackBarPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: userRegistration,
      initialData: '',
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          // snapshot.data = yourData from your userRegistration
          // print(snapshot.data) to show your data here
          return snackBar = SnackBar(
            content: Text('Yay! A SnackBar!'),
            action: SnackBarAction(
              label: 'Undo',
              onPressed: () {

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