remove futurebuilder from groups view and refactor

This commit is contained in:
2025-12-23 22:58:49 +01:00
parent 9b3d61e5b0
commit 9ad5c4ad6f

View File

@@ -19,15 +19,15 @@ class GroupsView extends StatefulWidget {
}
class _GroupsViewState extends State<GroupsView> {
late Future<List<Group>> _allGroupsFuture;
late final AppDatabase db;
late List<Group> loadedGroups;
bool isLoading = true;
final player = Player(name: 'Skeleton Player');
late final List<Group> skeletonData = List.filled(
List<Group> groups = List.filled(
7,
Group(
name: 'Skeleton Match',
members: [player, player, player, player, player, player],
name: 'Skeleton Group',
members: List.filled(6, Player(name: 'Skeleton Player')),
),
);
@@ -35,10 +35,17 @@ class _GroupsViewState extends State<GroupsView> {
void initState() {
super.initState();
db = Provider.of<AppDatabase>(context, listen: false);
_allGroupsFuture = Future.wait([
Future.wait([
db.groupDao.getAllGroups(),
Future.delayed(minimumSkeletonDuration),
]).then((results) => results[0] as List<Group>);
]).then((results) {
loadedGroups = results[0] as List<Group>;
setState(() {
groups = loadedGroups
..sort((a, b) => b.createdAt.compareTo(a.createdAt));
});
isLoading = false;
});
}
@override
@@ -48,36 +55,17 @@ class _GroupsViewState extends State<GroupsView> {
body: Stack(
alignment: Alignment.center,
children: [
FutureBuilder<List<Group>>(
future: _allGroupsFuture,
builder:
(BuildContext context, AsyncSnapshot<List<Group>> snapshot) {
if (snapshot.hasError) {
return const Center(
child: TopCenteredMessage(
icon: Icons.report,
title: 'Error',
message: 'Group data couldn\'t\nbe loaded',
),
);
}
if (snapshot.connectionState == ConnectionState.done &&
(!snapshot.hasData || snapshot.data!.isEmpty)) {
return const Center(
AppSkeleton(
enabled: isLoading,
child: Visibility(
visible: groups.isNotEmpty,
replacement: const Center(
child: TopCenteredMessage(
icon: Icons.info,
title: 'Info',
message: 'No groups created yet',
),
);
}
final bool isLoading =
snapshot.connectionState == ConnectionState.waiting;
final List<Group> groups =
isLoading ? skeletonData : (snapshot.data ?? [])
..sort((a, b) => b.createdAt.compareTo(a.createdAt));
return AppSkeleton(
enabled: isLoading,
),
child: ListView.builder(
padding: const EdgeInsets.only(bottom: 85),
itemCount: groups.length + 1,
@@ -90,8 +78,7 @@ class _GroupsViewState extends State<GroupsView> {
return GroupTile(group: groups[index]);
},
),
);
},
),
),
Positioned(
bottom: MediaQuery.paddingOf(context).bottom,
@@ -108,7 +95,7 @@ class _GroupsViewState extends State<GroupsView> {
),
);
setState(() {
_allGroupsFuture = db.groupDao.getAllGroups();
//_allGroupsFuture = db.groupDao.getAllGroups();
});
},
),