Необработанное исключение Dart: тип » Список» не является подтипом типа «Семейство», — Flutter

#flutter #dart

Вопрос:

Я пытаюсь добавить данные из Firebase Firestore в список с поставщиком. Однако я получаю ошибку. Я совсем новичок в Провайдере, так что, наверное, делаю что-то глупое.

«Необработанное исключение Dart: тип «Список» не является подтипом типа «Семья»,».

family_view.дарт

 class FamilyView extends StatelessWidget {
  Widget familyMember(BuildContext context) {
    var family = Provider.of<Family>(context);

    CollectionReference ref = FirebaseFirestore.instance.collection("users");

    ref.doc(user.uid)..get().then((val) {
      family = val["family"];
      print(family);
    });

    return ListView.builder(
        itemBuilder: (BuildContext context, int index) {
          return Container(
            child: Column(
              children: [
                ListTile(
                  title: Text(family[index]["name"]),
                ),
                Divider(
                  height: 2,
                ),
              ],
            ),
          );
        },
        itemCount: family.length);
  }
 

family_provider.dart

 import 'package:flutter/material.dart';

class Family with ChangeNotifier {
  List _family = [];

  List get family {
    return [..._family];
  }
}
 

Комментарии:

1. Можете ли вы показать, какое значение имеет «семья = val[«семья»];»?

2. Я не уверен, что в нем есть, но я думаю, что оно равно: [{«имя»: «Киллиан»}]

Ответ №1:

Я не вижу проблем с этим кодом, если семья-это то, что вы говорите, то есть список, содержащий [{«имя»: «Киллиан»}], он должен работать.

Я попробовал это и не увидел никаких проблем

   Widget build(BuildContext context) {
List<dynamic> family = [{'name': 'Killian'}, [{'name': 'Killian'}, {'name': 'Killian'}]];
return Scaffold(

  body: Center(
    child: ListView.builder(
    itemBuilder: (BuildContext context, int index) {
      return Container(
        child: Column(
          children: [
            ListTile(
              title: Text(family[1][index]["name"]),
            ),
            Divider(
              height: 2,
            ),
          ],
        ),
      );
    },
    itemCount: family.length,))
  );    
}
 

В итоге на экране появляется несколько строк списка, в которых говорится, что Киллиан равен длине семейного списка.

Может быть, вы получаете что-то, чего не ожидаете.

Я что-то пропустил?

Комментарии:

1. Данные поступают с базы Firebase, может ли это что-то изменить? prnt.sc/13m1vae

2. О, извините, нет, подождите, он получает весь этот документ с Firebase

3. а, я вижу, документ с твоей фотографии, верно? дайте-ка подумать

4. попробуйте название: Текст(семейство[1][индекс][«имя»]),

5. «Оператор» [] «не определен для типа «Семейство». Попробуйте определить оператор ‘[]’.» — Вот ошибка, которую я получаю

Ответ №2:

Я не выяснил, в чем была проблема, но я думаю, что это то, что tut, которому я следовал, не подходило для моего варианта использования, поэтому вместо этого я использовал построитель потоков.