10 Commits

Author SHA1 Message Date
048fb0ef43 Updated licenses [skip ci] 2026-02-07 20:19:54 +00:00
a4bc03111d Updated version number [skip ci] 2026-02-07 20:19:24 +00:00
00abc4d1c0 Merge pull request 'NavBar optimieren' (#189) from enhancement/188-navbar-optimieren into development
All checks were successful
Push Pipeline / test (push) Successful in 33s
Push Pipeline / update_version (push) Successful in 5s
Push Pipeline / generate_licenses (push) Successful in 28s
Push Pipeline / format (push) Successful in 53s
Push Pipeline / build (push) Successful in 6m2s
Reviewed-on: #189
Reviewed-by: gelbeinhalb <spam@yannick-weigert.de>
2026-02-07 20:18:46 +00:00
d4fcc8106f Removed spacing in navbar item
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 37s
Pull Request Pipeline / lint (pull_request) Successful in 44s
2026-02-07 20:21:46 +01:00
487efb4d61 Added type annotation
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 35s
Pull Request Pipeline / lint (pull_request) Successful in 46s
2026-02-06 14:07:43 +01:00
3f790cfbb1 Renamed variable 2026-02-06 14:04:16 +01:00
ee1962ef9c Implemented new nav bar 2026-02-06 14:03:57 +01:00
a4d4703069 Updated licenses [skip ci] 2026-02-06 12:32:19 +00:00
fabb7bae19 Updated version number [skip ci] 2026-02-06 12:31:47 +00:00
d1458443eb Added ref again
Some checks failed
Push Pipeline / update_version (push) Successful in 6s
Push Pipeline / build (push) Failing after 31s
Push Pipeline / generate_licenses (push) Successful in 30s
Push Pipeline / test (push) Successful in 38s
Push Pipeline / format (push) Successful in 41s
2026-01-26 14:47:26 +01:00
11 changed files with 105 additions and 135 deletions

View File

@@ -85,7 +85,6 @@ jobs:
strategy: 'patch' strategy: 'patch'
path: './pubspec.yaml' path: './pubspec.yaml'
- name: Commit version update - name: Commit version update
env: env:
GITEA_TOKEN: ${{ secrets.BOT_TOKEN }} GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
@@ -107,6 +106,7 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
token: ${{ secrets.BOT_TOKEN }} token: ${{ secrets.BOT_TOKEN }}
ref: ${{ gitea.ref_name }}
# Required for Flutter action # Required for Flutter action
- name: Install jq - name: Install jq

View File

@@ -13,13 +13,13 @@ class CustomTheme {
static const Color secondaryColor = Color(0xFFf2a981); static const Color secondaryColor = Color(0xFFf2a981);
/// Background color of the app theme /// Background color of the app theme
static const backgroundColor = Color(0xFF0B0B0B); static const Color backgroundColor = Color(0xFF0B0B0B);
/// Default color for boxes and containers /// Default color for boxes and containers
static const Color boxColor = Color(0xFF101010); static const Color boxColor = Color(0xFF101010);
/// Default border color for boxes and containers /// Default border color for boxes and containers
static const Color boxBorder = Color(0xFF272727); static const Color boxBorderColor = Color(0xFF272727);
/// Color for boxes and containers displayed on boxes /// Color for boxes and containers displayed on boxes
static const Color onBoxColor = Color(0xFF181818); static const Color onBoxColor = Color(0xFF181818);
@@ -27,6 +27,9 @@ class CustomTheme {
/// Text color used throughout the app /// Text color used throughout the app
static const Color textColor = Color(0xFFFFFFFF); static const Color textColor = Color(0xFFFFFFFF);
/// Background color for the navigation bar
static const Color navBarBackgroundColor = Color(0xFF131313);
/// Selected color for the [NavbarItem] /// Selected color for the [NavbarItem]
static Color navBarItemSelectedColor = primaryColor.withGreen(100); static Color navBarItemSelectedColor = primaryColor.withGreen(100);
@@ -51,7 +54,7 @@ class CustomTheme {
// ==================== Decorations ==================== // ==================== Decorations ====================
static BoxDecoration standardBoxDecoration = BoxDecoration( static BoxDecoration standardBoxDecoration = BoxDecoration(
color: boxColor, color: boxColor,
border: Border.all(color: boxBorder), border: Border.all(color: boxBorderColor),
borderRadius: standardBorderRadiusAll, borderRadius: standardBorderRadiusAll,
); );

View File

@@ -1,5 +1,3 @@
import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tallee/core/adaptive_page_route.dart'; import 'package:tallee/core/adaptive_page_route.dart';
import 'package:tallee/core/custom_theme.dart'; import 'package:tallee/core/custom_theme.dart';
@@ -75,66 +73,28 @@ class _CustomNavigationBarState extends State<CustomNavigationBar>
backgroundColor: CustomTheme.backgroundColor, backgroundColor: CustomTheme.backgroundColor,
body: tabs[currentIndex], body: tabs[currentIndex],
extendBody: true, extendBody: true,
bottomNavigationBar: SizedBox( bottomNavigationBar: Container(
height: 70 + MediaQuery.of(context).padding.bottom, height: 115,
child: Stack(
children: [
// Dynamically generated blur layers for ultra-smooth transition
...List.generate(34, (index) {
// Use cubic curve for an even more natural, smoother transition
final progress = index / 34.0; // 0.0 to 1.0
final cubic = progress * progress * progress; // cubic curve
final blurStrength =
0.5 + (cubic * 50.0); // Very smooth from 0.5 to 50.5
// Height goes completely from 100% to 0% (all the way down)
// With extra density at the bottom for softer transition
final heightFactor = index < 25
// First 25 layers: 100% to 30%
? 1.0 - (progress * 0.7)
// Last 10 layers: 30% to 0% (denser)
: 0.3 - ((index - 25) / 34.0);
return Positioned(
left: 0,
right: 0,
bottom: 0,
height:
(70 + MediaQuery.of(context).padding.bottom) *
heightFactor.clamp(0.05, 1.0),
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(
sigmaX: blurStrength,
sigmaY: blurStrength,
),
child: Container(color: Colors.transparent),
),
),
);
}),
// Gradient overlay
Positioned.fill(
child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
gradient: LinearGradient( color: CustomTheme.navBarBackgroundColor,
begin: Alignment.bottomCenter, border: Border.all(
end: Alignment.topCenter, strokeAlign: BorderSide.strokeAlignOutside,
colors: [ color: CustomTheme.boxBorderColor,
CustomTheme.boxColor.withValues(alpha: 1), width: 2,
CustomTheme.boxColor.withValues(alpha: 0.5), ),
CustomTheme.boxColor.withValues(alpha: 0.2), borderRadius: const BorderRadius.only(
CustomTheme.boxColor.withValues(alpha: 0.0), topLeft: Radius.circular(30),
topRight: Radius.circular(30),
),
boxShadow: [
BoxShadow(
color: Colors.black.withValues(alpha: 0.1),
blurRadius: 20,
offset: const Offset(0, -5),
),
], ],
stops: const [0.0, 0.4, 0.8, 1],
), ),
), child: SafeArea(
),
),
// Navbar content
SafeArea(
child: SizedBox(
height: 70,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[ children: <Widget>[
@@ -170,9 +130,6 @@ class _CustomNavigationBarState extends State<CustomNavigationBar>
), ),
), ),
), ),
],
),
),
); );
} }

