Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bae64cd8c2 | ||
|
|
5586fea6b3 | ||
|
|
d0419fdf80 |
@@ -10,7 +10,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/RarDog/Lunaris/releases"><img src="https://img.shields.io/badge/Version-3.0.1-8A2BE2?style=for-the-badge&logo=semver&logoColor=white" alt="Version 3.0.1" /></a>
|
||||
<a href="https://github.com/RarDog/Lunaris/releases"><img src="https://img.shields.io/badge/Version-3.0.4-8A2BE2?style=for-the-badge&logo=semver&logoColor=white" alt="Version 3.0.4" /></a>
|
||||
<img src="https://img.shields.io/badge/Flutter-3.47+-02569B?style=for-the-badge&logo=flutter&logoColor=white" alt="Flutter" />
|
||||
<img src="https://img.shields.io/badge/Platform-Android%20%7C%20Linux%20%7C%20Windows-00C853?style=for-the-badge" alt="Platforms" />
|
||||
<a href="https://github.com/RarDog/Lunaris/wiki"><img src="https://img.shields.io/badge/Wiki-Documentation-FF6F00?style=for-the-badge&logo=gitbook&logoColor=white" alt="Wiki" /></a>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
const appDisplayVersion = '3.0.2';
|
||||
const appBuildNumber = 53;
|
||||
const appDisplayVersion = '3.0.4';
|
||||
const appBuildNumber = 55;
|
||||
const appReleaseChannel = 'Stable';
|
||||
|
||||
@@ -1005,13 +1005,13 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
|
||||
// Option 1: Gitea (Recommended for speed)
|
||||
// Option 1: GitHub (Recommended for speed)
|
||||
Material(
|
||||
color: theme.colorScheme.primaryContainer.withValues(alpha: 0.35),
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
onTap: () => Navigator.pop(sheetContext, UpdateSource.gitea),
|
||||
onTap: () => Navigator.pop(sheetContext, UpdateSource.github),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Row(
|
||||
@@ -1037,7 +1037,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'Gitea',
|
||||
'GitHub',
|
||||
style: theme.textTheme.titleSmall?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
@@ -1087,13 +1087,13 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Option 2: GitHub (Muted / neutral grey)
|
||||
// Option 2: Gitea (Muted / neutral grey)
|
||||
Material(
|
||||
color: theme.colorScheme.surfaceContainerHighest.withValues(alpha: 0.25),
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
onTap: () => Navigator.pop(sheetContext, UpdateSource.github),
|
||||
onTap: () => Navigator.pop(sheetContext, UpdateSource.gitea),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Row(
|
||||
@@ -1106,7 +1106,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: Icon(
|
||||
Icons.code_rounded,
|
||||
Icons.dns_rounded,
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
size: 22,
|
||||
),
|
||||
@@ -1117,7 +1117,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'GitHub',
|
||||
'Gitea',
|
||||
style: theme.textTheme.titleSmall?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
@@ -1126,8 +1126,8 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
|
||||
const SizedBox(height: 3),
|
||||
Text(
|
||||
isRu
|
||||
? 'Глобальное зеркало релизов'
|
||||
: 'Global release mirror',
|
||||
? 'Сервер релизов'
|
||||
: 'Release server',
|
||||
style: theme.textTheme.bodySmall?.copyWith(
|
||||
color: theme.colorScheme.onSurfaceVariant.withValues(alpha: 0.7),
|
||||
),
|
||||
|
||||
@@ -192,23 +192,46 @@ class _TagInputSearchBarState extends State<TagInputSearchBar> {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
final screenSize = MediaQuery.sizeOf(context);
|
||||
final renderBox =
|
||||
_fieldKey.currentContext?.findRenderObject() as RenderBox?;
|
||||
final width =
|
||||
final fieldWidth =
|
||||
renderBox?.hasSize == true ? renderBox!.size.width : 360.0;
|
||||
final height =
|
||||
final fieldHeight =
|
||||
renderBox?.hasSize == true ? renderBox!.size.height : 48.0;
|
||||
|
||||
final screenW = screenSize.width;
|
||||
// Substantially wider dropdown:
|
||||
// Mobile (< 600px): use full screen width minus comfortable 24px margins.
|
||||
// Desktop/Tablet (>= 600px): expand to 1.35x field width, up to 780px.
|
||||
final dropdownWidth = screenW < 600
|
||||
? (screenW - 24.0).clamp(fieldWidth, 580.0)
|
||||
: (fieldWidth * 1.35).clamp(fieldWidth, (screenW - 32.0).clamp(fieldWidth, 780.0));
|
||||
|
||||
// Ensure dropdown stays fully on screen and doesn't get clipped
|
||||
double dxOffset = 0.0;
|
||||
if (renderBox?.hasSize == true && renderBox?.attached == true) {
|
||||
final globalPos = renderBox!.localToGlobal(Offset.zero);
|
||||
final globalRight = globalPos.dx + dropdownWidth;
|
||||
final maxRight = screenW - 12.0;
|
||||
if (globalRight > maxRight) {
|
||||
dxOffset = maxRight - globalRight;
|
||||
}
|
||||
if (globalPos.dx + dxOffset < 12.0) {
|
||||
dxOffset = 12.0 - globalPos.dx;
|
||||
}
|
||||
}
|
||||
|
||||
return CompositedTransformFollower(
|
||||
link: _layerLink,
|
||||
showWhenUnlinked: false,
|
||||
offset: Offset(0, height + 6),
|
||||
offset: Offset(dxOffset, fieldHeight + 6),
|
||||
child: Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: TapRegion(
|
||||
groupId: _fieldKey,
|
||||
child: SizedBox(
|
||||
width: width.clamp(280.0, 620.0),
|
||||
width: dropdownWidth,
|
||||
child: _TagSuggestionDropdown(
|
||||
suggestions: suggestions,
|
||||
query: token,
|
||||
@@ -565,7 +588,7 @@ class _TagSuggestionDropdown extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
final scheme = Theme.of(context).colorScheme;
|
||||
return ConstrainedBox(
|
||||
constraints: const BoxConstraints(maxWidth: 620),
|
||||
constraints: const BoxConstraints(maxWidth: 820),
|
||||
child: Material(
|
||||
elevation: 8,
|
||||
shadowColor: Colors.black.withValues(alpha: 0.18),
|
||||
@@ -641,7 +664,7 @@ class _TagSuggestionDropdown extends StatelessWidget {
|
||||
if (cleanToken.isEmpty) {
|
||||
return Text(
|
||||
text,
|
||||
maxLines: 1,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: defaultStyle,
|
||||
);
|
||||
@@ -653,7 +676,7 @@ class _TagSuggestionDropdown extends StatelessWidget {
|
||||
if (matchIndex < 0) {
|
||||
return Text(
|
||||
text,
|
||||
maxLines: 1,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: defaultStyle,
|
||||
);
|
||||
@@ -678,7 +701,7 @@ class _TagSuggestionDropdown extends StatelessWidget {
|
||||
if (after.isNotEmpty) TextSpan(text: after),
|
||||
],
|
||||
),
|
||||
maxLines: 1,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
);
|
||||
}
|
||||
|
||||
+1
-1
@@ -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.2+53
|
||||
version: 3.0.4+55
|
||||
|
||||
environment:
|
||||
sdk: ">=3.3.0 <4.0.0"
|
||||
|
||||
Reference in New Issue
Block a user