import 'package:flutter/material.dart'; import '../services.dart'; import 'dishCard.dart'; class DishList extends StatelessWidget { final String id; final List categories; DishList({@required this.id, @required this.categories}); final MenuiServices services = new MenuiServices(); @override Widget build(BuildContext context) { return Stack(children: [ ListView(children: [ SizedBox(height: 24), FutureBuilder>( future: services.fetchAllDishes(id), builder: (BuildContext context, AsyncSnapshot> snapshot) { if (snapshot.hasData) { final List dishes = snapshot.data; return ListView.builder( controller: ScrollController(), shrinkWrap: true, itemCount: categories.length, itemBuilder: (context, index) { final filteredDishes = filterDishesByCategory(dishes, categories[index]); return ExpansionTile( leading: Icon( Icons.fastfood_rounded, color: Colors.orange, ), title: Text( categories[index], style: TextStyle(color: Colors.grey[300]), ), children: [ ListView.builder( primary: false, shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: filteredDishes.length, itemBuilder: (context, index) { return Container( child: DishCard(dish: filteredDishes[index]), ); }, ) ], ); }, ); } else { return Center( child: CircularProgressIndicator(), ); } }), ]), Positioned.fill( bottom: 20, child: Align( alignment: Alignment.bottomCenter, child: RaisedButton.icon( splashColor: Colors.orange, elevation: 5, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(25)), color: Colors.grey[900], icon: Icon( Icons.keyboard_arrow_down_rounded, color: Colors.orange, ), label: Text( "ZwiƄ", style: TextStyle(color: Colors.white), ), onPressed: () => Navigator.pop(context), ))) ]); } List filterDishesByCategory(List dishes, String category) { List result = []; for (var dish in dishes) { if (dish.category == category) { result.add(dish); } } return result; } }