#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, которому я следовал, не подходило для моего варианта использования, поэтому вместо этого я использовал построитель потоков.