import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import '../devices/devices.dart'; class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { List expanded = []; @override Widget build(BuildContext context) { return FutureBuilder>( future: Category.fetch(), builder: (context, AsyncSnapshot> categories) { if (!categories.hasData) { return SpinKitWanderingCubes( color: Colors.deepPurple[100], size: 80.0, ); } final data = categories.data!; final category_count = data.length; if (category_count > expanded.length) { final int diff = category_count - expanded.length; final List diff_list = List.filled(diff, true); expanded.addAll(diff_list); } else if (category_count < expanded.length) { final int diff = expanded.length - category_count; expanded = List.filled(diff, false); } return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), actions: [ IconButton( icon: const Icon(Icons.auto_graph_outlined), onPressed: () => Navigator.of(context).pushReplacementNamed( '/graphs', )), IconButton( icon: const Icon(Icons.refresh_outlined), onPressed: () {}) ], ), body: Column(children: [ Container( margin: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(15.0), child: ExpansionPanelList( expansionCallback: (int index, bool expand) { setState(() { expanded[index] = expand; }); }, children: data.asMap().entries.map( (category) { final CategoryWidget widget = CategoryWidget(category: category.value); return ExpansionPanel( headerBuilder: (BuildContext context, bool isExpanded) { return ListTile( title: Text(widget.category.Name())); }, body: widget, isExpanded: expanded[category.key], backgroundColor: Colors.deepPurple[100], canTapOnHeader: true, ); }, ).toList())) ])); }); } }