No meu aplicativo, tenho um ListView que gostaria de preencher com dados do Firebase. Fiz isso com sucesso, mas agora, gostaria de separar meu ListView em outro arquivo dart
principal.dardo
class _MyHomePageState extends State<MyHomePage> {
int currentPageIndex = 0;
late List<QueryDocumentSnapshot<Map<String, dynamic>>> list;
@override
void initState() {
print('INIT');
FirebaseFirestore.instance
.collection('bands').get().then(
(querySnapshot) => {
setState(() {
list = querySnapshot.docs;
}),
},
);
super.initState();
}
e então estou chamando minha visualização personalizada como parte da Navegação Inferior:
@override
Widget build(BuildContext context) {
return ...
appBar: AppBar(
...
),
bottomNavigationBar: NavigationBar(
.....
),
body:
<Widget>[
ArtistList(list),
e em um arquivo dart separado
class ArtistList extends StatefulWidget {
ArtistList(this.list);
final List<QueryDocumentSnapshot<Map<String, dynamic>>> list;
@override
State<ArtistList> createState() => _ArtistListPageState(list);
}
class _ArtistListPageState extends State<ArtistList> {
_ArtistListPageState(this.list);
final List<QueryDocumentSnapshot<Map<String, dynamic>>> list;
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
var data=list[index];
return Text(data['name'])
....
Isso está funcionando, mas não está realmente otimizado.
Tenho que definir minha lista como um parâmetro de todos os meus widgets? Vejo muita redundância aí.
Remover
Usar
O estado da página tem acesso a todos os parâmetros no widget com estado por meio da
widget
variávelAlém disso, ao definir uma lista que pode levar algum tempo antes de ser preenchida, recomendo defini-la como uma lista vazia em vez de usar
late
Em seu
HomePage
, faça isso em vez disso