import 'package:flutter/material.dart'; import 'devices.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'SmartHome', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'SmartHome Main Page'), ); } } 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 const Text("still loading"); } 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), ), 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.Name())); }, body: widget, isExpanded: expanded[category.key], backgroundColor: Colors.grey[200], canTapOnHeader: true, ); }, ).toList())) ])); }); } }