diff --git a/.gitea/workflows/pull_request.yaml b/.gitea/workflows/pull_request.yaml
index 43d36d2..26f4404 100644
--- a/.gitea/workflows/pull_request.yaml
+++ b/.gitea/workflows/pull_request.yaml
@@ -10,22 +10,22 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
+ # Required for Flutter action
- name: Install jq
run: |
apt-get update
apt-get install -y jq
- - name: Install Flutter (wget)
- run: |
- wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.38.2-stable.tar.xz
- tar xf flutter_linux_3.38.2-stable.tar.xz
- # Set Git safe directory for Flutter path
- git config --global --add safe.directory "$(pwd)/flutter"
- # Set Flutter path
- echo "$(pwd)/flutter/bin" >> $GITHUB_PATH
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
- name: Get dependencies
- run: flutter pub get
+ run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
+ flutter pub get
- name: Analyze Formatting
run: flutter analyze lib test
@@ -36,22 +36,22 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- - name: Install dependencies
+ # Required for Flutter action
+ - name: Install jq
run: |
apt-get update
apt-get install -y jq
- - name: Install Flutter (wget)
- run: |
- wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.38.2-stable.tar.xz
- tar xf flutter_linux_3.38.2-stable.tar.xz
- # Set Git safe directory for Flutter path
- git config --global --add safe.directory "$(pwd)/flutter"
- # Set Flutter path
- echo "$(pwd)/flutter/bin" >> $GITHUB_PATH
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
- name: Get dependencies
- run: flutter pub get
+ run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
+ flutter pub get
- name: Run tests
- run: flutter test
\ No newline at end of file
+ run: flutter test
diff --git a/.gitea/workflows/push.yaml b/.gitea/workflows/push.yaml
index 700e96b..e24f7ad 100644
--- a/.gitea/workflows/push.yaml
+++ b/.gitea/workflows/push.yaml
@@ -7,44 +7,194 @@ on:
- "main"
jobs:
- format:
+ build:
runs-on: ubuntu-latest
- if: false # Needs bot user
steps:
- name: Checkout code
uses: actions/checkout@v4
- - name: Install dependencies
+ - name: Setup Java (Temurin 17)
+ uses: actions/setup-java@v3
+ with:
+ distribution: temurin
+ java-version: '17'
+
+ - name: Setup Android SDK
+ uses: android-actions/setup-android@v3
+
+ # Required for Flutter action
+ - name: Install jq
run: |
apt-get update
apt-get install -y jq
- - name: Install Flutter (wget)
- run: |
- wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.38.2-stable.tar.xz
- tar xf flutter_linux_3.38.2-stable.tar.xz
- # Set Git safe directory for Flutter path
- git config --global --add safe.directory "$(pwd)/flutter"
- # Set Flutter path
- echo "$(pwd)/flutter/bin" >> $GITHUB_PATH
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
- - name: Get & upgrade dependencies
+ - name: Get dependencies
run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
flutter pub get
- flutter pub upgrade --major-versions
- - name: Auto-format
- run: |
- dart format lib
- dart fix --apply lib
+ - name: Build APK
+ run: flutter build apk --release
+
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
- # Needs credentials, push access and the right files need to be staged
- - name: Commit Changes
+ # Required for Flutter action
+ - name: Install jq
run: |
- git config --global user.name "Gitea Actions"
- git config --global user.email "actions@gitea.com"
- git status
- git add lib/
- git status
- git commit -m "Actions: Auto-formatting [skip ci]"
- git push
+ apt-get update
+ apt-get install -y jq
+
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
+
+ - name: Get dependencies
+ run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
+ flutter pub get
+
+ - name: Run tests
+ run: flutter test
+
+ update_version:
+ runs-on: ubuntu-latest
+ if: gitea.ref == 'refs/heads/development'
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.BOT_TOKEN }}
+ ref: ${{ gitea.ref_name }}
+
+ - name: Increment version number
+ uses: stikkyapp/update-pubspec-version@v2
+ with:
+ strategy: 'patch'
+ path: './pubspec.yaml'
+
+ - name: Commit version update
+ env:
+ GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
+ run: |
+ git config --global user.name "Gitea Actions [bot]"
+ git config --global user.email "actions@yannick-weigert.de"
+ git config pull.rebase false
+ git pull origin ${{ gitea.ref_name }}
+ git add pubspec.yaml
+ git commit -m "Updated version number [skip ci]"
+ git push origin HEAD:${{ gitea.ref_name }}
+
+ generate_licenses:
+ runs-on: ubuntu-latest
+ needs: update_version
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.BOT_TOKEN }}
+ ref: ${{ gitea.ref_name }}
+
+ # Required for Flutter action
+ - name: Install jq
+ run: |
+ apt-get update
+ apt-get install -y jq
+
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
+
+ - name: Get dependencies
+ run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
+ flutter pub get
+
+ - name: Generate oss_licenses.dart
+ run: flutter pub run dart_pubspec_licenses:generate -o lib/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart
+
+ - name: Commit license update
+ env:
+ GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
+ run: |
+ if [ -n "$(git status --porcelain lib test)" ]; then
+ git config --global user.name "Gitea Actions [bot]"
+ git config --global user.email "actions@yannick-weigert.de"
+ git config pull.rebase false
+ git pull origin ${{ gitea.ref_name }}
+ git add lib test
+ git commit -m "Updated licenses [skip ci]"
+ git push origin HEAD:${{ gitea.ref_name }}
+ else
+ echo "No changes to commit"
+ fi
+
+ format:
+ runs-on: ubuntu-latest
+ needs: [update_version, generate_licenses]
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ # Required for Flutter action
+ - name: Install jq
+ run: |
+ apt-get update
+ apt-get install -y jq
+
+ - name: Set up Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ flutter-version: 3.38.6
+
+ - name: Get dependencies
+ run: |
+ git config --global --add safe.directory /opt/hostedtoolcache/flutter/stable-3.38.6-x64
+ flutter pub get
+
+ - name: Check code format
+ id: check_format
+ continue-on-error: true
+ run: flutter analyze lib test
+
+ - name: Format code
+ if: steps.check_format.outcome == 'failure'
+ env:
+ GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
+ run: |
+ git fetch origin ${{ gitea.ref_name }}
+ git checkout ${{ gitea.ref_name }}
+
+ dart fix --apply lib
+ dart fix --apply test
+
+ if [ -n "$(git status --porcelain lib test)" ]; then
+ git config --global user.name "Gitea Actions [bot]"
+ git config --global user.email "actions@yannick-weigert.de"
+ git config pull.rebase false
+ git pull origin ${{ gitea.ref_name }}
+ git add lib test
+ git commit -m "Auto-format code [skip ci]"
+ git push origin HEAD:${{ gitea.ref_name }}
+ else
+ echo "No changes to commit"
+ fi
+
+ - name: Verify format
+ run: flutter analyze lib test
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..d6e91f5
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,13 @@
+# Contributing
+
+## Code of Conduct
+
+``
+
+## Code Style
+
+``
+
+## Repository structure
+
+``
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..153d416
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
\ No newline at end of file
diff --git a/README.md b/README.md
index 4d5b30c..70ab8e6 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,63 @@
-# Game Tracker
+
+
+
Tallee
+
+
+An open-source app to track card- and board games, manage players & groups and get statistics about your played games.
+
+
+## Contributing
+
+Contributions are welcome! If you find a bug or have a feature request, please open an issue on GitHub. If you'd like to
+contribute code, feel free to fork the repository and submit a pull request. For contribution guidelines, please refer
+to [CONTRIBUTING.md](CONTRIBUTING.md).
+
+## License
+
+This project is licensed under the GNU LGPLv3 License. See the [LICENSE](LICENSE) file for details.
+
+## Contributors
+
+
+
+
+
+
+## Credits
+
+Tallee is developed and maintained by [Liquid Development](https://liquid-dev.de). For more information or support regarding Tallee, contact us through our website or [hello@liquid-dev.de](mailto:hello@liquid-dev.de).
+
+
-
-
-
-A all-in-one app to track card- and board games, manage players and groups and get statistics about your played games.
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index edde6d6..0d5c4b8 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -6,7 +6,7 @@ plugins {
}
android {
- namespace = "com.example.game_tracker"
+ namespace = "de.liquid.tallee"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
@@ -21,7 +21,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId = "com.example.game_tracker"
+ applicationId = "de.liquid.tallee"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 3c48c4a..e722349 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
- #E6F1E4
- #0B0B0B
+ #ef681f
\ No newline at end of file
diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml
index 2971c37..fd4cd85 100644
--- a/android/app/src/main/res/values/ic_launcher_background.xml
+++ b/android/app/src/main/res/values/ic_launcher_background.xml
@@ -1,5 +1,4 @@
-
- @color/app_icon_background
+ #EF681F
\ No newline at end of file
diff --git a/artefacts/app-logo.png b/artefacts/app-logo.png
new file mode 100644
index 0000000..a89cc43
Binary files /dev/null and b/artefacts/app-logo.png differ
diff --git a/artefacts/screenshot-1.png b/artefacts/screenshot-1.png
new file mode 100644
index 0000000..34e75bd
Binary files /dev/null and b/artefacts/screenshot-1.png differ
diff --git a/artefacts/screenshot-2.png b/artefacts/screenshot-2.png
new file mode 100644
index 0000000..541be8b
Binary files /dev/null and b/artefacts/screenshot-2.png differ
diff --git a/artefacts/screenshot-3.png b/artefacts/screenshot-3.png
new file mode 100644
index 0000000..bfa3b7e
Binary files /dev/null and b/artefacts/screenshot-3.png differ
diff --git a/artefacts/screenshot-4.png b/artefacts/screenshot-4.png
new file mode 100644
index 0000000..ef00e29
Binary files /dev/null and b/artefacts/screenshot-4.png differ
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 8358b1c..27638af 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -152,7 +152,6 @@
B68CF4A64F0B5E45B43D6900 /* Pods-RunnerTests.release.xcconfig */,
E754D1191B3E54E52B6DCC49 /* Pods-RunnerTests.profile.xcconfig */,
);
- name = Pods;
path = Pods;
sourceTree = "";
};
@@ -478,7 +477,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTracker;
+ PRODUCT_BUNDLE_IDENTIFIER = de.liquid.tallee;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -661,7 +660,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTracker;
+ PRODUCT_BUNDLE_IDENTIFIER = de.liquid.tallee;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -684,7 +683,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTracker;
+ PRODUCT_BUNDLE_IDENTIFIER = de.liquid.tallee;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..94edbb6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..11f8618
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..165a8a8
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..b346952
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..8745a0f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..9b48058
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..11c79f1
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..6a99099
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..ec9f3f6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..ee015b2
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..ebb1b76
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index 45d1e86..73d3b7f 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,14 +1 @@
-{
- "images" : [
- {
- "filename" : "icon_x1024.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"}]}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_x1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_x1024.png
deleted file mode 100644
index 1abba4a..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_x1024.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/LauncherBackgroundColor.colorset/Contents.json b/ios/Runner/Assets.xcassets/LauncherColor.colorset/Contents.json
similarity index 74%
rename from ios/Runner/Assets.xcassets/LauncherBackgroundColor.colorset/Contents.json
rename to ios/Runner/Assets.xcassets/LauncherColor.colorset/Contents.json
index 41fe6c8..7356209 100644
--- a/ios/Runner/Assets.xcassets/LauncherBackgroundColor.colorset/Contents.json
+++ b/ios/Runner/Assets.xcassets/LauncherColor.colorset/Contents.json
@@ -5,9 +5,9 @@
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
- "blue" : "0.043",
- "green" : "0.043",
- "red" : "0.043"
+ "blue" : "0.122",
+ "green" : "0.408",
+ "red" : "0.937"
}
},
"idiom" : "universal"
diff --git a/ios/Runner/Assets.xcassets/LauncherIcon.imageset/Contents.json b/ios/Runner/Assets.xcassets/LauncherIcon.imageset/Contents.json
index 2945b36..06ddd98 100644
--- a/ios/Runner/Assets.xcassets/LauncherIcon.imageset/Contents.json
+++ b/ios/Runner/Assets.xcassets/LauncherIcon.imageset/Contents.json
@@ -1,17 +1,8 @@
{
"images" : [
{
- "filename" : "icon.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
+ "filename" : "icon-transparent.png",
+ "idiom" : "universal"
}
],
"info" : {
diff --git a/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon-transparent.png b/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon-transparent.png
new file mode 100644
index 0000000..f926570
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon-transparent.png differ
diff --git a/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon.png b/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon.png
deleted file mode 100644
index ee71baa..0000000
Binary files a/ios/Runner/Assets.xcassets/LauncherIcon.imageset/icon.png and /dev/null differ
diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard
index fb29ee2..28d0ddf 100644
--- a/ios/Runner/Base.lproj/LaunchScreen.storyboard
+++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -1,9 +1,9 @@
-
+
-
+
@@ -20,12 +20,19 @@
+
-
+
@@ -36,8 +43,8 @@
-
-
+
+
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 8db75d8..7e79382 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -2,10 +2,12 @@
+ CADisableMinimumFrameDurationOnPhone
+ CFBundleDevelopmentRegion$(DEVELOPMENT_LANGUAGE)CFBundleDisplayName
- Game Tracker
+ TalleeCFBundleExecutable$(EXECUTABLE_NAME)CFBundleIdentifier
@@ -13,7 +15,7 @@
CFBundleInfoDictionaryVersion6.0CFBundleName
- game_tracker
+ talleeCFBundlePackageTypeAPPLCFBundleShortVersionString
@@ -22,13 +24,15 @@
????CFBundleVersion$(FLUTTER_BUILD_NUMBER)
+ LSApplicationQueriesSchemes
+
+ https
+ http
+ LSRequiresIPhoneOS
- LSApplicationQueriesSchemes
-
- https
- http
-
+ UIApplicationSupportsIndirectInputEvents
+ UILaunchStoryboardNameLaunchScreenUIMainStoryboardFile
@@ -44,9 +48,5 @@
UIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRight
- CADisableMinimumFrameDurationOnPhone
-
- UIApplicationSupportsIndirectInputEvents
-
-
\ No newline at end of file
+
diff --git a/lib/core/custom_theme.dart b/lib/core/custom_theme.dart
index 2c18073..0e9fec2 100644
--- a/lib/core/custom_theme.dart
+++ b/lib/core/custom_theme.dart
@@ -7,25 +7,28 @@ class CustomTheme {
// ==================== Colors ====================
/// Primary color of the app theme
- static Color primaryColor = const Color(0xFF7505E4);
+ static const Color primaryColor = Color(0xFFef681f);
/// Secondary color of the app theme
- static Color secondaryColor = const Color(0xFFAFA2FF);
+ static const Color secondaryColor = Color(0xFFf2a981);
/// Background color of the app theme
- static Color backgroundColor = const Color(0xFF0B0B0B);
+ static const Color backgroundColor = Color(0xFF0B0B0B);
/// Default color for boxes and containers
- static Color boxColor = const Color(0xFF101010);
+ static const Color boxColor = Color(0xFF101010);
/// Default border color for boxes and containers
- static Color boxBorder = const Color(0xFF272727);
+ static const Color boxBorderColor = Color(0xFF272727);
/// Color for boxes and containers displayed on boxes
- static Color onBoxColor = const Color(0xFF181818);
+ static const Color onBoxColor = Color(0xFF181818);
/// Text color used throughout the app
- static const Color textColor = Colors.white;
+ static const Color textColor = Color(0xFFFFFFFF);
+
+ /// Background color for the navigation bar
+ static const Color navBarBackgroundColor = Color(0xFF131313);
/// Selected color for the [NavbarItem]
static Color navBarItemSelectedColor = primaryColor.withGreen(100);
@@ -51,7 +54,7 @@ class CustomTheme {
// ==================== Decorations ====================
static BoxDecoration standardBoxDecoration = BoxDecoration(
color: boxColor,
- border: Border.all(color: boxBorder),
+ border: Border.all(color: boxBorderColor),
borderRadius: standardBorderRadiusAll,
);
@@ -63,18 +66,18 @@ class CustomTheme {
);
// ==================== App Bar Theme ====================
- static AppBarTheme appBarTheme = AppBarTheme(
+ static const AppBarTheme appBarTheme = AppBarTheme(
backgroundColor: backgroundColor,
foregroundColor: textColor,
elevation: 0,
scrolledUnderElevation: 0,
centerTitle: true,
- titleTextStyle: const TextStyle(
+ titleTextStyle: TextStyle(
color: textColor,
fontSize: 20,
fontWeight: FontWeight.bold,
overflow: TextOverflow.ellipsis,
),
- iconTheme: const IconThemeData(color: textColor),
+ iconTheme: IconThemeData(color: textColor),
);
}
diff --git a/lib/core/enums.dart b/lib/core/enums.dart
index 17a01f6..53288e3 100644
--- a/lib/core/enums.dart
+++ b/lib/core/enums.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
/// Button types used for styling the [CustomWidthButton]
/// - [ButtonType.primary]: Primary button style.
diff --git a/lib/data/dao/group_dao.dart b/lib/data/dao/group_dao.dart
index 98c602a..086cb2d 100644
--- a/lib/data/dao/group_dao.dart
+++ b/lib/data/dao/group_dao.dart
@@ -1,9 +1,9 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/group_table.dart';
-import 'package:game_tracker/data/db/tables/player_group_table.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/group_table.dart';
+import 'package:tallee/data/db/tables/player_group_table.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
part 'group_dao.g.dart';
diff --git a/lib/data/dao/group_match_dao.dart b/lib/data/dao/group_match_dao.dart
index d428fb5..de2eaf1 100644
--- a/lib/data/dao/group_match_dao.dart
+++ b/lib/data/dao/group_match_dao.dart
@@ -1,7 +1,7 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/group_match_table.dart';
-import 'package:game_tracker/data/dto/group.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/group_match_table.dart';
+import 'package:tallee/data/dto/group.dart';
part 'group_match_dao.g.dart';
diff --git a/lib/data/dao/match_dao.dart b/lib/data/dao/match_dao.dart
index 160686a..cc3a37f 100644
--- a/lib/data/dao/match_dao.dart
+++ b/lib/data/dao/match_dao.dart
@@ -1,9 +1,9 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/match_table.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/match_table.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
part 'match_dao.g.dart';
diff --git a/lib/data/dao/player_dao.dart b/lib/data/dao/player_dao.dart
index c8db800..8ac21f6 100644
--- a/lib/data/dao/player_dao.dart
+++ b/lib/data/dao/player_dao.dart
@@ -1,7 +1,7 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/player_table.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/player_table.dart';
+import 'package:tallee/data/dto/player.dart';
part 'player_dao.g.dart';
diff --git a/lib/data/dao/player_group_dao.dart b/lib/data/dao/player_group_dao.dart
index db45735..23da0c1 100644
--- a/lib/data/dao/player_group_dao.dart
+++ b/lib/data/dao/player_group_dao.dart
@@ -1,8 +1,8 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/player_group_table.dart';
-import 'package:game_tracker/data/db/tables/player_table.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/player_group_table.dart';
+import 'package:tallee/data/db/tables/player_table.dart';
+import 'package:tallee/data/dto/player.dart';
part 'player_group_dao.g.dart';
diff --git a/lib/data/dao/player_match_dao.dart b/lib/data/dao/player_match_dao.dart
index 7ebaee6..6700e85 100644
--- a/lib/data/dao/player_match_dao.dart
+++ b/lib/data/dao/player_match_dao.dart
@@ -1,7 +1,7 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/db/tables/player_match_table.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/db/tables/player_match_table.dart';
+import 'package:tallee/data/dto/player.dart';
part 'player_match_dao.g.dart';
diff --git a/lib/data/db/database.dart b/lib/data/db/database.dart
index e6c322f..4c70b21 100644
--- a/lib/data/db/database.dart
+++ b/lib/data/db/database.dart
@@ -1,18 +1,18 @@
import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
-import 'package:game_tracker/data/dao/group_dao.dart';
-import 'package:game_tracker/data/dao/group_match_dao.dart';
-import 'package:game_tracker/data/dao/match_dao.dart';
-import 'package:game_tracker/data/dao/player_dao.dart';
-import 'package:game_tracker/data/dao/player_group_dao.dart';
-import 'package:game_tracker/data/dao/player_match_dao.dart';
-import 'package:game_tracker/data/db/tables/group_match_table.dart';
-import 'package:game_tracker/data/db/tables/group_table.dart';
-import 'package:game_tracker/data/db/tables/match_table.dart';
-import 'package:game_tracker/data/db/tables/player_group_table.dart';
-import 'package:game_tracker/data/db/tables/player_match_table.dart';
-import 'package:game_tracker/data/db/tables/player_table.dart';
import 'package:path_provider/path_provider.dart';
+import 'package:tallee/data/dao/group_dao.dart';
+import 'package:tallee/data/dao/group_match_dao.dart';
+import 'package:tallee/data/dao/match_dao.dart';
+import 'package:tallee/data/dao/player_dao.dart';
+import 'package:tallee/data/dao/player_group_dao.dart';
+import 'package:tallee/data/dao/player_match_dao.dart';
+import 'package:tallee/data/db/tables/group_match_table.dart';
+import 'package:tallee/data/db/tables/group_table.dart';
+import 'package:tallee/data/db/tables/match_table.dart';
+import 'package:tallee/data/db/tables/player_group_table.dart';
+import 'package:tallee/data/db/tables/player_match_table.dart';
+import 'package:tallee/data/db/tables/player_table.dart';
part 'database.g.dart';
diff --git a/lib/data/db/database.g.dart b/lib/data/db/database.g.dart
index 6bc493c..4fa56f9 100644
--- a/lib/data/db/database.g.dart
+++ b/lib/data/db/database.g.dart
@@ -527,6 +527,17 @@ class $MatchTableTable extends MatchTable
final GeneratedDatabase attachedDatabase;
final String? _alias;
$MatchTableTable(this.attachedDatabase, [this._alias]);
+ static const VerificationMeta _winnerIdMeta = const VerificationMeta(
+ 'winnerId',
+ );
+ @override
+ late final GeneratedColumn winnerId = GeneratedColumn(
+ 'winner_id',
+ aliasedName,
+ true,
+ type: DriftSqlType.string,
+ requiredDuringInsert: false,
+ );
static const VerificationMeta _idMeta = const VerificationMeta('id');
@override
late final GeneratedColumn id = GeneratedColumn(
@@ -545,17 +556,6 @@ class $MatchTableTable extends MatchTable
type: DriftSqlType.string,
requiredDuringInsert: true,
);
- static const VerificationMeta _winnerIdMeta = const VerificationMeta(
- 'winnerId',
- );
- @override
- late final GeneratedColumn winnerId = GeneratedColumn(
- 'winner_id',
- aliasedName,
- true,
- type: DriftSqlType.string,
- requiredDuringInsert: false,
- );
static const VerificationMeta _createdAtMeta = const VerificationMeta(
'createdAt',
);
@@ -568,7 +568,7 @@ class $MatchTableTable extends MatchTable
requiredDuringInsert: true,
);
@override
- List get $columns => [id, name, winnerId, createdAt];
+ List get $columns => [winnerId, id, name, createdAt];
@override
String get aliasedName => _alias ?? actualTableName;
@override
@@ -581,6 +581,12 @@ class $MatchTableTable extends MatchTable
}) {
final context = VerificationContext();
final data = instance.toColumns(true);
+ if (data.containsKey('winner_id')) {
+ context.handle(
+ _winnerIdMeta,
+ winnerId.isAcceptableOrUnknown(data['winner_id']!, _winnerIdMeta),
+ );
+ }
if (data.containsKey('id')) {
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
} else if (isInserting) {
@@ -594,12 +600,6 @@ class $MatchTableTable extends MatchTable
} else if (isInserting) {
context.missing(_nameMeta);
}
- if (data.containsKey('winner_id')) {
- context.handle(
- _winnerIdMeta,
- winnerId.isAcceptableOrUnknown(data['winner_id']!, _winnerIdMeta),
- );
- }
if (data.containsKey('created_at')) {
context.handle(
_createdAtMeta,
@@ -617,6 +617,10 @@ class $MatchTableTable extends MatchTable
MatchTableData map(Map data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return MatchTableData(
+ winnerId: attachedDatabase.typeMapping.read(
+ DriftSqlType.string,
+ data['${effectivePrefix}winner_id'],
+ ),
id: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}id'],
@@ -625,10 +629,6 @@ class $MatchTableTable extends MatchTable
DriftSqlType.string,
data['${effectivePrefix}name'],
)!,
- winnerId: attachedDatabase.typeMapping.read(
- DriftSqlType.string,
- data['${effectivePrefix}winner_id'],
- ),
createdAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}created_at'],
@@ -643,35 +643,35 @@ class $MatchTableTable extends MatchTable
}
class MatchTableData extends DataClass implements Insertable {
+ final String? winnerId;
final String id;
final String name;
- final String? winnerId;
final DateTime createdAt;
const MatchTableData({
+ this.winnerId,
required this.id,
required this.name,
- this.winnerId,
required this.createdAt,
});
@override
Map toColumns(bool nullToAbsent) {
final map = {};
- map['id'] = Variable(id);
- map['name'] = Variable(name);
if (!nullToAbsent || winnerId != null) {
map['winner_id'] = Variable(winnerId);
}
+ map['id'] = Variable(id);
+ map['name'] = Variable(name);
map['created_at'] = Variable(createdAt);
return map;
}
MatchTableCompanion toCompanion(bool nullToAbsent) {
return MatchTableCompanion(
- id: Value(id),
- name: Value(name),
winnerId: winnerId == null && nullToAbsent
? const Value.absent()
: Value(winnerId),
+ id: Value(id),
+ name: Value(name),
createdAt: Value(createdAt),
);
}
@@ -682,9 +682,9 @@ class MatchTableData extends DataClass implements Insertable {
}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return MatchTableData(
+ winnerId: serializer.fromJson(json['winnerId']),
id: serializer.fromJson(json['id']),
name: serializer.fromJson(json['name']),
- winnerId: serializer.fromJson(json['winnerId']),
createdAt: serializer.fromJson(json['createdAt']),
);
}
@@ -692,29 +692,29 @@ class MatchTableData extends DataClass implements Insertable {
Map toJson({ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return {
+ 'winnerId': serializer.toJson(winnerId),
'id': serializer.toJson(id),
'name': serializer.toJson(name),
- 'winnerId': serializer.toJson(winnerId),
'createdAt': serializer.toJson(createdAt),
};
}
MatchTableData copyWith({
+ Value winnerId = const Value.absent(),
String? id,
String? name,
- Value winnerId = const Value.absent(),
DateTime? createdAt,
}) => MatchTableData(
+ winnerId: winnerId.present ? winnerId.value : this.winnerId,
id: id ?? this.id,
name: name ?? this.name,
- winnerId: winnerId.present ? winnerId.value : this.winnerId,
createdAt: createdAt ?? this.createdAt,
);
MatchTableData copyWithCompanion(MatchTableCompanion data) {
return MatchTableData(
+ winnerId: data.winnerId.present ? data.winnerId.value : this.winnerId,
id: data.id.present ? data.id.value : this.id,
name: data.name.present ? data.name.value : this.name,
- winnerId: data.winnerId.present ? data.winnerId.value : this.winnerId,
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
);
}
@@ -722,75 +722,75 @@ class MatchTableData extends DataClass implements Insertable {
@override
String toString() {
return (StringBuffer('MatchTableData(')
+ ..write('winnerId: $winnerId, ')
..write('id: $id, ')
..write('name: $name, ')
- ..write('winnerId: $winnerId, ')
..write('createdAt: $createdAt')
..write(')'))
.toString();
}
@override
- int get hashCode => Object.hash(id, name, winnerId, createdAt);
+ int get hashCode => Object.hash(winnerId, id, name, createdAt);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is MatchTableData &&
+ other.winnerId == this.winnerId &&
other.id == this.id &&
other.name == this.name &&
- other.winnerId == this.winnerId &&
other.createdAt == this.createdAt);
}
class MatchTableCompanion extends UpdateCompanion {
+ final Value winnerId;
final Value id;
final Value name;
- final Value winnerId;
final Value createdAt;
final Value rowid;
const MatchTableCompanion({
+ this.winnerId = const Value.absent(),
this.id = const Value.absent(),
this.name = const Value.absent(),
- this.winnerId = const Value.absent(),
this.createdAt = const Value.absent(),
this.rowid = const Value.absent(),
});
MatchTableCompanion.insert({
+ this.winnerId = const Value.absent(),
required String id,
required String name,
- this.winnerId = const Value.absent(),
required DateTime createdAt,
this.rowid = const Value.absent(),
}) : id = Value(id),
name = Value(name),
createdAt = Value(createdAt);
static Insertable custom({
+ Expression? winnerId,
Expression? id,
Expression? name,
- Expression? winnerId,
Expression? createdAt,
Expression? rowid,
}) {
return RawValuesInsertable({
+ if (winnerId != null) 'winner_id': winnerId,
if (id != null) 'id': id,
if (name != null) 'name': name,
- if (winnerId != null) 'winner_id': winnerId,
if (createdAt != null) 'created_at': createdAt,
if (rowid != null) 'rowid': rowid,
});
}
MatchTableCompanion copyWith({
+ Value? winnerId,
Value? id,
Value? name,
- Value? winnerId,
Value? createdAt,
Value? rowid,
}) {
return MatchTableCompanion(
+ winnerId: winnerId ?? this.winnerId,
id: id ?? this.id,
name: name ?? this.name,
- winnerId: winnerId ?? this.winnerId,
createdAt: createdAt ?? this.createdAt,
rowid: rowid ?? this.rowid,
);
@@ -799,15 +799,15 @@ class MatchTableCompanion extends UpdateCompanion {
@override
Map toColumns(bool nullToAbsent) {
final map = {};
+ if (winnerId.present) {
+ map['winner_id'] = Variable(winnerId.value);
+ }
if (id.present) {
map['id'] = Variable(id.value);
}
if (name.present) {
map['name'] = Variable(name.value);
}
- if (winnerId.present) {
- map['winner_id'] = Variable(winnerId.value);
- }
if (createdAt.present) {
map['created_at'] = Variable(createdAt.value);
}
@@ -820,9 +820,9 @@ class MatchTableCompanion extends UpdateCompanion {
@override
String toString() {
return (StringBuffer('MatchTableCompanion(')
+ ..write('winnerId: $winnerId, ')
..write('id: $id, ')
..write('name: $name, ')
- ..write('winnerId: $winnerId, ')
..write('createdAt: $createdAt, ')
..write('rowid: $rowid')
..write(')'))
@@ -2339,17 +2339,17 @@ typedef $$GroupTableTableProcessedTableManager =
>;
typedef $$MatchTableTableCreateCompanionBuilder =
MatchTableCompanion Function({
+ Value winnerId,
required String id,
required String name,
- Value winnerId,
required DateTime createdAt,
Value rowid,
});
typedef $$MatchTableTableUpdateCompanionBuilder =
MatchTableCompanion Function({
+ Value winnerId,
Value id,
Value name,
- Value winnerId,
Value createdAt,
Value rowid,
});
@@ -2414,6 +2414,11 @@ class $$MatchTableTableFilterComposer
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
+ ColumnFilters get winnerId => $composableBuilder(
+ column: $table.winnerId,
+ builder: (column) => ColumnFilters(column),
+ );
+
ColumnFilters get id => $composableBuilder(
column: $table.id,
builder: (column) => ColumnFilters(column),
@@ -2424,11 +2429,6 @@ class $$MatchTableTableFilterComposer
builder: (column) => ColumnFilters(column),
);
- ColumnFilters get winnerId => $composableBuilder(
- column: $table.winnerId,
- builder: (column) => ColumnFilters(column),
- );
-
ColumnFilters get createdAt => $composableBuilder(
column: $table.createdAt,
builder: (column) => ColumnFilters(column),
@@ -2494,6 +2494,11 @@ class $$MatchTableTableOrderingComposer
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
+ ColumnOrderings get winnerId => $composableBuilder(
+ column: $table.winnerId,
+ builder: (column) => ColumnOrderings(column),
+ );
+
ColumnOrderings get id => $composableBuilder(
column: $table.id,
builder: (column) => ColumnOrderings(column),
@@ -2504,11 +2509,6 @@ class $$MatchTableTableOrderingComposer
builder: (column) => ColumnOrderings(column),
);
- ColumnOrderings get winnerId => $composableBuilder(
- column: $table.winnerId,
- builder: (column) => ColumnOrderings(column),
- );
-
ColumnOrderings get createdAt => $composableBuilder(
column: $table.createdAt,
builder: (column) => ColumnOrderings(column),
@@ -2524,15 +2524,15 @@ class $$MatchTableTableAnnotationComposer
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
+ GeneratedColumn get winnerId =>
+ $composableBuilder(column: $table.winnerId, builder: (column) => column);
+
GeneratedColumn get id =>
$composableBuilder(column: $table.id, builder: (column) => column);
GeneratedColumn get name =>
$composableBuilder(column: $table.name, builder: (column) => column);
- GeneratedColumn get winnerId =>
- $composableBuilder(column: $table.winnerId, builder: (column) => column);
-
GeneratedColumn get createdAt =>
$composableBuilder(column: $table.createdAt, builder: (column) => column);
@@ -2618,29 +2618,29 @@ class $$MatchTableTableTableManager
$$MatchTableTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback:
({
+ Value winnerId = const Value.absent(),
Value id = const Value.absent(),
Value name = const Value.absent(),
- Value winnerId = const Value.absent(),
Value createdAt = const Value.absent(),
Value rowid = const Value.absent(),
}) => MatchTableCompanion(
+ winnerId: winnerId,
id: id,
name: name,
- winnerId: winnerId,
createdAt: createdAt,
rowid: rowid,
),
createCompanionCallback:
({
+ Value winnerId = const Value.absent(),
required String id,
required String name,
- Value winnerId = const Value.absent(),
required DateTime createdAt,
Value rowid = const Value.absent(),
}) => MatchTableCompanion.insert(
+ winnerId: winnerId,
id: id,
name: name,
- winnerId: winnerId,
createdAt: createdAt,
rowid: rowid,
),
diff --git a/lib/data/db/tables/group_match_table.dart b/lib/data/db/tables/group_match_table.dart
index 3f77dcb..a12e83b 100644
--- a/lib/data/db/tables/group_match_table.dart
+++ b/lib/data/db/tables/group_match_table.dart
@@ -1,6 +1,6 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/tables/group_table.dart';
-import 'package:game_tracker/data/db/tables/match_table.dart';
+import 'package:tallee/data/db/tables/group_table.dart';
+import 'package:tallee/data/db/tables/match_table.dart';
class GroupMatchTable extends Table {
TextColumn get groupId =>
diff --git a/lib/data/db/tables/player_group_table.dart b/lib/data/db/tables/player_group_table.dart
index da2521b..8d484ef 100644
--- a/lib/data/db/tables/player_group_table.dart
+++ b/lib/data/db/tables/player_group_table.dart
@@ -1,6 +1,6 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/tables/group_table.dart';
-import 'package:game_tracker/data/db/tables/player_table.dart';
+import 'package:tallee/data/db/tables/group_table.dart';
+import 'package:tallee/data/db/tables/player_table.dart';
class PlayerGroupTable extends Table {
TextColumn get playerId =>
diff --git a/lib/data/db/tables/player_match_table.dart b/lib/data/db/tables/player_match_table.dart
index e155cd5..13ef36f 100644
--- a/lib/data/db/tables/player_match_table.dart
+++ b/lib/data/db/tables/player_match_table.dart
@@ -1,6 +1,6 @@
import 'package:drift/drift.dart';
-import 'package:game_tracker/data/db/tables/match_table.dart';
-import 'package:game_tracker/data/db/tables/player_table.dart';
+import 'package:tallee/data/db/tables/match_table.dart';
+import 'package:tallee/data/db/tables/player_table.dart';
class PlayerMatchTable extends Table {
TextColumn get playerId =>
diff --git a/lib/data/dto/group.dart b/lib/data/dto/group.dart
index 92dbd09..f02d98f 100644
--- a/lib/data/dto/group.dart
+++ b/lib/data/dto/group.dart
@@ -1,5 +1,5 @@
import 'package:clock/clock.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/dto/player.dart';
import 'package:uuid/uuid.dart';
class Group {
diff --git a/lib/data/dto/match.dart b/lib/data/dto/match.dart
index 9570f66..d3a8333 100644
--- a/lib/data/dto/match.dart
+++ b/lib/data/dto/match.dart
@@ -1,6 +1,6 @@
import 'package:clock/clock.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
import 'package:uuid/uuid.dart';
class Match {
diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb
index ef8d4b5..9226c46 100644
--- a/lib/l10n/arb/app_de.arb
+++ b/lib/l10n/arb/app_de.arb
@@ -3,7 +3,7 @@
"all_players": "Alle Spieler:innen",
"all_players_selected": "Alle Spieler:innen ausgewählt",
"amount_of_matches": "Anzahl der Spiele",
- "app_name": "Game Tracker",
+ "app_name": "Tallee",
"best_player": "Beste:r Spieler:in",
"cancel": "Abbrechen",
"choose_game": "Spielvorlage wählen",
diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb
index 18e9026..8c89e17 100644
--- a/lib/l10n/arb/app_en.arb
+++ b/lib/l10n/arb/app_en.arb
@@ -325,7 +325,7 @@
"all_players": "All players",
"all_players_selected": "All players selected",
"amount_of_matches": "Amount of Matches",
- "app_name": "Game Tracker",
+ "app_name": "Tallee",
"best_player": "Best Player",
"cancel": "Cancel",
"choose_game": "Choose Game",
diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart
index 250a8fb..de5b43f 100644
--- a/lib/l10n/generated/app_localizations.dart
+++ b/lib/l10n/generated/app_localizations.dart
@@ -119,7 +119,7 @@ abstract class AppLocalizations {
/// The name of the App
///
/// In en, this message translates to:
- /// **'Game Tracker'**
+ /// **'Tallee'**
String get app_name;
/// Label for best player statistic
diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart
index bd9b506..ad4b7ea 100644
--- a/lib/l10n/generated/app_localizations_de.dart
+++ b/lib/l10n/generated/app_localizations_de.dart
@@ -18,7 +18,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get amount_of_matches => 'Anzahl der Spiele';
@override
- String get app_name => 'Game Tracker';
+ String get app_name => 'Tallee';
@override
String get best_player => 'Beste:r Spieler:in';
diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart
index 375ea05..29f1254 100644
--- a/lib/l10n/generated/app_localizations_en.dart
+++ b/lib/l10n/generated/app_localizations_en.dart
@@ -18,7 +18,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get amount_of_matches => 'Amount of Matches';
@override
- String get app_name => 'Game Tracker';
+ String get app_name => 'Tallee';
@override
String get best_player => 'Best Player';
diff --git a/lib/main.dart b/lib/main.dart
index 2f64e2e..0002531 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/custom_navigation_bar.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/custom_navigation_bar.dart';
void main() {
runApp(
diff --git a/lib/presentation/views/main_menu/custom_navigation_bar.dart b/lib/presentation/views/main_menu/custom_navigation_bar.dart
index b17f63d..6d18091 100644
--- a/lib/presentation/views/main_menu/custom_navigation_bar.dart
+++ b/lib/presentation/views/main_menu/custom_navigation_bar.dart
@@ -1,15 +1,13 @@
-import 'dart:ui';
-
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/group_view/group_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/home_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/match_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/settings_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/statistics_view.dart';
-import 'package:game_tracker/presentation/widgets/navbar_item.dart';
+import 'package:tallee/core/adaptive_page_route.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/group_view/groups_view.dart';
+import 'package:tallee/presentation/views/main_menu/home_view.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/match_view.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/settings_view.dart';
+import 'package:tallee/presentation/views/main_menu/statistics_view.dart';
+import 'package:tallee/presentation/widgets/navbar_item.dart';
class CustomNavigationBar extends StatefulWidget {
/// A custom navigation bar widget that provides tabbed navigation
@@ -75,103 +73,62 @@ class _CustomNavigationBarState extends State
backgroundColor: CustomTheme.backgroundColor,
body: tabs[currentIndex],
extendBody: true,
- bottomNavigationBar: SizedBox(
- height: 70 + MediaQuery.of(context).padding.bottom,
- 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(
- gradient: LinearGradient(
- begin: Alignment.bottomCenter,
- end: Alignment.topCenter,
- colors: [
- CustomTheme.boxColor.withValues(alpha: 1),
- CustomTheme.boxColor.withValues(alpha: 0.5),
- CustomTheme.boxColor.withValues(alpha: 0.2),
- CustomTheme.boxColor.withValues(alpha: 0.0),
- ],
- stops: const [0.0, 0.4, 0.8, 1],
- ),
- ),
- ),
- ),
- // Navbar content
- SafeArea(
- child: SizedBox(
- height: 70,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: [
- NavbarItem(
- index: 0,
- isSelected: currentIndex == 0,
- icon: Icons.home_rounded,
- label: loc.home,
- onTabTapped: onTabTapped,
- ),
- NavbarItem(
- index: 1,
- isSelected: currentIndex == 1,
- icon: Icons.gamepad_rounded,
- label: loc.matches,
- onTabTapped: onTabTapped,
- ),
- NavbarItem(
- index: 2,
- isSelected: currentIndex == 2,
- icon: Icons.group_rounded,
- label: loc.groups,
- onTabTapped: onTabTapped,
- ),
- NavbarItem(
- index: 3,
- isSelected: currentIndex == 3,
- icon: Icons.bar_chart_rounded,
- label: loc.statistics,
- onTabTapped: onTabTapped,
- ),
- ],
- ),
- ),
+ bottomNavigationBar: Container(
+ height: 115,
+ decoration: BoxDecoration(
+ color: CustomTheme.navBarBackgroundColor,
+ border: Border.all(
+ strokeAlign: BorderSide.strokeAlignOutside,
+ color: CustomTheme.boxBorderColor,
+ width: 2,
+ ),
+ borderRadius: const BorderRadius.only(
+ topLeft: Radius.circular(30),
+ topRight: Radius.circular(30),
+ ),
+ boxShadow: [
+ BoxShadow(
+ color: Colors.black.withValues(alpha: 0.1),
+ blurRadius: 20,
+ offset: const Offset(0, -5),
),
],
),
+ child: SafeArea(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: [
+ NavbarItem(
+ index: 0,
+ isSelected: currentIndex == 0,
+ icon: Icons.home_rounded,
+ label: loc.home,
+ onTabTapped: onTabTapped,
+ ),
+ NavbarItem(
+ index: 1,
+ isSelected: currentIndex == 1,
+ icon: Icons.gamepad_rounded,
+ label: loc.matches,
+ onTabTapped: onTabTapped,
+ ),
+ NavbarItem(
+ index: 2,
+ isSelected: currentIndex == 2,
+ icon: Icons.group_rounded,
+ label: loc.groups,
+ onTabTapped: onTabTapped,
+ ),
+ NavbarItem(
+ index: 3,
+ isSelected: currentIndex == 3,
+ icon: Icons.bar_chart_rounded,
+ label: loc.statistics,
+ onTabTapped: onTabTapped,
+ ),
+ ],
+ ),
+ ),
),
);
}
diff --git a/lib/presentation/views/main_menu/group_view/create_group_view.dart b/lib/presentation/views/main_menu/group_view/create_group_view.dart
index 678872a..262a6e8 100644
--- a/lib/presentation/views/main_menu/group_view/create_group_view.dart
+++ b/lib/presentation/views/main_menu/group_view/create_group_view.dart
@@ -1,14 +1,15 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/core/enums.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/buttons/custom_width_button.dart';
-import 'package:game_tracker/presentation/widgets/player_selection.dart';
-import 'package:game_tracker/presentation/widgets/text_input/text_input_field.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/core/enums.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/buttons/custom_width_button.dart';
+import 'package:tallee/presentation/widgets/player_selection.dart';
+import 'package:tallee/presentation/widgets/text_input/text_input_field.dart';
class CreateGroupView extends StatefulWidget {
const CreateGroupView({super.key, this.groupToEdit});
diff --git a/lib/presentation/views/main_menu/group_view/group_detail_view.dart b/lib/presentation/views/main_menu/group_view/group_detail_view.dart
index d5fb65b..802701a 100644
--- a/lib/presentation/views/main_menu/group_view/group_detail_view.dart
+++ b/lib/presentation/views/main_menu/group_view/group_detail_view.dart
@@ -1,21 +1,19 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/group_view/create_group_view.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart';
-import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart';
-import 'package:game_tracker/presentation/widgets/colored_icon_container.dart';
-import 'package:game_tracker/presentation/widgets/custom_alert_dialog.dart';
-import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
-import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/buttons/animated_dialog_button.dart';
+import 'package:tallee/presentation/widgets/buttons/main_menu_button.dart';
+import 'package:tallee/presentation/widgets/colored_icon_container.dart';
+import 'package:tallee/presentation/widgets/custom_alert_dialog.dart';
+import 'package:tallee/presentation/widgets/tiles/info_tile.dart';
+import 'package:tallee/presentation/widgets/tiles/text_icon_tile.dart';
class GroupDetailView extends StatefulWidget {
/// A view that displays the profile of a group
@@ -83,7 +81,9 @@ class _GroupDetailViewState extends State {
onPressed: () => Navigator.of(context).pop(true),
child: Text(
loc.delete,
- style: TextStyle(color: CustomTheme.secondaryColor),
+ style: const TextStyle(
+ color: CustomTheme.secondaryColor,
+ ),
),
),
],
diff --git a/lib/presentation/views/main_menu/group_view/group_view.dart b/lib/presentation/views/main_menu/group_view/group_view.dart
index a995f12..2c9a1fd 100644
--- a/lib/presentation/views/main_menu/group_view/group_view.dart
+++ b/lib/presentation/views/main_menu/group_view/group_view.dart
@@ -1,18 +1,18 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/group_view/group_detail_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/group_view/create_group_view.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart';
-import 'package:game_tracker/presentation/widgets/tiles/group_tile.dart';
-import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/adaptive_page_route.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/group_view/create_group_view.dart';
+import 'package:tallee/presentation/views/main_menu/group_view/group_profile_view.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/buttons/main_menu_button.dart';
+import 'package:tallee/presentation/widgets/tiles/group_tile.dart';
+import 'package:tallee/presentation/widgets/top_centered_message.dart';
class GroupsView extends StatefulWidget {
/// A view that displays a list of groups
diff --git a/lib/presentation/views/main_menu/home_view.dart b/lib/presentation/views/main_menu/home_view.dart
index f28341e..63617b2 100644
--- a/lib/presentation/views/main_menu/home_view.dart
+++ b/lib/presentation/views/main_menu/home_view.dart
@@ -1,18 +1,18 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/match_result_view.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/buttons/quick_create_button.dart';
-import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
-import 'package:game_tracker/presentation/widgets/tiles/match_tile.dart';
-import 'package:game_tracker/presentation/widgets/tiles/quick_info_tile.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/adaptive_page_route.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/match_result_view.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/buttons/quick_create_button.dart';
+import 'package:tallee/presentation/widgets/tiles/info_tile.dart';
+import 'package:tallee/presentation/widgets/tiles/match_tile.dart';
+import 'package:tallee/presentation/widgets/tiles/quick_info_tile.dart';
class HomeView extends StatefulWidget {
/// The main home view of the application, displaying quick info,
diff --git a/lib/presentation/views/main_menu/match_view/create_match/choose_game_view.dart b/lib/presentation/views/main_menu/match_view/create_match/choose_game_view.dart
index 3ff6e79..447b9c5 100644
--- a/lib/presentation/views/main_menu/match_view/create_match/choose_game_view.dart
+++ b/lib/presentation/views/main_menu/match_view/create_match/choose_game_view.dart
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/core/enums.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/text_input/custom_search_bar.dart';
-import 'package:game_tracker/presentation/widgets/tiles/title_description_list_tile.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/core/enums.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/text_input/custom_search_bar.dart';
+import 'package:tallee/presentation/widgets/tiles/title_description_list_tile.dart';
class ChooseGameView extends StatefulWidget {
/// A view that allows the user to choose a game from a list of available games
diff --git a/lib/presentation/views/main_menu/match_view/create_match/choose_group_view.dart b/lib/presentation/views/main_menu/match_view/create_match/choose_group_view.dart
index 592d765..9c60b16 100644
--- a/lib/presentation/views/main_menu/match_view/create_match/choose_group_view.dart
+++ b/lib/presentation/views/main_menu/match_view/create_match/choose_group_view.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/text_input/custom_search_bar.dart';
-import 'package:game_tracker/presentation/widgets/tiles/group_tile.dart';
-import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/text_input/custom_search_bar.dart';
+import 'package:tallee/presentation/widgets/tiles/group_tile.dart';
+import 'package:tallee/presentation/widgets/top_centered_message.dart';
class ChooseGroupView extends StatefulWidget {
/// A view that allows the user to choose a group from a list of groups.
diff --git a/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart b/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart
index 39438a1..3f46c8d 100644
--- a/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart
+++ b/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart
@@ -1,21 +1,21 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/core/enums.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/create_match/choose_game_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/create_match/choose_group_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/match_result_view.dart';
-import 'package:game_tracker/presentation/widgets/buttons/custom_width_button.dart';
-import 'package:game_tracker/presentation/widgets/player_selection.dart';
-import 'package:game_tracker/presentation/widgets/text_input/text_input_field.dart';
-import 'package:game_tracker/presentation/widgets/tiles/choose_tile.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/adaptive_page_route.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/core/enums.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/create_match/choose_game_view.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/create_match/choose_group_view.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/match_result_view.dart';
+import 'package:tallee/presentation/widgets/buttons/custom_width_button.dart';
+import 'package:tallee/presentation/widgets/player_selection.dart';
+import 'package:tallee/presentation/widgets/text_input/text_input_field.dart';
+import 'package:tallee/presentation/widgets/tiles/choose_tile.dart';
class CreateMatchView extends StatefulWidget {
/// A view that allows creating a new match
@@ -266,4 +266,14 @@ class _CreateMatchViewState extends State {
}
}
}
+
+ /// Determines whether the "Create Match" button should be enabled.
+ ///
+ /// Returns `true` if:
+ /// - A ruleset is selected AND
+ /// - Either a group is selected OR at least 2 players are selected
+ bool _enableCreateGameButton() {
+ return (selectedGroup != null ||
+ (selectedPlayers != null && selectedPlayers!.length > 1));
+ }
}
diff --git a/lib/presentation/views/main_menu/match_view/match_result_view.dart b/lib/presentation/views/main_menu/match_view/match_result_view.dart
index 8f20344..1dfb8cb 100644
--- a/lib/presentation/views/main_menu/match_view/match_result_view.dart
+++ b/lib/presentation/views/main_menu/match_view/match_result_view.dart
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/tiles/custom_radio_list_tile.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/tiles/custom_radio_list_tile.dart';
class MatchResultView extends StatefulWidget {
/// A view that allows selecting and saving the winner of a match
@@ -74,7 +74,7 @@ class _MatchResultViewState extends State {
),
decoration: BoxDecoration(
color: CustomTheme.boxColor,
- border: Border.all(color: CustomTheme.boxBorder),
+ border: Border.all(color: CustomTheme.boxBorderColor),
borderRadius: BorderRadius.circular(12),
),
child: Column(
diff --git a/lib/presentation/views/main_menu/match_view/match_view.dart b/lib/presentation/views/main_menu/match_view/match_view.dart
index b0d540b..4929f0c 100644
--- a/lib/presentation/views/main_menu/match_view/match_view.dart
+++ b/lib/presentation/views/main_menu/match_view/match_view.dart
@@ -2,21 +2,21 @@ import 'dart:core' hide Match;
import 'package:flutter/material.dart';
import 'package:fluttericon/rpg_awesome_icons.dart';
-import 'package:game_tracker/core/adaptive_page_route.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/create_match/create_match_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/match_view/match_detail_view.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart';
-import 'package:game_tracker/presentation/widgets/tiles/match_tile.dart';
-import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/adaptive_page_route.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/create_match/create_match_view.dart';
+import 'package:tallee/presentation/views/main_menu/match_view/match_result_view.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/buttons/main_menu_button.dart';
+import 'package:tallee/presentation/widgets/tiles/match_tile.dart';
+import 'package:tallee/presentation/widgets/top_centered_message.dart';
class MatchView extends StatefulWidget {
/// A view that displays a list of matches
diff --git a/lib/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart b/lib/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart
index 54ff34e..6e58108 100644
--- a/lib/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart
+++ b/lib/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
-import 'package:game_tracker/presentation/widgets/colored_icon_container.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
+import 'package:tallee/presentation/widgets/colored_icon_container.dart';
import 'package:url_launcher/url_launcher.dart';
class LicenseDetailView extends StatelessWidget {
@@ -89,7 +89,7 @@ class LicenseDetailView extends StatelessWidget {
maxLines: 1,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
- style: TextStyle(
+ style: const TextStyle(
fontSize: 12,
color: CustomTheme.secondaryColor,
decoration: TextDecoration.underline,
diff --git a/lib/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart b/lib/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart
index ef1109c..8fb2f2c 100644
--- a/lib/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart
+++ b/lib/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart
@@ -8,7 +8,7 @@
// https://pub.dev/packages/dart_pubspec_licenses
/// This package.
-const thisPackage = _game_tracker;
+const thisPackage = _tallee;
/// All dependencies including transitive dependencies.
const allDependencies = [
@@ -31,6 +31,7 @@ const allDependencies = [
_cli_config,
_cli_util,
_clock,
+ _code_assets,
_code_builder,
_collection,
_convert,
@@ -57,10 +58,12 @@ const allDependencies = [
_flutter_lints,
_flutter_plugin_android_lifecycle,
_flutter_web_plugins,
+ _fluttericon,
_font_awesome_flutter,
_frontend_server_client,
_glob,
_graphs,
+ _hooks,
_html,
_http,
_http_multi_server,
@@ -80,8 +83,10 @@ const allDependencies = [
_material_color_utilities,
_meta,
_mime,
+ _native_toolchain_c,
_nested,
_node_preamble,
+ _objective_c,
_package_config,
_package_info_plus,
_package_info_plus_platform_interface,
@@ -160,6 +165,7 @@ const dependencies = [
_drift_flutter,
_file_picker,
_file_saver,
+ _fluttericon,
_font_awesome_flutter,
_intl,
_json_schema,
@@ -517,13 +523,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// build_daemon 4.1.0
+/// build_daemon 4.1.1
const _build_daemon = Package(
name: 'build_daemon',
description: 'A daemon for running Dart builds.',
repository: 'https://github.com/dart-lang/build/tree/master/build_daemon',
authors: [],
- version: '4.1.0',
+ version: '4.1.1',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -724,14 +730,14 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// built_value 8.12.0
+/// built_value 8.12.3
const _built_value = Package(
name: 'built_value',
description: '''Value types with builders, Dart classes as enums, and serialization. This library is the runtime dependency.
''',
repository: 'https://github.com/google/built_value.dart/tree/master/built_value',
authors: [],
- version: '8.12.0',
+ version: '8.12.3',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -1185,13 +1191,54 @@ const _clock = Package(
limitations under the License.''',
);
-/// code_builder 4.11.0
+/// code_assets 1.0.0
+const _code_assets = Package(
+ name: 'code_assets',
+ description: 'This library contains the hook protocol specification for bundling native code with Dart packages.',
+ repository: 'https://github.com/dart-lang/native/tree/main/pkgs/code_assets',
+ authors: [],
+ version: '1.0.0',
+ spdxIdentifiers: ['BSD-3-Clause'],
+ isMarkdown: false,
+ isSdk: false,
+ dependencies: [PackageRef('collection'), PackageRef('hooks')],
+ devDependencies: [PackageRef('json_schema'), PackageRef('test')],
+ license: '''Copyright 2025, the Dart project authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
+ );
+
+/// code_builder 4.11.1
const _code_builder = Package(
name: 'code_builder',
description: 'A fluent, builder-based library for generating valid Dart code.',
repository: 'https://github.com/dart-lang/tools/tree/main/pkgs/code_builder',
authors: [],
- version: '4.11.0',
+ version: '4.11.1',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -1349,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.''',
);
-/// cross_file 0.3.5+1
+/// cross_file 0.3.5+2
const _cross_file = Package(
name: 'cross_file',
description: 'An abstraction to allow working with files across multiple platforms.',
repository: 'https://github.com/flutter/packages/tree/main/packages/cross_file',
authors: [],
- version: '0.3.5+1',
+ version: '0.3.5+2',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -1581,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.''',
);
-/// dbus 0.7.11
+/// dbus 0.7.12
const _dbus = Package(
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.',
homepage: 'https://github.com/canonical/dbus.dart',
authors: [],
- version: '0.7.11',
+ version: '0.7.12',
spdxIdentifiers: ['MPL-2.0'],
isMarkdown: false,
isSdk: false,
@@ -1968,7 +2015,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice
defined by the Mozilla Public License, v. 2.0.''',
);
-/// dio 5.9.0
+/// dio 5.9.1
const _dio = Package(
name: 'dio',
description: '''A powerful HTTP networking package,
@@ -1979,7 +2026,7 @@ Custom adapters, Transformers, etc.
homepage: 'https://github.com/cfug/dio',
repository: 'https://github.com/cfug/dio/blob/main/dio',
authors: [],
- version: '5.9.0',
+ version: '5.9.1',
spdxIdentifiers: ['MIT'],
isMarkdown: false,
isSdk: false,
@@ -2369,13 +2416,13 @@ const _fake_async = Package(
limitations under the License.''',
);
-/// ffi 2.1.4
+/// ffi 2.1.5
const _ffi = Package(
name: 'ffi',
description: 'Utilities for working with Foreign Function Interface (FFI) code.',
repository: 'https://github.com/dart-lang/native/tree/main/pkgs/ffi',
authors: [],
- version: '2.1.4',
+ version: '2.1.5',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -2450,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.''',
);
-/// file_picker 10.3.7
+/// file_picker 10.3.10
const _file_picker = Package(
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.',
homepage: 'https://github.com/miguelpruivo/plugins_flutter_file_picker',
repository: 'https://github.com/miguelpruivo/flutter_file_picker',
authors: [],
- version: '10.3.7',
+ version: '10.3.10',
spdxIdentifiers: ['MIT'],
isMarkdown: false,
isSdk: false,
@@ -2571,13 +2618,13 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// flutter 3.38.4
+/// flutter 3.38.6
const _flutter = Package(
name: 'flutter',
description: 'A framework for writing Flutter applications',
homepage: 'https://flutter.dev',
authors: [],
- version: '3.38.4',
+ version: '3.38.6',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: true,
@@ -2701,6 +2748,44 @@ const _flutter_web_plugins = Package(
devDependencies: [],
);
+/// fluttericon 2.0.0
+const _fluttericon = Package(
+ name: 'fluttericon',
+ description: 'Flutter icons from popular web icon fonts. Customize your final icon package using fluttericon.com.',
+ homepage: 'https://github.com/ilikerobots/fluttericon_pkg',
+ authors: [],
+ version: '2.0.0',
+ spdxIdentifiers: [],
+ isMarkdown: false,
+ isSdk: false,
+ dependencies: [PackageRef('flutter')],
+ devDependencies: [PackageRef('test'), PackageRef('recase')],
+ license: '''Copyright (c) 2020, Mike Hoolehan, StarHeight Media
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the StarHeight Media nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL HOOLEHAN OR STARHEIGHT MEDIA BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
+ );
+
/// font_awesome_flutter 10.12.0
const _font_awesome_flutter = Package(
name: 'font_awesome_flutter',
@@ -2862,6 +2947,47 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
+/// hooks 1.0.1
+const _hooks = Package(
+ name: 'hooks',
+ 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',
+ authors: [],
+ version: '1.0.1',
+ spdxIdentifiers: ['BSD-3-Clause'],
+ isMarkdown: false,
+ isSdk: false,
+ dependencies: [PackageRef('collection'), PackageRef('crypto'), PackageRef('logging'), PackageRef('meta'), PackageRef('pub_semver'), PackageRef('yaml')],
+ devDependencies: [PackageRef('args'), PackageRef('code_assets'), PackageRef('glob'), PackageRef('json_schema'), PackageRef('path'), PackageRef('test')],
+ license: '''Copyright 2025, the Dart project authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
+ );
+
/// html 0.15.6
const _html = Package(
name: 'html',
@@ -3145,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.''',
);
-/// json_annotation 4.9.0
+/// json_annotation 4.10.0
const _json_annotation = Package(
name: 'json_annotation',
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',
authors: [],
- version: '4.9.0',
+ version: '4.10.0',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -3821,6 +3947,47 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
+/// native_toolchain_c 0.17.4
+const _native_toolchain_c = Package(
+ name: 'native_toolchain_c',
+ description: 'A library to invoke the native C compiler installed on the host machine.',
+ repository: 'https://github.com/dart-lang/native/tree/main/pkgs/native_toolchain_c',
+ authors: [],
+ version: '0.17.4',
+ spdxIdentifiers: ['BSD-3-Clause'],
+ isMarkdown: false,
+ isSdk: false,
+ dependencies: [PackageRef('code_assets'), PackageRef('glob'), PackageRef('hooks'), PackageRef('logging'), PackageRef('meta'), PackageRef('pub_semver')],
+ devDependencies: [PackageRef('collection'), PackageRef('test')],
+ license: '''Copyright 2023, the Dart project authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
+ );
+
/// nested 1.0.0
const _nested = Package(
name: 'nested',
@@ -3918,6 +4085,47 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
+/// objective_c 9.3.0
+const _objective_c = Package(
+ name: 'objective_c',
+ 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',
+ authors: [],
+ version: '9.3.0',
+ spdxIdentifiers: ['BSD-3-Clause'],
+ isMarkdown: false,
+ isSdk: false,
+ dependencies: [PackageRef('code_assets'), PackageRef('collection'), PackageRef('ffi'), PackageRef('hooks'), PackageRef('logging'), PackageRef('native_toolchain_c'), PackageRef('pub_semver')],
+ devDependencies: [PackageRef('args'), PackageRef('path'), PackageRef('test'), PackageRef('yaml')],
+ license: '''Copyright 2024, the Dart project authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
+ );
+
/// package_config 2.2.0
const _package_config = Package(
name: 'package_config',
@@ -4164,13 +4372,13 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// path_provider_android 2.2.20
+/// path_provider_android 2.2.22
const _path_provider_android = Package(
name: 'path_provider_android',
description: 'Android implementation of the path_provider plugin.',
repository: 'https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_android',
authors: [],
- version: '2.2.20',
+ version: '2.2.22',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -4203,18 +4411,18 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// path_provider_foundation 2.4.3
+/// path_provider_foundation 2.6.0
const _path_provider_foundation = Package(
name: 'path_provider_foundation',
description: 'iOS and macOS implementation of the path_provider plugin',
repository: 'https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_foundation',
authors: [],
- version: '2.4.3',
+ version: '2.6.0',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
- dependencies: [PackageRef('flutter'), PackageRef('path_provider_platform_interface')],
- devDependencies: [PackageRef('build_runner'), PackageRef('path')],
+ dependencies: [PackageRef('ffi'), PackageRef('flutter'), PackageRef('objective_c'), PackageRef('path_provider_platform_interface')],
+ devDependencies: [],
license: '''Copyright 2013 The Flutter Authors
Redistribution and use in source and binary forms, with or without modification,
@@ -5503,18 +5711,18 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// skeletonizer 2.1.1
+/// skeletonizer 2.1.2
const _skeletonizer = Package(
name: 'skeletonizer',
description: 'Converts already built widgets into skeleton loaders with no extra effort.',
homepage: 'https://github.com/Milad-Akarie/skeletonizer',
authors: [],
- version: '2.1.1',
+ version: '2.1.2',
spdxIdentifiers: ['MIT'],
isMarkdown: false,
isSdk: false,
dependencies: [PackageRef('flutter')],
- devDependencies: [PackageRef('flutter_lints')],
+ devDependencies: [PackageRef('flutter_lints'), PackageRef('coverage')],
license: '''MIT License
Copyright (c) 2023 Milad Akarie
@@ -5661,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.''',
);
-/// source_span 1.10.1
+/// source_span 1.10.2
const _source_span = Package(
name: 'source_span',
description: 'Provides a standard representation for source code locations and spans.',
repository: 'https://github.com/dart-lang/tools/tree/main/pkgs/source_span',
authors: [],
- version: '1.10.1',
+ version: '1.10.2',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -5737,13 +5945,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.''',
);
-/// sqlite3_flutter_libs 0.5.40
+/// sqlite3_flutter_libs 0.5.41
const _sqlite3_flutter_libs = Package(
name: 'sqlite3_flutter_libs',
description: 'Flutter plugin to include native sqlite3 libraries with your app',
- homepage: 'https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3_flutter_libs',
+ homepage: 'https://github.com/simolus3/sqlite3.dart/tree/v2/sqlite3_flutter_libs',
authors: [],
- version: '0.5.40',
+ version: '0.5.41',
spdxIdentifiers: ['MIT'],
isMarkdown: false,
isSdk: false,
@@ -5772,14 +5980,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.''',
);
-/// sqlparser 0.42.0
+/// sqlparser 0.42.1
const _sqlparser = Package(
name: 'sqlparser',
description: 'Parses sqlite statements and performs static analysis on them',
homepage: 'https://github.com/simolus3/drift/tree/develop/sqlparser',
repository: 'https://github.com/simolus3/drift',
authors: [],
- version: '0.42.0',
+ version: '0.42.1',
spdxIdentifiers: ['MIT'],
isMarkdown: false,
isSdk: false,
@@ -6525,13 +6733,13 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// url_launcher_web 2.4.1
+/// url_launcher_web 2.4.2
const _url_launcher_web = Package(
name: 'url_launcher_web',
description: 'Web platform implementation of url_launcher',
repository: 'https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_web',
authors: [],
- version: '2.4.1',
+ version: '2.4.2',
spdxIdentifiers: ['Apache-2.0', 'BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
@@ -6539,7 +6747,7 @@ const _url_launcher_web = Package(
devDependencies: [],
license: '''url_launcher_web
-Copyright 2013 The Flutter Authors. All rights reserved.
+Copyright 2013 The Flutter Authors
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -6932,18 +7140,18 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''',
);
-/// watcher 1.1.4
+/// watcher 1.2.1
const _watcher = Package(
name: 'watcher',
description: 'A file system watcher. It monitors changes to contents of directories and sends notifications when files have been added, removed, or modified.',
repository: 'https://github.com/dart-lang/tools/tree/main/pkgs/watcher',
authors: [],
- version: '1.1.4',
+ version: '1.2.1',
spdxIdentifiers: ['BSD-3-Clause'],
isMarkdown: false,
isSdk: false,
dependencies: [PackageRef('async'), PackageRef('path')],
- devDependencies: [PackageRef('test')],
+ devDependencies: [PackageRef('clock'), PackageRef('fake_async'), PackageRef('test')],
license: '''Copyright 2014, the Dart project authors.
Redistribution and use in source and binary forms, with or without
@@ -7151,7 +7359,7 @@ const _win32 = Package(
isMarkdown: false,
isSdk: false,
dependencies: [PackageRef('ffi')],
- devDependencies: [PackageRef('args'), PackageRef('path'), PackageRef('test')],
+ devDependencies: [PackageRef('args'), PackageRef('hooks'), PackageRef('path'), PackageRef('test')],
license: '''BSD 3-Clause License
Copyright (c) 2024, Halil Durmus
@@ -7291,16 +7499,181 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.''',
);
-/// game_tracker 0.0.5+127
-const _game_tracker = Package(
- name: 'game_tracker',
- description: 'Game Tracking App for Card Games',
+/// tallee 0.0.16+250
+const _tallee = Package(
+ name: 'tallee',
+ description: 'Tracking App for Card Games',
authors: [],
- version: '0.0.5+127',
- spdxIdentifiers: [],
+ version: '0.0.16+250',
+ spdxIdentifiers: ['LGPL-3.0'],
isMarkdown: false,
isSdk: false,
- dependencies: [PackageRef('flutter'), PackageRef('clock'), PackageRef('cupertino_icons'), PackageRef('drift'), PackageRef('drift_flutter'), PackageRef('file_picker'), PackageRef('file_saver'), PackageRef('font_awesome_flutter'), PackageRef('intl'), PackageRef('json_schema'), PackageRef('package_info_plus'), PackageRef('path_provider'), PackageRef('provider'), PackageRef('skeletonizer'), PackageRef('url_launcher'), PackageRef('uuid')],
+ dependencies: [PackageRef('flutter'), PackageRef('clock'), PackageRef('cupertino_icons'), PackageRef('drift'), PackageRef('drift_flutter'), PackageRef('file_picker'), PackageRef('file_saver'), PackageRef('fluttericon'), PackageRef('font_awesome_flutter'), PackageRef('intl'), PackageRef('json_schema'), PackageRef('package_info_plus'), PackageRef('path_provider'), PackageRef('provider'), PackageRef('skeletonizer'), PackageRef('url_launcher'), PackageRef('uuid')],
devDependencies: [PackageRef('build_runner'), PackageRef('dart_pubspec_licenses'), PackageRef('drift_dev'), PackageRef('flutter_lints')],
+ license: '''GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.''',
);
diff --git a/lib/presentation/views/main_menu/settings_view/licenses_view.dart b/lib/presentation/views/main_menu/settings_view/licenses_view.dart
index 58aae5b..ed98c26 100644
--- a/lib/presentation/views/main_menu/settings_view/licenses_view.dart
+++ b/lib/presentation/views/main_menu/settings_view/licenses_view.dart
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
-import 'package:game_tracker/presentation/widgets/tiles/license_tile.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
+import 'package:tallee/presentation/widgets/tiles/license_tile.dart';
class LicensesView extends StatelessWidget {
/// A view that displays a list of open source licenses used in the app
diff --git a/lib/presentation/views/main_menu/settings_view/settings_view.dart b/lib/presentation/views/main_menu/settings_view/settings_view.dart
index 78c7efc..6a558ad 100644
--- a/lib/presentation/views/main_menu/settings_view/settings_view.dart
+++ b/lib/presentation/views/main_menu/settings_view/settings_view.dart
@@ -3,16 +3,16 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/core/enums.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses_view.dart';
-import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart';
-import 'package:game_tracker/presentation/widgets/custom_alert_dialog.dart';
-import 'package:game_tracker/presentation/widgets/tiles/settings_list_tile.dart';
-import 'package:game_tracker/services/data_transfer_service.dart';
import 'package:intl/intl.dart';
import 'package:package_info_plus/package_info_plus.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/core/enums.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/licenses_view.dart';
+import 'package:tallee/presentation/widgets/buttons/animated_dialog_button.dart';
+import 'package:tallee/presentation/widgets/custom_alert_dialog.dart';
+import 'package:tallee/presentation/widgets/tiles/settings_list_tile.dart';
+import 'package:tallee/services/data_transfer_service.dart';
import 'package:url_launcher/url_launcher.dart';
class SettingsView extends StatefulWidget {
@@ -89,7 +89,7 @@ class _SettingsViewState extends State {
);
final result = await DataTransferService.exportData(
json,
- 'game_tracker-data',
+ 'tallee-data',
);
if (!scaffoldMessengerContext.mounted) return;
showExportSnackBar(
@@ -137,7 +137,7 @@ class _SettingsViewState extends State {
onPressed: () => Navigator.of(context).pop(true),
child: Text(
loc.delete,
- style: TextStyle(
+ style: const TextStyle(
color: CustomTheme.secondaryColor,
),
),
diff --git a/lib/presentation/views/main_menu/statistics_view.dart b/lib/presentation/views/main_menu/statistics_view.dart
index f87a3fb..e552e54 100644
--- a/lib/presentation/views/main_menu/statistics_view.dart
+++ b/lib/presentation/views/main_menu/statistics_view.dart
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/tiles/statistics_tile.dart';
-import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/tiles/statistics_tile.dart';
+import 'package:tallee/presentation/widgets/top_centered_message.dart';
class StatisticsView extends StatefulWidget {
/// A view that displays player statistics
diff --git a/lib/presentation/widgets/buttons/animated_dialog_button.dart b/lib/presentation/widgets/buttons/animated_dialog_button.dart
index 65c0510..798edfa 100644
--- a/lib/presentation/widgets/buttons/animated_dialog_button.dart
+++ b/lib/presentation/widgets/buttons/animated_dialog_button.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class AnimatedDialogButton extends StatefulWidget {
/// A custom animated button widget that provides a scaling and opacity effect
diff --git a/lib/presentation/widgets/buttons/custom_width_button.dart b/lib/presentation/widgets/buttons/custom_width_button.dart
index 8d45540..489ceae 100644
--- a/lib/presentation/widgets/buttons/custom_width_button.dart
+++ b/lib/presentation/widgets/buttons/custom_width_button.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/core/enums.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/core/enums.dart';
class CustomWidthButton extends StatelessWidget {
/// A custom button widget that is designed to have a width relative to the screen size.
diff --git a/lib/presentation/widgets/buttons/quick_create_button.dart b/lib/presentation/widgets/buttons/quick_create_button.dart
index e013186..f3aa588 100644
--- a/lib/presentation/widgets/buttons/quick_create_button.dart
+++ b/lib/presentation/widgets/buttons/quick_create_button.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class QuickCreateButton extends StatefulWidget {
/// A button widget designed for quick creating matches in the [HomeView]
@@ -28,14 +28,18 @@ class _QuickCreateButtonState extends State {
onPressed: widget.onPressed,
style: ElevatedButton.styleFrom(
minimumSize: const Size(140, 45),
- backgroundColor: CustomTheme.primaryColor,
+ backgroundColor: CustomTheme.primaryColor.withAlpha(200).withBlue(40),
shape: RoundedRectangleBorder(
borderRadius: CustomTheme.standardBorderRadiusAll,
),
),
child: Text(
widget.text,
- style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
+ style: const TextStyle(
+ color: CustomTheme.textColor,
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ ),
),
);
}
diff --git a/lib/presentation/widgets/colored_icon_container.dart b/lib/presentation/widgets/colored_icon_container.dart
index be51cd2..fe0659f 100644
--- a/lib/presentation/widgets/colored_icon_container.dart
+++ b/lib/presentation/widgets/colored_icon_container.dart
@@ -1,5 +1,5 @@
import 'package:flutter/cupertino.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class ColoredIconContainer extends StatelessWidget {
/// A customizable container widget that displays an icon with a colored background.
@@ -48,7 +48,7 @@ class ColoredIconContainer extends StatelessWidget {
child: Icon(
icon,
size: iconSize,
- color: CustomTheme.primaryColor.withGreen(40),
+ color: CustomTheme.primaryColor.withBlue(40),
),
),
],
diff --git a/lib/presentation/widgets/custom_alert_dialog.dart b/lib/presentation/widgets/custom_alert_dialog.dart
index af5b45a..bf98f2c 100644
--- a/lib/presentation/widgets/custom_alert_dialog.dart
+++ b/lib/presentation/widgets/custom_alert_dialog.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class CustomAlertDialog extends StatelessWidget {
/// A custom alert dialog widget that provides a os unspecific AlertDialog,
@@ -32,7 +32,7 @@ class CustomAlertDialog extends StatelessWidget {
actionsAlignment: MainAxisAlignment.spaceAround,
shape: RoundedRectangleBorder(
borderRadius: CustomTheme.standardBorderRadiusAll,
- side: BorderSide(color: CustomTheme.boxBorder),
+ side: const BorderSide(color: CustomTheme.boxBorderColor),
),
);
}
diff --git a/lib/presentation/widgets/navbar_item.dart b/lib/presentation/widgets/navbar_item.dart
index 45f2976..17c055c 100644
--- a/lib/presentation/widgets/navbar_item.dart
+++ b/lib/presentation/widgets/navbar_item.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class NavbarItem extends StatefulWidget {
/// A navigation bar item widget that represents a single tab in a navigation bar.
@@ -87,19 +87,29 @@ class _NavbarItemState extends State
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
- ScaleTransition(
- scale: widget.isSelected
- ? _scaleAnimation
- : const AlwaysStoppedAnimation(1.0),
- child: Icon(
- widget.icon,
+ AnimatedContainer(
+ width: 50,
+ height: 50,
+ decoration: BoxDecoration(
color: widget.isSelected
- ? CustomTheme.navBarItemSelectedColor
- : CustomTheme.navBarItemUnselectedColor,
- size: 32,
+ ? CustomTheme.primaryColor.withAlpha(50)
+ : Colors.transparent,
+ borderRadius: const BorderRadius.all(Radius.circular(15)),
+ ),
+ duration: const Duration(milliseconds: 200),
+ child: ScaleTransition(
+ scale: widget.isSelected
+ ? _scaleAnimation
+ : const AlwaysStoppedAnimation(1.0),
+ child: Icon(
+ widget.icon,
+ color: widget.isSelected
+ ? CustomTheme.navBarItemSelectedColor
+ : CustomTheme.navBarItemUnselectedColor,
+ size: 32,
+ ),
),
),
- const SizedBox(height: 4),
Text(
widget.label,
style: TextStyle(
diff --git a/lib/presentation/widgets/player_selection.dart b/lib/presentation/widgets/player_selection.dart
index 784b973..5984841 100644
--- a/lib/presentation/widgets/player_selection.dart
+++ b/lib/presentation/widgets/player_selection.dart
@@ -1,15 +1,15 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
-import 'package:game_tracker/presentation/widgets/text_input/custom_search_bar.dart';
-import 'package:game_tracker/presentation/widgets/tiles/text_icon_list_tile.dart';
-import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
-import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/constants.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/app_skeleton.dart';
+import 'package:tallee/presentation/widgets/text_input/custom_search_bar.dart';
+import 'package:tallee/presentation/widgets/tiles/text_icon_list_tile.dart';
+import 'package:tallee/presentation/widgets/tiles/text_icon_tile.dart';
+import 'package:tallee/presentation/widgets/top_centered_message.dart';
class PlayerSelection extends StatefulWidget {
/// A widget that allows users to select players from a list,
@@ -85,6 +85,7 @@ class _PlayerSelectionState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CustomSearchBar(
+ maxLength: Constants.MAX_PLAYER_NAME_LENGTH,
controller: _searchBarController,
constraints: const BoxConstraints(maxHeight: 45, minHeight: 45),
hintText: loc.search_for_players,
diff --git a/lib/presentation/widgets/text_input/custom_search_bar.dart b/lib/presentation/widgets/text_input/custom_search_bar.dart
index 76bb6e5..313fc1a 100644
--- a/lib/presentation/widgets/text_input/custom_search_bar.dart
+++ b/lib/presentation/widgets/text_input/custom_search_bar.dart
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/constants.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class CustomSearchBar extends StatelessWidget {
/// A custom search bar widget that encapsulates a [SearchBar] with additional customization options.
@@ -22,6 +21,7 @@ class CustomSearchBar extends StatelessWidget {
this.onTrailingButtonPressed,
this.onChanged,
this.constraints,
+ this.maxLength,
});
/// The controller for the search bar's text input.
@@ -48,15 +48,19 @@ class CustomSearchBar extends StatelessWidget {
/// The constraints for the search bar.
final BoxConstraints? constraints;
+ /// Optional parameter for maximum length of the input text.
+ final int? maxLength;
+
@override
Widget build(BuildContext context) {
/// Enforce maximum length on the input text
- const maxLength = Constants.MAX_PLAYER_NAME_LENGTH;
- if (controller.text.length > maxLength) {
- controller.text = controller.text.substring(0, maxLength);
- controller.selection = TextSelection.fromPosition(
- TextPosition(offset: controller.text.length),
- );
+ if (maxLength != null) {
+ if (controller.text.length > maxLength!) {
+ controller.text = controller.text.substring(0, maxLength);
+ controller.selection = TextSelection.fromPosition(
+ TextPosition(offset: controller.text.length),
+ );
+ }
}
return SearchBar(
@@ -83,7 +87,9 @@ class CustomSearchBar extends StatelessWidget {
const SizedBox(width: 5),
],
backgroundColor: WidgetStateProperty.all(CustomTheme.boxColor),
- side: WidgetStateProperty.all(BorderSide(color: CustomTheme.boxBorder)),
+ side: WidgetStateProperty.all(
+ const BorderSide(color: CustomTheme.boxBorderColor),
+ ),
shape: WidgetStateProperty.all(
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
),
diff --git a/lib/presentation/widgets/text_input/text_input_field.dart b/lib/presentation/widgets/text_input/text_input_field.dart
index 8f7a597..541ae6f 100644
--- a/lib/presentation/widgets/text_input/text_input_field.dart
+++ b/lib/presentation/widgets/text_input/text_input_field.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:flutter/services.dart';
+import 'package:tallee/core/custom_theme.dart';
class TextInputField extends StatelessWidget {
/// A custom text input field widget that encapsulates a [TextField] with specific styling.
@@ -33,18 +34,21 @@ class TextInputField extends StatelessWidget {
controller: controller,
onChanged: onChanged,
maxLength: maxLength,
+ maxLengthEnforcement: MaxLengthEnforcement.truncateAfterCompositionEnds,
decoration: InputDecoration(
filled: true,
fillColor: CustomTheme.boxColor,
hintText: hintText,
hintStyle: const TextStyle(fontSize: 18),
- enabledBorder: OutlineInputBorder(
- borderRadius: const BorderRadius.all(Radius.circular(12)),
- borderSide: BorderSide(color: CustomTheme.boxBorder),
+ // Hides the character counter
+ counterText: '',
+ enabledBorder: const OutlineInputBorder(
+ borderRadius: BorderRadius.all(Radius.circular(12)),
+ borderSide: BorderSide(color: CustomTheme.boxBorderColor),
),
- focusedBorder: OutlineInputBorder(
- borderRadius: const BorderRadius.all(Radius.circular(12)),
- borderSide: BorderSide(color: CustomTheme.boxBorder),
+ focusedBorder: const OutlineInputBorder(
+ borderRadius: BorderRadius.all(Radius.circular(12)),
+ borderSide: BorderSide(color: CustomTheme.boxBorderColor),
),
floatingLabelBehavior: FloatingLabelBehavior.never,
),
diff --git a/lib/presentation/widgets/tiles/choose_tile.dart b/lib/presentation/widgets/tiles/choose_tile.dart
index 595816e..10ded6b 100644
--- a/lib/presentation/widgets/tiles/choose_tile.dart
+++ b/lib/presentation/widgets/tiles/choose_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class ChooseTile extends StatefulWidget {
/// A tile widget that allows users to choose an option by tapping on it.
diff --git a/lib/presentation/widgets/tiles/custom_radio_list_tile.dart b/lib/presentation/widgets/tiles/custom_radio_list_tile.dart
index 2d8dc7a..53d0a03 100644
--- a/lib/presentation/widgets/tiles/custom_radio_list_tile.dart
+++ b/lib/presentation/widgets/tiles/custom_radio_list_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class CustomRadioListTile extends StatelessWidget {
/// A custom radio list tile widget that encapsulates a [Radio] button with additional styling and functionality.
@@ -31,7 +31,7 @@ class CustomRadioListTile extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 2),
decoration: BoxDecoration(
color: CustomTheme.boxColor,
- border: Border.all(color: CustomTheme.boxBorder),
+ border: Border.all(color: CustomTheme.boxBorderColor),
borderRadius: CustomTheme.standardBorderRadiusAll,
),
child: Row(
diff --git a/lib/presentation/widgets/tiles/group_tile.dart b/lib/presentation/widgets/tiles/group_tile.dart
index c035a04..d662918 100644
--- a/lib/presentation/widgets/tiles/group_tile.dart
+++ b/lib/presentation/widgets/tiles/group_tile.dart
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/presentation/widgets/tiles/text_icon_tile.dart';
class GroupTile extends StatefulWidget {
/// A tile widget that displays information about a group, including its name and members.
diff --git a/lib/presentation/widgets/tiles/info_tile.dart b/lib/presentation/widgets/tiles/info_tile.dart
index 78d7f28..fdbd88c 100644
--- a/lib/presentation/widgets/tiles/info_tile.dart
+++ b/lib/presentation/widgets/tiles/info_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class InfoTile extends StatefulWidget {
/// A tile widget that displays a title with an icon and some content below it.
diff --git a/lib/presentation/widgets/tiles/license_tile.dart b/lib/presentation/widgets/tiles/license_tile.dart
index 33e5a45..9289ed5 100644
--- a/lib/presentation/widgets/tiles/license_tile.dart
+++ b/lib/presentation/widgets/tiles/license_tile.dart
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart';
-import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
-import 'package:game_tracker/presentation/widgets/colored_icon_container.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/licenses/license_detail_view.dart';
+import 'package:tallee/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
+import 'package:tallee/presentation/widgets/colored_icon_container.dart';
class LicenseTile extends StatelessWidget {
/// A tile widget that displays information about a software package license.
diff --git a/lib/presentation/widgets/tiles/match_tile.dart b/lib/presentation/widgets/tiles/match_tile.dart
index e1365c1..ab65e5d 100644
--- a/lib/presentation/widgets/tiles/match_tile.dart
+++ b/lib/presentation/widgets/tiles/match_tile.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
import 'package:intl/intl.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/tiles/text_icon_tile.dart';
class MatchTile extends StatefulWidget {
/// A tile widget that displays information about a match, including its name,
diff --git a/lib/presentation/widgets/tiles/quick_info_tile.dart b/lib/presentation/widgets/tiles/quick_info_tile.dart
index 4d6ef2e..5646fa5 100644
--- a/lib/presentation/widgets/tiles/quick_info_tile.dart
+++ b/lib/presentation/widgets/tiles/quick_info_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class QuickInfoTile extends StatefulWidget {
/// A tile widget that displays a title with an icon and a numeric value below it.
diff --git a/lib/presentation/widgets/tiles/settings_list_tile.dart b/lib/presentation/widgets/tiles/settings_list_tile.dart
index d4bc6dc..de805cd 100644
--- a/lib/presentation/widgets/tiles/settings_list_tile.dart
+++ b/lib/presentation/widgets/tiles/settings_list_tile.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
-import 'package:game_tracker/presentation/widgets/colored_icon_container.dart';
+import 'package:tallee/core/custom_theme.dart';
+import 'package:tallee/presentation/widgets/colored_icon_container.dart';
class SettingsListTile extends StatelessWidget {
/// A customizable settings list tile widget that displays an icon, title, and an optional suffix widget.
diff --git a/lib/presentation/widgets/tiles/statistics_tile.dart b/lib/presentation/widgets/tiles/statistics_tile.dart
index 2ac0dfd..bc2f7b6 100644
--- a/lib/presentation/widgets/tiles/statistics_tile.dart
+++ b/lib/presentation/widgets/tiles/statistics_tile.dart
@@ -1,8 +1,8 @@
import 'dart:math';
import 'package:flutter/material.dart';
-import 'package:game_tracker/l10n/generated/app_localizations.dart';
-import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
+import 'package:tallee/l10n/generated/app_localizations.dart';
+import 'package:tallee/presentation/widgets/tiles/info_tile.dart';
class StatisticsTile extends StatelessWidget {
/// A tile widget that displays statistical data using horizontal bars.
diff --git a/lib/presentation/widgets/tiles/text_icon_list_tile.dart b/lib/presentation/widgets/tiles/text_icon_list_tile.dart
index e468e95..2b29d41 100644
--- a/lib/presentation/widgets/tiles/text_icon_list_tile.dart
+++ b/lib/presentation/widgets/tiles/text_icon_list_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class TextIconListTile extends StatelessWidget {
/// A list tile widget that displays text with an optional icon button.
diff --git a/lib/presentation/widgets/tiles/text_icon_tile.dart b/lib/presentation/widgets/tiles/text_icon_tile.dart
index 90c32b7..f98e0a7 100644
--- a/lib/presentation/widgets/tiles/text_icon_tile.dart
+++ b/lib/presentation/widgets/tiles/text_icon_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class TextIconTile extends StatelessWidget {
/// A tile widget that displays text with an optional icon that can be tapped.
diff --git a/lib/presentation/widgets/tiles/title_description_list_tile.dart b/lib/presentation/widgets/tiles/title_description_list_tile.dart
index a963d16..9dc8f33 100644
--- a/lib/presentation/widgets/tiles/title_description_list_tile.dart
+++ b/lib/presentation/widgets/tiles/title_description_list_tile.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:game_tracker/core/custom_theme.dart';
+import 'package:tallee/core/custom_theme.dart';
class TitleDescriptionListTile extends StatelessWidget {
/// A list tile widget that displays a title and description, with optional highlighting and badge.
diff --git a/lib/services/data_transfer_service.dart b/lib/services/data_transfer_service.dart
index 8767c59..5863d87 100644
--- a/lib/services/data_transfer_service.dart
+++ b/lib/services/data_transfer_service.dart
@@ -4,13 +4,13 @@ import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:game_tracker/core/enums.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
import 'package:json_schema/json_schema.dart';
import 'package:provider/provider.dart';
+import 'package:tallee/core/enums.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
class DataTransferService {
/// Deletes all data from the database.
@@ -34,22 +34,28 @@ class DataTransferService {
'players': players.map((p) => p.toJson()).toList(),
'groups': groups
- .map((g) => {
- 'id': g.id,
- 'name': g.name,
- 'createdAt': g.createdAt.toIso8601String(),
- 'memberIds': (g.members).map((m) => m.id).toList(),
- }).toList(),
+ .map(
+ (g) => {
+ 'id': g.id,
+ 'name': g.name,
+ 'createdAt': g.createdAt.toIso8601String(),
+ 'memberIds': (g.members).map((m) => m.id).toList(),
+ },
+ )
+ .toList(),
'matches': matches
- .map((m) => {
- 'id': m.id,
- 'name': m.name,
- 'createdAt': m.createdAt.toIso8601String(),
- 'groupId': m.group?.id,
- 'playerIds': (m.players ?? []).map((p) => p.id).toList(),
- 'winnerId': m.winner?.id,
- }).toList(),
+ .map(
+ (m) => {
+ 'id': m.id,
+ 'name': m.name,
+ 'createdAt': m.createdAt.toIso8601String(),
+ 'groupId': m.group?.id,
+ 'playerIds': (m.players ?? []).map((p) => p.id).toList(),
+ 'winnerId': m.winner?.id,
+ },
+ )
+ .toList(),
};
return json.encode(jsonMap);
@@ -62,7 +68,7 @@ class DataTransferService {
/// [fileName] The desired name for the exported file (without extension).
static Future exportData(
String jsonString,
- String fileName
+ String fileName,
) async {
try {
final bytes = Uint8List.fromList(utf8.encode(jsonString));
@@ -76,7 +82,6 @@ class DataTransferService {
} else {
return ExportResult.success;
}
-
} catch (e, stack) {
print('[exportData] $e');
print(stack);
@@ -104,11 +109,15 @@ class DataTransferService {
final isValid = await _validateJsonSchema(jsonString);
if (!isValid) return ImportResult.invalidSchema;
- final Map decoded = json.decode(jsonString) as Map;
+ final Map decoded =
+ json.decode(jsonString) as Map;
- final List playersJson = (decoded['players'] as List?) ?? [];
- final List groupsJson = (decoded['groups'] as List?) ?? [];
- final List matchesJson = (decoded['matches'] as List?) ?? [];
+ final List playersJson =
+ (decoded['players'] as List?) ?? [];
+ final List groupsJson =
+ (decoded['groups'] as List?) ?? [];
+ final List matchesJson =
+ (decoded['matches'] as List?) ?? [];
// Players
final List importedPlayers = playersJson
@@ -122,7 +131,8 @@ class DataTransferService {
// Groups
final List importedGroups = groupsJson.map((g) {
final map = g as Map;
- final memberIds = (map['memberIds'] as List? ?? []).cast();
+ final memberIds = (map['memberIds'] as List? ?? [])
+ .cast();
final members = memberIds
.map((id) => playerById[id])
@@ -146,7 +156,8 @@ class DataTransferService {
final map = m as Map;
final String? groupId = map['groupId'] as String?;
- final List playerIds = (map['playerIds'] as List? ?? []).cast();
+ final List playerIds =
+ (map['playerIds'] as List? ?? []).cast();
final String? winnerId = map['winnerId'] as String?;
final group = (groupId == null) ? null : groupById[groupId];
@@ -212,4 +223,4 @@ class DataTransferService {
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index a2025b9..f3a50e3 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
-name: game_tracker
-description: "Game Tracking App for Card Games"
+name: tallee
+description: "Tracking App for Card Games"
publish_to: 'none'
-version: 0.0.9+243
+version: 0.0.16+250
environment:
sdk: ^3.8.1
diff --git a/test/db_tests/game_test.dart b/test/db_tests/game_test.dart
index 0ec2cfc..5a6ad25 100644
--- a/test/db_tests/game_test.dart
+++ b/test/db_tests/game_test.dart
@@ -2,10 +2,10 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;
diff --git a/test/db_tests/group_match_test.dart b/test/db_tests/group_match_test.dart
index 7d812bd..8c5e6e4 100644
--- a/test/db_tests/group_match_test.dart
+++ b/test/db_tests/group_match_test.dart
@@ -2,10 +2,10 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart' hide isNotNull;
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;
diff --git a/test/db_tests/group_test.dart b/test/db_tests/group_test.dart
index 5104c65..d87edf3 100644
--- a/test/db_tests/group_test.dart
+++ b/test/db_tests/group_test.dart
@@ -2,9 +2,9 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;
diff --git a/test/db_tests/player_group_test.dart b/test/db_tests/player_group_test.dart
index 2783430..b4a87bc 100644
--- a/test/db_tests/player_group_test.dart
+++ b/test/db_tests/player_group_test.dart
@@ -2,9 +2,9 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;
diff --git a/test/db_tests/player_match_test.dart b/test/db_tests/player_match_test.dart
index 8a4f569..393d0c0 100644
--- a/test/db_tests/player_match_test.dart
+++ b/test/db_tests/player_match_test.dart
@@ -2,10 +2,10 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart' hide isNotNull;
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/group.dart';
-import 'package:game_tracker/data/dto/match.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/group.dart';
+import 'package:tallee/data/dto/match.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;
diff --git a/test/db_tests/player_test.dart b/test/db_tests/player_test.dart
index 5bd10ad..c2a4547 100644
--- a/test/db_tests/player_test.dart
+++ b/test/db_tests/player_test.dart
@@ -2,8 +2,8 @@ import 'package:clock/clock.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:game_tracker/data/db/database.dart';
-import 'package:game_tracker/data/dto/player.dart';
+import 'package:tallee/data/db/database.dart';
+import 'package:tallee/data/dto/player.dart';
void main() {
late AppDatabase database;