Кажется, что FutureBuilder во флаттере не может получить данные, почему? - PullRequest
0 голосов
/ 05 марта 2020

Я пытался использовать FutureBuilder для виджета с состоянием, я написал простое приложение flask и проверил конечную точку, она хорошо работает через браузер. НО в моем флаттерном приложении я продолжаю получать «нет данных», что означает, что выборка с сервера не производилась.

Почему функция getFamily () не вызывается (см. Ниже)?

Полагаю, мне здесь чего-то не хватает, c: /, я бы хотел получить семью. Отец!

ниже мой код в виджете с состоянием:

 Future<FamilyModel> familyFuture;

  @override
  void initState() {
    super.initState();
    familyFuture = getFamily();
  }

  Future<AuditionModel> getFamily() async {
    print("Welcome to getFamily!!\n");

    final url = "http://192.168.1.2:5000/search";
    final response = await http.get(url);

    // for debugging only
    # print('statusCode: ${response.statusCode}');
    if (response.statusCode == 200) {
      # print("You have reached here!!!");
      final jsonFamily = jsonDecode(response.body);
      return FamilyModel.fromJson(jsonFamily);
    } else {
      throw Exception();
    }
  }

в части сборки:

     @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyCustomedAppBar(), // works well
      body: Container(
        child: FutureBuilder(
          future: familyFuture,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              switch (snapshot.connectionState) {
                case ConnectionState.active:
                  return Text('Active');
                case ConnectionState.done:
                  final family = snapshot.data;
                  print("Done!!!");
                  return Text(family.father);
                case ConnectionState.none:
                  return Text("none");
                case ConnectionState.waiting:
                  return Text("waiting");
                default:
                  return Text("default");
              }
            } else {
              return Text("No data");
            }
          },
        ),
      ),
    );

Модель:

class FamilyModel {
  final String father;
  final String mother;
  final String sister;

  FamilyModel(
      {this.father,
      this.mother,
      this.sister});

  factory AuditionModel.fromJson(final json) {
    return FamilyModel(
        father: json["father"],
        mother: json["mother"],
        sister: json["sister"]);
  }

Спасибо всем за помощь!

1 Ответ

1 голос
/ 05 марта 2020

Атрибут future для FutureBuilder должен быть функцией. В этом случае ваше будущее должно быть getFamily(). Пожалуйста, обратитесь к документации по FutureBuilder здесь .

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