forked from firka/firka
preload app icons and bg
This commit is contained in:
@@ -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!);
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user