Compare commits

...
1 Commits
Author SHA1 Message Date
RarDog d5916e01b5 fix(artists): resolve double keyboard inset and white square bug during search (v3.5.2)
Build and Release / Build macOS (push) Has been cancelled
Build and Release / Build Windows x64 (push) Has been cancelled
2026-09-05 13:16:00 +03:00
6 changed files with 40 additions and 12 deletions
+2 -2
View File
@@ -1,3 +1,3 @@
const appDisplayVersion = '3.5.1'; const appDisplayVersion = '3.5.2';
const appBuildNumber = 77; const appBuildNumber = 78;
const appReleaseChannel = 'Stable'; const appReleaseChannel = 'Stable';
+9
View File
@@ -1,4 +1,13 @@
const prismaChangelog = [ const prismaChangelog = [
PrismaChange(
version: '3.5.2',
title: 'Исправление наложения клавиатуры и поиска авторов',
bullets: [
'Устранена ошибка выдвижения белого прямоугольника: исправлен конфликт двойного учета клавиатурного отступа (double viewInsets) во вложенных скаффолдах.',
'Корректная видимость авторов: карточки артистов больше не сжимаются и остаются полностью видимыми и прокручиваемыми при вводе запроса.',
'Улучшенное поведение интерфейса: плавающая кнопка настроек и нижняя панель скрываются при открытии клавиатуры, добавлен свайп для скрытия клавиатуры при прокрутке.',
],
),
PrismaChange( PrismaChange(
version: '3.5.1', version: '3.5.1',
title: 'Улучшение панели поиска и фильтров авторов в Liquid Glass', title: 'Улучшение панели поиска и фильтров авторов в Liquid Glass',
@@ -97,7 +97,11 @@ class _ArtistsScreenState extends ConsumerState<ArtistsScreen> {
void initState() { void initState() {
super.initState(); super.initState();
_scroll.addListener(() { _scroll.addListener(() {
if (_scroll.position.extentAfter < 500) _loadMore(); if (_scroll.hasClients &&
_scroll.position.hasContentDimensions &&
_scroll.position.extentAfter < 500) {
_loadMore();
}
}); });
} }
@@ -128,6 +132,7 @@ class _ArtistsScreenState extends ConsumerState<ArtistsScreen> {
return AdaptiveScaffold( return AdaptiveScaffold(
title: 'Artists', title: 'Artists',
resizeToAvoidBottomInset: false,
actions: [ actions: [
IconButton( IconButton(
tooltip: 'Синхронизация Pawchive', tooltip: 'Синхронизация Pawchive',
@@ -252,6 +257,8 @@ class _ArtistsScreenState extends ConsumerState<ArtistsScreen> {
: 1; : 1;
return GridView.builder( return GridView.builder(
controller: _scroll, controller: _scroll,
keyboardDismissBehavior:
ScrollViewKeyboardDismissBehavior.onDrag,
padding: padding:
const EdgeInsets.fromLTRB(16, 10, 16, 18), const EdgeInsets.fromLTRB(16, 10, 16, 18),
gridDelegate: gridDelegate:
@@ -594,6 +601,7 @@ class _ArtistsHeader extends StatelessWidget {
child: TextField( child: TextField(
controller: searchController, controller: searchController,
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
autocorrect: false,
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 14,
color: isDark ? Colors.white : const Color(0xFF0F172A), color: isDark ? Colors.white : const Color(0xFF0F172A),
@@ -9,6 +9,7 @@ class AdaptiveScaffold extends StatelessWidget {
this.titleWidget, this.titleWidget,
this.actions = const [], this.actions = const [],
this.floatingActionButton, this.floatingActionButton,
this.resizeToAvoidBottomInset = false,
super.key, super.key,
}); });
@@ -17,11 +18,13 @@ class AdaptiveScaffold extends StatelessWidget {
final Widget body; final Widget body;
final List<Widget> actions; final List<Widget> actions;
final Widget? floatingActionButton; final Widget? floatingActionButton;
final bool resizeToAvoidBottomInset;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (Responsive.isMobile(context)) { if (Responsive.isMobile(context)) {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: resizeToAvoidBottomInset,
appBar: AppBar( appBar: AppBar(
title: titleWidget ?? Text(title), title: titleWidget ?? Text(title),
actions: actions, actions: actions,
@@ -35,6 +38,7 @@ class AdaptiveScaffold extends StatelessWidget {
); );
} }
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: resizeToAvoidBottomInset,
appBar: AppBar(title: titleWidget ?? Text(title), actions: actions), appBar: AppBar(title: titleWidget ?? Text(title), actions: actions),
body: body, body: body,
floatingActionButton: floatingActionButton, floatingActionButton: floatingActionButton,
+15 -8
View File
@@ -352,19 +352,23 @@ class _MobileShell extends StatelessWidget {
? location == '/' ? location == '/'
: location.startsWith(item.location), : location.startsWith(item.location),
); );
final bottomInset = 76.0 + MediaQuery.paddingOf(context).bottom; final isKeyboardOpen = MediaQuery.viewInsetsOf(context).bottom > 0;
final bottomInset = isKeyboardOpen
? 0.0
: 76.0 + MediaQuery.paddingOf(context).bottom;
return Scaffold( return Scaffold(
extendBody: true, extendBody: true,
body: MediaQuery( body: MediaQuery(
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
viewInsets: MediaQuery.of(context).viewInsets.copyWith(bottom: 0),
padding: MediaQuery.of(context).padding.copyWith( padding: MediaQuery.of(context).padding.copyWith(
bottom: bottomInset, bottom: bottomInset,
), ),
), ),
child: child, child: child,
), ),
floatingActionButton: location == '/settings' floatingActionButton: (location == '/settings' || isKeyboardOpen)
? null ? null
: Padding( : Padding(
padding: const EdgeInsets.only(bottom: 0, right: 2), padding: const EdgeInsets.only(bottom: 0, right: 2),
@@ -374,12 +378,15 @@ class _MobileShell extends StatelessWidget {
), ),
), ),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
bottomNavigationBar: _LiquidGlassBottomBar( bottomNavigationBar: isKeyboardOpen
selectedIndex: selected < 0 ? 0 : selected, ? null
onDestinationSelected: (index) => context.go(items[index].location), : _LiquidGlassBottomBar(
items: items, selectedIndex: selected < 0 ? 0 : selected,
ru: ru, onDestinationSelected: (index) =>
), context.go(items[index].location),
items: items,
ru: ru,
),
); );
} }
} }
+1 -1
View File
@@ -1,7 +1,7 @@
name: gel_rule_app name: gel_rule_app
description: Local backend/core layer for a Flutter booru browser app. description: Local backend/core layer for a Flutter booru browser app.
publish_to: "none" publish_to: "none"
version: 3.5.1+77 version: 3.5.2+78
environment: environment:
sdk: ">=3.3.0 <4.0.0" sdk: ">=3.3.0 <4.0.0"