Skip to content

Commit

Permalink
make refresh on comeback optional
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas-Heiligenbrunner committed Dec 2, 2024
1 parent 9bd3a9d commit 14fcc3d
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 26 deletions.
58 changes: 33 additions & 25 deletions frontend/lib/components/api/ApiBuilder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,12 @@ class APIBuilder<T> extends StatefulWidget {
required this.onLoad,
required this.onData,
required this.api,
this.controller});
this.controller,
this.refreshOnComeback = false});

final Duration? interval;
final bool refreshOnComeback;

final Widget Function() onLoad;
final Widget Function(T data) onData;
final Future<T> Function() api;
Expand Down Expand Up @@ -59,32 +62,37 @@ class _APIBuilderState<T> extends State<APIBuilder<T>> {

@override
Widget build(BuildContext context) {
return VisibilityDetector(
key: widget.key ?? Key(hashCode.toString()),
onVisibilityChanged: (VisibilityInfo info) {
if (info.visibleFraction > 0) {
_refreshData();
final builder = FutureBuilder<T>(
future: _futureData,
builder: (context, snapshot) {
if (snapshot.hasError) {
print(snapshot.error);
WidgetsBinding.instance
.addPostFrameCallback((_) => toastification.show(
title: Text('API Request failed! ${snapshot.error}'),
autoCloseDuration: const Duration(seconds: 5),
type: ToastificationType.error,
));
}
if (snapshot.hasData) {
return widget.onData(snapshot.data!);
} else {
return widget.onLoad();
}
},
child: FutureBuilder<T>(
future: _futureData,
builder: (context, snapshot) {
if (snapshot.hasError) {
print(snapshot.error);
WidgetsBinding.instance
.addPostFrameCallback((_) => toastification.show(
title: Text('API Request failed! ${snapshot.error}'),
autoCloseDuration: const Duration(seconds: 5),
type: ToastificationType.error,
));
}
if (snapshot.hasData) {
return widget.onData(snapshot.data!);
} else {
return widget.onLoad();
}
},
),
);

if (widget.refreshOnComeback) {
return VisibilityDetector(
key: widget.key ?? Key(hashCode.toString()),
onVisibilityChanged: (VisibilityInfo info) {
if (info.visibleFraction > 0) {
_refreshData();
}
},
child: builder);
} else {
return builder;
}
}
}
1 change: 1 addition & 0 deletions frontend/lib/components/dashboard/recent_builds.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class RecentBuilds extends StatelessWidget {
APIBuilder(
onLoad: () => const Text("no data"),
controller: apiController,
refreshOnComeback: true,
onData: (t) {
if (t.isEmpty) {
return const TableInfo(title: "You have no builds yet");
Expand Down
3 changes: 2 additions & 1 deletion frontend/lib/components/dashboard/your_packages.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import '../api/ApiBuilder.dart';
import '../table_info.dart';

class YourPackages extends StatelessWidget {
YourPackages({super.key});
const YourPackages({super.key});

@override
Widget build(BuildContext context) {
Expand All @@ -32,6 +32,7 @@ class YourPackages extends StatelessWidget {
),
APIBuilder(
controller: apiController,
refreshOnComeback: true,
onData: (data) {
if (data.isEmpty) {
return const TableInfo(title: "You have no packages yet");
Expand Down

0 comments on commit 14fcc3d

Please sign in to comment.