preload app icons and bg

This commit is contained in:
2025-08-30 13:55:59 +02:00
parent 610fc4f855
commit 00983509d1
3 changed files with 56 additions and 11 deletions

View File

@@ -23,6 +23,9 @@ import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
import '../../../../helpers/db/widget.dart';
import '../../../../helpers/debug_helper.dart';
import '../../../../helpers/firka_bundle.dart';
import '../../../../helpers/image_preloader.dart';
import '../../../widget/delayed_spinner.dart';
import '../../../widget/firka_icon.dart';
import '../../pages/extras/extras.dart';
import '../../pages/extras/main_error.dart';
@@ -74,6 +77,7 @@ class _HomeScreenState extends State<HomeScreen> {
Widget? toast;
bool pairingDone = false;
bool _disposed = false;
bool _preloadDone = false;
final RefreshController _refreshController =
RefreshController(initialRefresh: false);
@@ -255,6 +259,28 @@ class _HomeScreenState extends State<HomeScreen> {
});
prefetch();
_preloadImages();
}
Future<void> _preloadImages() async {
final imagePaths = widget.data.settings.appIcons.keys
.map((icon) => "assets/images/icons/$icon.webp")
.toList();
imagePaths.add("assets/images/background.webp");
try {
await ImagePreloader.preloadMultipleAssets(FirkaBundle(), imagePaths);
setState(() {
_preloadDone = true;
});
} catch (e) {
debugPrint('Error preloading images: $e');
setState(() {
_preloadDone = true;
});
}
}
void _updateSystemUI() {
@@ -300,6 +326,23 @@ class _HomeScreenState extends State<HomeScreen> {
return SizedBox();
}
if (!_preloadDone) {
return Scaffold(
backgroundColor: appStyle.colors.background,
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [SizedBox(), DelayedSpinnerWidget(), SizedBox()],
),
SizedBox(),
],
),
);
}
if (widget.watchPair && !pairingDone) {
Timer.run(() {
showWearBottomSheet(context, widget.data, widget.model!);

View File

@@ -51,16 +51,13 @@ class _LoginScreenState extends State<LoginScreen> {
];
try {
// Preload with progress tracking
await ImagePreloader.preloadMultipleAssets(FirkaBundle(), imagePaths);
// All images are now decoded and cached
setState(() {
_preloadDone = true;
});
} catch (e) {
print('Error preloading images: $e');
// Fallback: continue anyway
debugPrint('Error preloading images: $e');
setState(() {
_preloadDone = true;
});

View File

@@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:firka/helpers/db/models/app_settings_model.dart';
import 'package:firka/helpers/image_preloader.dart';
import 'package:firka/helpers/ui/firka_button.dart';
import 'package:firka/helpers/ui/firka_card.dart';
import 'package:firka/main.dart';
@@ -234,7 +235,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
widgets.add(Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/background.webp'),
image: PreloadedImageProvider(
FirkaBundle(), ('assets/images/background.webp')),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(16)),
),
@@ -248,8 +250,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(16.0)),
child: Image.asset(
"assets/images/icons/$activeIcon.webp",
child: Image(
image: PreloadedImageProvider(FirkaBundle(),
"assets/images/icons/$activeIcon.webp"),
width: 74,
height: 74,
),
@@ -303,8 +306,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
child: ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(12.0)),
child: Image.asset(
"assets/images/icons/$icon.webp",
child: Image(
image: PreloadedImageProvider(FirkaBundle(),
"assets/images/icons/$icon.webp"),
width: 48,
height: 48,
),
@@ -314,8 +318,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
: ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(16.0)),
child: Image.asset(
"assets/images/icons/$icon.webp",
child: Image(
image: PreloadedImageProvider(FirkaBundle(),
"assets/images/icons/$icon.webp"),
width: 54,
height: 54,
),