fix: хм

This commit is contained in:
Jganenokk
2026-08-20 21:46:19 +07:00
parent 3cfe3a3965
commit 2e8abe7e47
15 changed files with 540 additions and 180 deletions
+54 -6
View File
@@ -1,9 +1,12 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:komet/core/config/chat_wallpaper_themes.dart';
import 'package:komet/core/config/app_colors.dart';
import 'package:komet/core/storage/chat_wallpaper_store.dart';
import 'chat_wallpaper_view.dart';
import '../../core/config/app_fonts.dart';
enum WallpaperPickType { none, theme, gallery }
@@ -44,20 +47,21 @@ class ChatWallpaperGalleryScreen extends StatefulWidget {
class _ChatWallpaperGalleryScreenState
extends State<ChatWallpaperGalleryScreen> {
ChatWallpaperTheme? _selected;
bool _isImage = false;
bool _keepsImage = false;
@override
void initState() {
super.initState();
final current = widget.current;
_isImage = current?.isImage ?? false;
_keepsImage = current?.isImage ?? false;
_selected = current == null || current.isImage
? null
: chatWallpaperThemeById(current.themeId);
}
bool get _changed {
if (_isImage) return _selected != null;
if (_keepsImage) return false;
if (widget.current?.isImage == true) return true;
return _selected?.id != chatWallpaperThemeById(widget.current?.themeId)?.id;
}
@@ -101,6 +105,7 @@ class _ChatWallpaperGalleryScreenState
Widget _preview(ColorScheme cs) {
final theme = _selected;
final image = _keepsImage ? widget.current : null;
return Padding(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 12),
child: ClipRRect(
@@ -110,6 +115,8 @@ class _ChatWallpaperGalleryScreenState
children: [
if (theme != null)
theme.buildBackground()
else if (image != null)
ChatWallpaperView(wallpaper: image)
else
ColoredBox(color: cs.surfaceContainerHighest),
const IgnorePointer(child: _PreviewScrim()),
@@ -120,7 +127,21 @@ class _ChatWallpaperGalleryScreenState
);
}
Widget? _currentImageTile() {
final current = widget.current;
if (current == null || !current.isImage) return null;
return _CurrentImageTile(
wallpaper: current,
selected: _keepsImage,
onTap: () => setState(() {
_keepsImage = true;
_selected = null;
}),
);
}
Widget _panel(ColorScheme cs) {
final currentImage = _currentImageTile();
return Container(
decoration: BoxDecoration(
color: cs.surfaceContainerHigh,
@@ -138,11 +159,12 @@ class _ChatWallpaperGalleryScreenState
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.symmetric(horizontal: 16),
children: [
?currentImage,
_NoneTile(
selected: _selected == null && !_isImage,
selected: _selected == null && !_keepsImage,
onTap: () => setState(() {
_selected = null;
_isImage = false;
_keepsImage = false;
}),
),
for (final theme in kChatWallpaperThemes)
@@ -151,7 +173,7 @@ class _ChatWallpaperGalleryScreenState
selected: _selected?.id == theme.id,
onTap: () => setState(() {
_selected = theme;
_isImage = false;
_keepsImage = false;
}),
),
],
@@ -375,6 +397,32 @@ class _NoneTile extends StatelessWidget {
}
}
class _CurrentImageTile extends StatelessWidget {
final ChatWallpaper wallpaper;
final bool selected;
final VoidCallback onTap;
const _CurrentImageTile({
required this.wallpaper,
required this.selected,
required this.onTap,
});
@override
Widget build(BuildContext context) {
final cs = Theme.of(context).colorScheme;
final path = wallpaper.imagePath;
return _TileFrame(
selected: selected,
onTap: onTap,
label: 'Ваше фото',
child: path == null
? ColoredBox(color: cs.surfaceContainerHighest)
: Image.file(File(path), fit: BoxFit.cover),
);
}
}
class _ThemeTile extends StatelessWidget {
final ChatWallpaperTheme theme;
final bool selected;