From ec594595c92fb1e946391d84b8978d1ee3f75313 Mon Sep 17 00:00:00 2001
From: RarDog
-
+
diff --git a/lib/app/app_version.dart b/lib/app/app_version.dart
index 0e899b9..f059ecf 100644
--- a/lib/app/app_version.dart
+++ b/lib/app/app_version.dart
@@ -1,3 +1,3 @@
-const appDisplayVersion = '3.0.8';
-const appBuildNumber = 59;
+const appDisplayVersion = '3.0.9';
+const appBuildNumber = 60;
const appReleaseChannel = 'Stable';
diff --git a/lib/app/changelog.dart b/lib/app/changelog.dart
index a55fa78..ab9dcba 100644
--- a/lib/app/changelog.dart
+++ b/lib/app/changelog.dart
@@ -1,4 +1,13 @@
const lunarisChangelog = [
+ LunarisChange(
+ version: '3.0.9',
+ title: 'Коррекция позиции кнопки настроек и отображения кнопок JSON и бэкапа',
+ bullets: [
+ 'Оптимальная позиция кнопки настроек: парящая стеклянная кнопка опущена прямо к нижней навигационной панели, без избыточного завышения над карточками контента.',
+ 'Полная видимость кнопок JSON и бэкапа: добавлен увеличенный нижний отступ прокрутки в настройках, чтобы панель навигации не перекрывала кнопки при скролле до конца.',
+ 'Улучшенный дизайн и сетка кнопок экспорта/импорта: кнопки бэкапа и JSON организованы в симметричные аккуратные строки с яркими акцентными бейджами.',
+ ],
+ ),
LunarisChange(
version: '3.0.8',
title: 'iPhone Liquid Glass — раздел «Настройки» и парящая стеклянная кнопка',
diff --git a/lib/features/settings/presentation/settings_screen.dart b/lib/features/settings/presentation/settings_screen.dart
index 6b51da8..f769148 100644
--- a/lib/features/settings/presentation/settings_screen.dart
+++ b/lib/features/settings/presentation/settings_screen.dart
@@ -187,7 +187,12 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
- padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
+ padding: EdgeInsets.fromLTRB(
+ 16,
+ 12,
+ 16,
+ 120 + MediaQuery.paddingOf(context).bottom,
+ ),
child: Align(
alignment: Alignment.topCenter,
child: ConstrainedBox(
@@ -2547,35 +2552,64 @@ class _HeroBrandBanner extends StatelessWidget {
Text(
isRu ? 'Резервное копирование и экспорт' : 'Backup & JSON Export',
style: theme.textTheme.titleSmall?.copyWith(
- fontWeight: FontWeight.w600,
- color: theme.colorScheme.onSurfaceVariant,
+ fontWeight: FontWeight.w700,
+ letterSpacing: -0.2,
),
),
const SizedBox(height: 12),
- Wrap(
- spacing: 10,
- runSpacing: 10,
- alignment: WrapAlignment.center,
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
- OutlinedButton.icon(
- onPressed: onExportBackup,
- icon: const Icon(Icons.file_upload_rounded, size: 18),
- label: Text(isRu ? 'Экспорт бэкапа' : 'Export backup'),
+ Row(
+ children: [
+ Expanded(
+ child: OutlinedButton.icon(
+ onPressed: onExportBackup,
+ icon: const Icon(Icons.file_upload_rounded, size: 18),
+ label: Text(
+ isRu ? 'Экспорт бэкапа' : 'Export backup',
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ const SizedBox(width: 10),
+ Expanded(
+ child: OutlinedButton.icon(
+ onPressed: onImportBackup,
+ icon: const Icon(Icons.file_download_rounded, size: 18),
+ label: Text(
+ isRu ? 'Импорт бэкапа' : 'Import backup',
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ ],
),
- OutlinedButton.icon(
- onPressed: onImportBackup,
- icon: const Icon(Icons.file_download_rounded, size: 18),
- label: Text(isRu ? 'Импорт бэкапа' : 'Import backup'),
- ),
- OutlinedButton.icon(
- onPressed: onExportJson,
- icon: const Icon(Icons.upload_file_rounded, size: 18),
- label: const Text('JSON Export'),
- ),
- OutlinedButton.icon(
- onPressed: onImportJson,
- icon: const Icon(Icons.download_for_offline_rounded, size: 18),
- label: const Text('JSON Import'),
+ const SizedBox(height: 10),
+ Row(
+ children: [
+ Expanded(
+ child: FilledButton.tonalIcon(
+ onPressed: onExportJson,
+ icon: const Icon(Icons.data_object_rounded, size: 18),
+ label: Text(
+ isRu ? 'JSON Экспорт' : 'JSON Export',
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ const SizedBox(width: 10),
+ Expanded(
+ child: FilledButton.tonalIcon(
+ onPressed: onImportJson,
+ icon: const Icon(Icons.download_for_offline_rounded, size: 18),
+ label: Text(
+ isRu ? 'JSON Импорт' : 'JSON Import',
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ ],
),
],
),
diff --git a/lib/shared/widgets/app_shell.dart b/lib/shared/widgets/app_shell.dart
index a6ea203..1cb2f6d 100644
--- a/lib/shared/widgets/app_shell.dart
+++ b/lib/shared/widgets/app_shell.dart
@@ -297,7 +297,7 @@ class _MobileShell extends StatelessWidget {
floatingActionButton: location == '/settings'
? null
: Padding(
- padding: const EdgeInsets.only(bottom: 68, right: 4),
+ padding: const EdgeInsets.only(bottom: 0, right: 2),
child: _LiquidGlassSettingsButton(
ru: ru,
onTap: () => context.go('/settings'),
diff --git a/pubspec.yaml b/pubspec.yaml
index a0e2955..600608d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
name: gel_rule_app
description: Local backend/core layer for a Flutter booru browser app.
publish_to: "none"
-version: 3.0.8+59
+version: 3.0.9+60
environment:
sdk: ">=3.3.0 <4.0.0"