Optimize image cache size

This commit is contained in:
LittleSheep 2024-11-10 22:56:18 +08:00
parent a673beb87c
commit 5364aecf74
3 changed files with 37 additions and 15 deletions

View File

@ -1,6 +1,7 @@
import 'package:croppy/croppy.dart'; import 'package:croppy/croppy.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization_loader/easy_localization_loader.dart'; import 'package:easy_localization_loader/easy_localization_loader.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:relative_time/relative_time.dart'; import 'package:relative_time/relative_time.dart';
@ -15,6 +16,10 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized(); await EasyLocalization.ensureInitialized();
if (!kReleaseMode) {
debugInvertOversizedImages = true;
}
runApp(const SolianApp()); runApp(const SolianApp());
} }

View File

@ -23,10 +23,14 @@ class AttachmentItem extends StatelessWidget {
case 'image': case 'image':
return Hero( return Hero(
tag: 'attachment-${data.rid}-$heroTag', tag: 'attachment-${data.rid}-$heroTag',
child: UniversalImage( child: LayoutBuilder(builder: (context, constraints) {
sn.getAttachmentUrl(data.rid), return UniversalImage(
fit: BoxFit.cover, sn.getAttachmentUrl(data.rid),
), fit: BoxFit.cover,
cacheHeight: constraints.maxHeight,
cacheWidth: constraints.maxWidth,
);
}),
); );
default: default:
return const Placeholder(); return const Placeholder();

View File

@ -10,6 +10,8 @@ class AppBackground extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
return ScaffoldMessenger( return ScaffoldMessenger(
child: FutureBuilder( child: FutureBuilder(
future: future:
@ -21,17 +23,28 @@ class AppBackground extends StatelessWidget {
if (file.existsSync()) { if (file.existsSync()) {
return Container( return Container(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
child: Container( child: LayoutBuilder(
decoration: BoxDecoration( builder: (context, constraints) {
backgroundBlendMode: BlendMode.darken, return Container(
color: Theme.of(context).colorScheme.surface, decoration: BoxDecoration(
image: DecorationImage( backgroundBlendMode: BlendMode.darken,
opacity: 0.2, color: Theme.of(context).colorScheme.surface,
image: FileImage(file), image: DecorationImage(
fit: BoxFit.cover, opacity: 0.2,
), image: ResizeImage(
), FileImage(file),
child: child, width: (constraints.maxWidth * devicePixelRatio)
.round(),
height: (constraints.maxHeight * devicePixelRatio)
.round(),
policy: ResizeImagePolicy.fit,
),
fit: BoxFit.cover,
),
),
child: child,
);
},
), ),
); );
} }