View File

@@ -74,7 +74,7 @@ class _MatchResultViewState extends State<MatchResultView> {
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
color: CustomTheme.boxColor, color: CustomTheme.boxColor,
border: Border.all(color: CustomTheme.boxBorder), border: Border.all(color: CustomTheme.boxBorderColor),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
child: Column( child: Column(

View File

@@ -1396,13 +1396,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// cross_file 0.3.5+1 /// cross_file 0.3.5+2
const _cross_file = Package( const _cross_file = Package(
name: 'cross_file', name: 'cross_file',
description: 'An abstraction to allow working with files across multiple platforms.', description: 'An abstraction to allow working with files across multiple platforms.',
repository: 'https://github.com/flutter/packages/tree/main/packages/cross_file', repository: 'https://github.com/flutter/packages/tree/main/packages/cross_file',
authors: [], authors: [],
version: '0.3.5+1', version: '0.3.5+2',
spdxIdentifiers: ['BSD-3-Clause'], spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -1628,13 +1628,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// dbus 0.7.11 /// dbus 0.7.12
const _dbus = Package( const _dbus = Package(
name: 'dbus', name: 'dbus',
description: 'A native Dart implementation of the D-Bus message bus client. This package allows Dart applications to directly access services on the Linux desktop.', description: 'A native Dart implementation of the D-Bus message bus client. This package allows Dart applications to directly access services on the Linux desktop.',
homepage: 'https://github.com/canonical/dbus.dart', homepage: 'https://github.com/canonical/dbus.dart',
authors: [], authors: [],
version: '0.7.11', version: '0.7.12',
spdxIdentifiers: ['MPL-2.0'], spdxIdentifiers: ['MPL-2.0'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -2015,7 +2015,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice
defined by the Mozilla Public License, v. 2.0.''', defined by the Mozilla Public License, v. 2.0.''',
); );
/// dio 5.9.0 /// dio 5.9.1
const _dio = Package( const _dio = Package(
name: 'dio', name: 'dio',
description: '''A powerful HTTP networking package, description: '''A powerful HTTP networking package,
@@ -2026,7 +2026,7 @@ Custom adapters, Transformers, etc.
homepage: 'https://github.com/cfug/dio', homepage: 'https://github.com/cfug/dio',
repository: 'https://github.com/cfug/dio/blob/main/dio', repository: 'https://github.com/cfug/dio/blob/main/dio',
authors: [], authors: [],
version: '5.9.0', version: '5.9.1',
spdxIdentifiers: ['MIT'], spdxIdentifiers: ['MIT'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -2497,14 +2497,14 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// file_picker 10.3.8 /// file_picker 10.3.10
const _file_picker = Package( const _file_picker = Package(
name: 'file_picker', name: 'file_picker',
description: 'A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.', description: 'A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.',
homepage: 'https://github.com/miguelpruivo/plugins_flutter_file_picker', homepage: 'https://github.com/miguelpruivo/plugins_flutter_file_picker',
repository: 'https://github.com/miguelpruivo/flutter_file_picker', repository: 'https://github.com/miguelpruivo/flutter_file_picker',
authors: [], authors: [],
version: '10.3.8', version: '10.3.10',
spdxIdentifiers: ['MIT'], spdxIdentifiers: ['MIT'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -2947,13 +2947,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// hooks 1.0.0 /// hooks 1.0.1
const _hooks = Package( const _hooks = Package(
name: 'hooks', name: 'hooks',
description: 'A library that contains a Dart API for the JSON-based protocol for `hook/build.dart` and `hook/link.dart`.', description: 'A library that contains a Dart API for the JSON-based protocol for `hook/build.dart` and `hook/link.dart`.',
repository: 'https://github.com/dart-lang/native/tree/main/pkgs/hooks', repository: 'https://github.com/dart-lang/native/tree/main/pkgs/hooks',
authors: [], authors: [],
version: '1.0.0', version: '1.0.1',
spdxIdentifiers: ['BSD-3-Clause'], spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -3271,13 +3271,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// json_annotation 4.9.0 /// json_annotation 4.10.0
const _json_annotation = Package( const _json_annotation = Package(
name: 'json_annotation', name: 'json_annotation',
description: 'Classes and helper functions that support JSON code generation via the `json_serializable` package.', description: 'Classes and helper functions that support JSON code generation via the `json_serializable` package.',
repository: 'https://github.com/google/json_serializable.dart/tree/master/json_annotation', repository: 'https://github.com/google/json_serializable.dart/tree/master/json_annotation',
authors: [], authors: [],
version: '4.9.0', version: '4.10.0',
spdxIdentifiers: ['BSD-3-Clause'], spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -4085,13 +4085,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// objective_c 9.2.4 /// objective_c 9.3.0
const _objective_c = Package( const _objective_c = Package(
name: 'objective_c', name: 'objective_c',
description: 'A library to access Objective C from Flutter that acts as a support library for package:ffigen.', description: 'A library to access Objective C from Flutter that acts as a support library for package:ffigen.',
repository: 'https://github.com/dart-lang/native/tree/main/pkgs/objective_c', repository: 'https://github.com/dart-lang/native/tree/main/pkgs/objective_c',
authors: [], authors: [],
version: '9.2.4', version: '9.3.0',
spdxIdentifiers: ['BSD-3-Clause'], spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -5869,13 +5869,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''', OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
); );
/// source_span 1.10.1 /// source_span 1.10.2
const _source_span = Package( const _source_span = Package(
name: 'source_span', name: 'source_span',
description: 'Provides a standard representation for source code locations and spans.', description: 'Provides a standard representation for source code locations and spans.',
repository: 'https://github.com/dart-lang/tools/tree/main/pkgs/source_span', repository: 'https://github.com/dart-lang/tools/tree/main/pkgs/source_span',
authors: [], authors: [],
version: '1.10.1', version: '1.10.2',
spdxIdentifiers: ['BSD-3-Clause'], spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,
@@ -7499,12 +7499,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.''', SOFTWARE.''',
); );
/// tallee 0.0.13+247 /// tallee 0.0.16+250
const _tallee = Package( const _tallee = Package(
name: 'tallee', name: 'tallee',
description: 'Tracking App for Card Games', description: 'Tracking App for Card Games',
authors: [], authors: [],
version: '0.0.13+247', version: '0.0.16+250',
spdxIdentifiers: ['LGPL-3.0'], spdxIdentifiers: ['LGPL-3.0'],
isMarkdown: false, isMarkdown: false,
isSdk: false, isSdk: false,

View File

@@ -32,7 +32,7 @@ class CustomAlertDialog extends StatelessWidget {
actionsAlignment: MainAxisAlignment.spaceAround, actionsAlignment: MainAxisAlignment.spaceAround,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: CustomTheme.standardBorderRadiusAll, borderRadius: CustomTheme.standardBorderRadiusAll,
side: const BorderSide(color: CustomTheme.boxBorder), side: const BorderSide(color: CustomTheme.boxBorderColor),
), ),
); );
} }

View File

@@ -87,7 +87,17 @@ class _NavbarItemState extends State<NavbarItem>
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
ScaleTransition( AnimatedContainer(
width: 50,
height: 50,
decoration: BoxDecoration(
color: widget.isSelected
? CustomTheme.primaryColor.withAlpha(50)
: Colors.transparent,
borderRadius: const BorderRadius.all(Radius.circular(15)),
),
duration: const Duration(milliseconds: 200),
child: ScaleTransition(
scale: widget.isSelected scale: widget.isSelected
? _scaleAnimation ? _scaleAnimation
: const AlwaysStoppedAnimation(1.0), : const AlwaysStoppedAnimation(1.0),
@@ -99,7 +109,7 @@ class _NavbarItemState extends State<NavbarItem>
size: 32, size: 32,
), ),
), ),
const SizedBox(height: 4), ),
Text( Text(
widget.label, widget.label,
style: TextStyle( style: TextStyle(

View File

@@ -88,7 +88,7 @@ class CustomSearchBar extends StatelessWidget {
], ],
backgroundColor: WidgetStateProperty.all(CustomTheme.boxColor), backgroundColor: WidgetStateProperty.all(CustomTheme.boxColor),
side: WidgetStateProperty.all( side: WidgetStateProperty.all(
const BorderSide(color: CustomTheme.boxBorder), const BorderSide(color: CustomTheme.boxBorderColor),
), ),
shape: WidgetStateProperty.all( shape: WidgetStateProperty.all(
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),

View File

@@ -44,11 +44,11 @@ class TextInputField extends StatelessWidget {
counterText: '', counterText: '',
enabledBorder: const OutlineInputBorder( enabledBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12)), borderRadius: BorderRadius.all(Radius.circular(12)),
borderSide: BorderSide(color: CustomTheme.boxBorder), borderSide: BorderSide(color: CustomTheme.boxBorderColor),
), ),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12)), borderRadius: BorderRadius.all(Radius.circular(12)),
borderSide: BorderSide(color: CustomTheme.boxBorder), borderSide: BorderSide(color: CustomTheme.boxBorderColor),
), ),
floatingLabelBehavior: FloatingLabelBehavior.never, floatingLabelBehavior: FloatingLabelBehavior.never,
), ),

View File

@@ -31,7 +31,7 @@ class CustomRadioListTile<T> extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 2), padding: const EdgeInsets.symmetric(horizontal: 2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: CustomTheme.boxColor, color: CustomTheme.boxColor,
border: Border.all(color: CustomTheme.boxBorder), border: Border.all(color: CustomTheme.boxBorderColor),
borderRadius: CustomTheme.standardBorderRadiusAll, borderRadius: CustomTheme.standardBorderRadiusAll,
), ),
child: Row( child: Row(

View File

@@ -1,7 +1,7 @@
name: tallee name: tallee
description: "Tracking App for Card Games" description: "Tracking App for Card Games"
publish_to: 'none' publish_to: 'none'
version: 0.0.14+248 version: 0.0.16+250
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1