Commit e8162ce

derdilla <derdilla06@gmail.com>
2023-07-10 18:17:33
add ConsistentFutureBuilder class
1 parent 228bb86
Changed files (1)
lib/components/consistent_future_builder.dart
@@ -0,0 +1,34 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+
+class ConsistentFutureBuilder<T> extends StatelessWidget {
+  final Future<T> future;
+  final Widget Function(BuildContext context, T result) onData;
+  
+  final Widget? onNotStarted;
+  final Widget? onWaiting;
+  final Widget? Function(BuildContext context, String errorMsg)? onError;
+  
+  const ConsistentFutureBuilder({super.key, required this.future, this.onNotStarted, this.onWaiting, this.onError, required this.onData});
+
+  @override
+  Widget build(BuildContext context) {
+    return FutureBuilder<T>(
+      future: future,
+      builder: (BuildContext context, AsyncSnapshot<T> snapshot) {
+        if (snapshot.hasError) {
+          return Text(AppLocalizations.of(context)!.error(snapshot.error.toString()));
+        }
+        switch (snapshot.connectionState) {
+          case ConnectionState.none:
+            return onNotStarted ?? Text(AppLocalizations.of(context)!.errNotStarted);
+          case ConnectionState.waiting:
+          case ConnectionState.active:
+            return onWaiting ?? Text(AppLocalizations.of(context)!.loading);
+          case ConnectionState.done:
+            return onData(context, snapshot.data as T);
+        }
+      });
+  }
+
+}
\ No newline at end of file