├── .github ├── FUNDING.yml └── workflows │ ├── flutter_android_build.yml │ ├── flutter_android_release.yml │ ├── flutter_ios_build.yml │ ├── flutter_ios_release.yml │ ├── github-pages.yml │ └── remove-old-artifacts.yml ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── Gemfile ├── Gemfile.lock ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── net │ │ │ │ └── meltzow │ │ │ │ └── deckng │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-mdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable-xhdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_launcher_background.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── ic_launcher.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── fastlane │ ├── Appfile │ ├── Fastfile │ ├── Pluginfile │ ├── README.md │ └── metadata │ │ └── android │ │ ├── de-DE │ │ ├── changelogs │ │ │ ├── 2.0.0.txt │ │ │ ├── 2.0.3.txt │ │ │ ├── 2.0.4.txt │ │ │ ├── 2.0.5.txt │ │ │ └── default.txt │ │ ├── full_description.txt │ │ ├── images │ │ │ ├── featureGraphic.png │ │ │ ├── icon.jpeg │ │ │ ├── phoneScreenshots │ │ │ │ ├── 01-login_screenPixel 4-Portrait-.png │ │ │ │ ├── 02-dashboard_screenPixel 4-Portrait-.png │ │ │ │ ├── 03-kanban_board_screenPixel 4-Portrait-.png │ │ │ │ └── 04-card_details_screenPixel 4-Portrait-.png │ │ │ └── tenInchScreenshots │ │ │ │ ├── 01-login_screenNexus 9-LandscapeRight-.png │ │ │ │ ├── 02-dashboard_screenNexus 9-LandscapeRight-.png │ │ │ │ ├── 03-kanban_board_screenNexus 9-LandscapeRight-.png │ │ │ │ └── 04-card_details_screenNexus 9-LandscapeRight-.png │ │ ├── short_description.txt │ │ ├── title.txt │ │ └── video.txt │ │ └── en-GB │ │ ├── changelogs │ │ ├── 2.0.0.txt │ │ ├── 2.0.3.txt │ │ ├── 2.0.4.txt │ │ ├── 2.0.5.txt │ │ └── default.txt │ │ ├── full_description.txt │ │ ├── images │ │ ├── phoneScreenshots │ │ │ ├── 01-login_screenPixel 4-Portrait-.png │ │ │ ├── 02-dashboard_screenPixel 4-Portrait-.png │ │ │ ├── 03-kanban_board_screenPixel 4-Portrait-.png │ │ │ └── 04-card_details_screenPixel 4-Portrait-.png │ │ └── tenInchScreenshots │ │ │ ├── 01-login_screenNexus 9-LandscapeRight-.png │ │ │ ├── 02-dashboard_screenNexus 9-LandscapeRight-.png │ │ │ ├── 03-kanban_board_screenNexus 9-LandscapeRight-.png │ │ │ └── 04-card_details_screenNexus 9-LandscapeRight-.png │ │ ├── short_description.txt │ │ ├── title.txt │ │ └── video.txt ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── albums-outline.png ├── albums-outline.svg ├── icon-foreground.png ├── icon.png ├── images │ └── icon.png ├── kamil-porembinski-clouds-2732.jpg ├── kamil-porembinski-clouds.jpg ├── logo.ora ├── logo.png ├── privacy_policy.md ├── splash-dark.png └── splash.png ├── build.yaml ├── devtools_options.yaml ├── docker-compose.yml ├── example.env ├── flutter_jank_metrics_01.json ├── integration_test ├── card_details_test.dart ├── card_details_test.mocks.dart ├── dashboard_test.dart ├── dashboard_test.mocks.dart ├── kanban_board_test.dart ├── kanban_board_test.mocks.dart ├── login_test.dart ├── login_test.mocks.dart ├── screenshots_test.dart ├── screenshots_test.mocks.dart ├── settings_test.dart └── settings_test.mocks.dart ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Gemfile ├── Gemfile.lock ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-50x50@1x.png │ │ │ ├── Icon-App-50x50@2x.png │ │ │ ├── Icon-App-57x57@1x.png │ │ │ ├── Icon-App-57x57@2x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-72x72@1x.png │ │ │ ├── Icon-App-72x72@2x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── Runner-Bridging-Header.h │ └── Runner.entitlements ├── RunnerTests │ └── RunnerTests.swift └── fastlane │ ├── Appfile │ ├── Deliverfile │ ├── Fastfile │ ├── Matchfile │ ├── Pluginfile │ ├── README.md │ ├── Screengrabfile │ ├── Snapfile │ ├── SnapshotHelper.swift │ ├── metadata │ ├── copyright.txt │ ├── de-DE │ │ ├── apple_tv_privacy_policy.txt │ │ ├── description.txt │ │ ├── keywords.txt │ │ ├── marketing_url.txt │ │ ├── name.txt │ │ ├── privacy_url.txt │ │ ├── promotional_text.txt │ │ ├── release_notes.txt │ │ ├── subtitle.txt │ │ └── support_url.txt │ ├── en-GB │ │ ├── apple_tv_privacy_policy.txt │ │ ├── description.txt │ │ ├── keywords.txt │ │ ├── marketing_url.txt │ │ ├── name.txt │ │ ├── privacy_url.txt │ │ ├── promotional_text.txt │ │ ├── release_notes.txt │ │ ├── subtitle.txt │ │ └── support_url.txt │ ├── primary_category.txt │ ├── primary_first_sub_category.txt │ ├── primary_second_sub_category.txt │ ├── review_information │ │ ├── email_address.txt │ │ ├── first_name.txt │ │ ├── last_name.txt │ │ ├── notes.txt │ │ └── phone_number.txt │ ├── secondary_category.txt │ ├── secondary_first_sub_category.txt │ └── secondary_second_sub_category.txt │ └── screenshots │ ├── de-DE │ ├── iPad Air 13-inch (M2)-Portrait-01-login_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png │ ├── iPhone 14 Plus-Portrait-01-login_screen.png │ ├── iPhone 14 Plus-Portrait-02-dashboard_screen.png │ ├── iPhone 14 Plus-Portrait-03-kanban_board_screen.png │ ├── iPhone 14 Plus-Portrait-04-card_details_screen.png │ ├── iPhone 8 Plus-Portrait-01-login_screen.png │ ├── iPhone 8 Plus-Portrait-02-dashboard_screen.png │ ├── iPhone 8 Plus-Portrait-03-kanban_board_screen.png │ └── iPhone 8 Plus-Portrait-04-card_details_screen.png │ └── en-GB │ ├── iPad Air 13-inch (M2)-Portrait-01-login_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png │ ├── iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png │ ├── iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png │ ├── iPhone 14 Plus-Portrait-01-login_screen.png │ ├── iPhone 14 Plus-Portrait-02-dashboard_screen.png │ ├── iPhone 14 Plus-Portrait-03-kanban_board_screen.png │ ├── iPhone 14 Plus-Portrait-04-card_details_screen.png │ ├── iPhone 8 Plus-Portrait-01-login_screen.png │ ├── iPhone 8 Plus-Portrait-02-dashboard_screen.png │ ├── iPhone 8 Plus-Portrait-03-kanban_board_screen.png │ └── iPhone 8 Plus-Portrait-04-card_details_screen.png ├── lib ├── app_routes.dart ├── board_details │ ├── kanban_board_controller.dart │ ├── kanban_board_screen.dart │ └── list_view_card_item_widget.dart ├── card_details │ ├── card_details_controller.dart │ └── card_details_screen.dart ├── component │ ├── add_task_widget.dart │ ├── drawer_widget.dart │ └── loading_indicator.dart ├── controller │ └── drawer_controller.dart ├── dashboard │ ├── board_item_widget.dart │ ├── dashboard_controller.dart │ └── dashboard_screen.dart ├── env │ └── env.dart ├── guard.dart ├── l10n │ ├── de_de.dart │ ├── en_us.dart │ └── translation.dart ├── licenses │ └── oss_licenses_screen.dart ├── login │ ├── login_controller.dart │ └── login_screen.dart ├── main.dart ├── model │ ├── account.dart │ ├── account.g.dart │ ├── assignment.dart │ ├── assignment.g.dart │ ├── attachment.dart │ ├── attachment.g.dart │ ├── board.dart │ ├── board.g.dart │ ├── card.dart │ ├── card.g.dart │ ├── converter.dart │ ├── label.dart │ ├── label.g.dart │ ├── models.dart │ ├── setting.dart │ ├── setting.g.dart │ ├── stack.dart │ ├── stack.g.dart │ ├── user.dart │ └── user.g.dart ├── my_app.dart ├── oss_licenses.dart ├── privacy_policy │ ├── privacy_policy_controller.dart │ └── privacy_policy_screen.dart ├── service │ ├── auth_service.dart │ ├── auth_service.g.dart │ ├── board_service.dart │ ├── card_service.dart │ ├── http_service.dart │ ├── impl │ │ ├── auth_service_impl.dart │ │ ├── board_service_impl.dart │ │ ├── card_service_impl.dart │ │ ├── http_service.dart │ │ ├── notification_service_impl.dart │ │ ├── retry.dart │ │ ├── stack_repository_impl.dart │ │ ├── storage_service_impl.dart │ │ └── tracking_service_impl.dart │ ├── notification_service.dart │ ├── services.dart │ ├── stack_service.dart │ ├── storage_service.dart │ └── tracking_service.dart ├── settings │ ├── settings_controller.dart │ └── settings_screen.dart └── theme.dart ├── linux ├── .gitignore ├── CMakeLists.txt ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── main.cc ├── my_application.cc └── my_application.h ├── macos ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ └── app_icon_64.png │ ├── Base.lproj │ │ └── MainMenu.xib │ ├── Configs │ │ ├── AppInfo.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── Warnings.xcconfig │ ├── DebugProfile.entitlements │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── RunnerTests │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── screenshots-ios.yaml ├── screenshots.yaml ├── test ├── controller │ ├── card_details_controller_test.dart │ ├── card_details_controller_test.mocks.dart │ ├── dashboard_controller_test.dart │ ├── dashboard_controller_test.mocks.dart │ ├── kanban_board_controller_test.dart │ └── kanban_board_controller_test.mocks.dart ├── licenses │ ├── card_details_screen_test.dart │ ├── card_details_screen_test.mocks.dart │ ├── dashboard_screen_test.dart │ ├── dashboard_screen_test.mocks.dart │ ├── kanban_board_screen_test.dart │ ├── kanban_board_screen_test.mocks.dart │ ├── login_screen_test.dart │ ├── login_screen_test.mocks.dart │ └── test_helpers.dart ├── model │ ├── board_test.dart │ ├── card_test.dart │ └── converter_test.dart └── service │ ├── auth_service_test.dart │ ├── auth_service_test.mocks.dart │ ├── board_service_test.dart │ ├── board_service_test.mocks.dart │ ├── card_service_test.dart │ ├── card_service_test.mocks.dart │ ├── fake_provider.dart │ ├── http_matcher.dart │ ├── http_service_test.dart │ ├── http_service_test.mocks.dart │ └── storage_service_test.dart ├── test_driver ├── integration_driver.dart └── screenshot_driver.dart ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── index.html └── manifest.json └── windows ├── .gitignore ├── CMakeLists.txt ├── flutter ├── CMakeLists.txt ├── generated_plugin_registrant.cc ├── generated_plugin_registrant.h └── generated_plugins.cmake └── runner ├── CMakeLists.txt ├── Runner.rc ├── flutter_window.cpp ├── flutter_window.h ├── main.cpp ├── resource.h ├── resources └── app_icon.ico ├── runner.exe.manifest ├── utils.cpp ├── utils.h ├── win32_window.cpp └── win32_window.h /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: https://www.paypal.com/paypalme/meltzow 16 | -------------------------------------------------------------------------------- /.github/workflows/flutter_ios_build.yml: -------------------------------------------------------------------------------- 1 | name: Flutter iOS Build 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | runs-on: macos-latest 9 | 10 | steps: 11 | - name: Checkout Code 12 | uses: actions/checkout@v4 13 | 14 | - name: Set up Flutter actions 15 | uses: subosito/flutter-action@v2 16 | with: 17 | channel: 'stable' 18 | flutter-version-file: pubspec.yaml 19 | cache: true 20 | 21 | - name: Install dependencies 22 | run: | 23 | flutter config --no-analytics 24 | flutter pub get 25 | 26 | - name: Create .env file 27 | run: | 28 | echo "WIREDASH_SECRET=${{ secrets.WIREDASH_SECRET }}" > .env 29 | echo "WIREDASH_SECRET_TEST=${{ secrets.WIREDASH_SECRET_TEST }}" >> .env 30 | echo "IS_PRODUCTION=false" >> .env 31 | 32 | - name: build_runner 33 | run: flutter pub run build_runner build --delete-conflicting-outputs 34 | 35 | # - name: Run Flutter tests 36 | # run: flutter test 37 | 38 | - uses: ruby/setup-ruby@v1 39 | with: 40 | ruby-version: '3.3' 41 | bundler-cache: true 42 | working-directory: ios 43 | 44 | - name: Set up Fastlane 45 | run: | 46 | cd ios 47 | sudo gem install bundler 48 | bundle config set path 'vendor/bundle' 49 | bundle install 50 | 51 | # - name: Install CocoaPods 52 | # working-directory: ios 53 | # run: | 54 | # sudo gem install cocoapods 55 | # pod setup 56 | 57 | # - name: Install CocoaPods dependencies 58 | # working-directory: ios 59 | # run: | 60 | # pod install 61 | 62 | - name: Build iOS 63 | working-directory: ios 64 | run: | 65 | pod install 66 | bundle exec fastlane ios build 67 | env: 68 | BASE64_BASIC_AUTH_CERTS_REPO: ${{ secrets.BASE64_BASIC_AUTH_CERTS_REPO }} 69 | FASTLANE_APPLE_API_KEY_ID: ${{ secrets.FASTLANE_APPLE_API_KEY_ID }} 70 | FASTLANE_APPLE_API_ISSUER_ID: ${{ secrets.FASTLANE_APPLE_API_ISSUER_ID }} 71 | FASTLANE_APPLE_API_KEY: ${{ secrets.FASTLANE_APPLE_API_KEY }} 72 | DEMO_USER: ${{ secrets.FASTLANE_DEMO_USER }} 73 | DEMO_PASSWORD: ${{ secrets.FASTLANE_DEMO_PASSWORD }} 74 | MATCH_PASSWORD: ${{ secrets.FASTLANE_CERT_MATCH_PASSWORD }} -------------------------------------------------------------------------------- /.github/workflows/flutter_ios_release.yml: -------------------------------------------------------------------------------- 1 | name: Flutter iOS Release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | track: 7 | description: 'Which track should be used? One of beta, production' 8 | required: true 9 | default: 'beta' 10 | type: choice 11 | options: 12 | - beta 13 | - production 14 | 15 | jobs: 16 | release: 17 | runs-on: macos-latest 18 | 19 | steps: 20 | - name: Checkout Code 21 | uses: actions/checkout@v4 22 | 23 | - name: Set up Flutter actions 24 | uses: subosito/flutter-action@v2 25 | with: 26 | channel: 'stable' 27 | flutter-version-file: pubspec.yaml 28 | cache: true 29 | 30 | - name: Install dependencies 31 | run: | 32 | flutter config --no-analytics 33 | flutter pub get 34 | 35 | - name: Create .env file 36 | run: | 37 | echo "WIREDASH_SECRET=${{ secrets.WIREDASH_SECRET }}" > .env 38 | echo "WIREDASH_SECRET_TEST=${{ secrets.WIREDASH_SECRET_TEST }}" >> .env 39 | echo "IS_PRODUCTION=true" >> .env 40 | 41 | - name: build_runner 42 | run: flutter pub run build_runner build --delete-conflicting-outputs 43 | 44 | # - name: Run Flutter tests 45 | # run: flutter test 46 | 47 | - uses: ruby/setup-ruby@v1 48 | with: 49 | ruby-version: '3.3' 50 | bundler-cache: true 51 | working-directory: ios 52 | 53 | - name: Set up Fastlane 54 | run: | 55 | cd ios 56 | sudo gem install bundler 57 | bundle config set path 'vendor/bundle' 58 | bundle install 59 | 60 | - name: Release iOS 61 | working-directory: ios 62 | run: | 63 | pod install 64 | bundle exec fastlane ios release track:${{ github.event.inputs.track }} 65 | env: 66 | BASE64_BASIC_AUTH_CERTS_REPO: ${{ secrets.BASE64_BASIC_AUTH_CERTS_REPO }} 67 | FASTLANE_APPLE_API_KEY_ID: ${{ secrets.FASTLANE_APPLE_API_KEY_ID }} 68 | FASTLANE_APPLE_API_ISSUER_ID: ${{ secrets.FASTLANE_APPLE_API_ISSUER_ID }} 69 | FASTLANE_APPLE_API_KEY: ${{ secrets.FASTLANE_APPLE_API_KEY }} 70 | DEMO_USER: ${{ secrets.FASTLANE_DEMO_USER }} 71 | DEMO_PASSWORD: ${{ secrets.FASTLANE_DEMO_PASSWORD }} 72 | MATCH_PASSWORD: ${{ secrets.FASTLANE_CERT_MATCH_PASSWORD}} -------------------------------------------------------------------------------- /.github/workflows/github-pages.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | # Runs on pushes targeting the default branch 6 | push: 7 | branches: ["master"] 8 | 9 | # Allows you to run this workflow manually from the Actions tab 10 | workflow_dispatch: 11 | 12 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 13 | permissions: 14 | contents: read 15 | pages: write 16 | id-token: write 17 | 18 | # Allow one concurrent deployment 19 | concurrency: 20 | group: "pages" 21 | cancel-in-progress: true 22 | 23 | jobs: 24 | # Single deploy job since we're just deploying 25 | deploy: 26 | environment: 27 | name: github-pages 28 | url: ${{ steps.deployment.outputs.page_url }} 29 | runs-on: ubuntu-22.04 30 | steps: 31 | - name: Checkout 32 | uses: actions/checkout@v3 33 | - name: Setup Pages 34 | uses: actions/configure-pages@v2 35 | - name: Upload artifact 36 | uses: actions/upload-pages-artifact@v1 37 | with: 38 | # Upload entire repository 39 | path: 'pages' 40 | - name: Deploy to GitHub Pages 41 | id: deployment 42 | uses: actions/deploy-pages@v1 43 | -------------------------------------------------------------------------------- /.github/workflows/remove-old-artifacts.yml: -------------------------------------------------------------------------------- 1 | name: Remove old artifacts 2 | 3 | on: 4 | schedule: 5 | # Every day at 12:13 6 | - cron: '13 12 * * *' 7 | workflow_dispatch: 8 | 9 | jobs: 10 | remove-old-artifacts: 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 10 13 | 14 | steps: 15 | - name: Remove artifacts 16 | uses: c-hive/gha-remove-artifacts@v1.4.0 17 | with: 18 | age: '1 month' # ' ', e.g. 5 days, 2 years, 90 seconds, parsed by Moment.js 19 | # Optional inputs 20 | # skip-tags: true 21 | skip-recent: 3 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | /coverage/ 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Android Studio will place build artifacts here 43 | /android/app/debug 44 | /android/app/profile 45 | /android/app/release 46 | 47 | /test/data/ 48 | 49 | #Envied 50 | .env 51 | env.g.dart 52 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 17 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 18 | - platform: android 19 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 20 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 21 | - platform: ios 22 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 23 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 24 | - platform: linux 25 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 26 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 27 | - platform: macos 28 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 29 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 30 | - platform: web 31 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 32 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 33 | - platform: windows 34 | create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 35 | base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nextcloud Deck NG 2 | Nextcloud Deck NG – Your Project Management Tool in your Nextcloud 3 | 4 | # development 5 | * start the dockerservices in docker-compose.yml ("nextcloud" and "database") 6 | * cp example.env .env 7 | * comment out all lines with "static final String" in lib/env/env.dart 8 | * flutter_scripts run => "generate_files" 9 | 10 | ## running integration test (disabled currently) 11 | * flutter run integration_test/main_test.dart --host-vmservice-port 9753 --disable-service-auth-codes --dart-define CONVENIENT_TEST_MANAGER_HOST=10.0.2.2 --dart-define CONVENIENT_TEST_APP_CODE_DIR=$PWD 12 | 13 | ## apis: 14 | * https://github.com/nextcloud/deck/blob/master/docs/API.md 15 | * https://github.com/nextcloud/deck/blob/master/docs/API-Nextcloud.md 16 | * https://docs.nextcloud.com/server/latest/developer_manual/client_apis/LoginFlow/index.html 17 | * https://docs.nextcloud.com/server/latest/developer_manual/digging_deeper/rest_apis.html 18 | 19 | ## others 20 | * https://m3.material.io/styles/icons/overview 21 | * https://fonts.google.com/icons 22 | * https://wiredash.com/ 23 | * https://flutterviz.io/ 24 | 25 | ### automatic screenshots 26 | * dart pub global activate flutter_scripts 27 | * dart pub global activate -s git https://github.com/meltzow/screenshots.git 28 | * export PATH="$PATH":"$HOME/.pub-cache/bin" 29 | * flutter_scripts run 30 | 31 | ### stores & marketing URLs 32 | * https://play.google.com/store/apps/details?id=net.meltzow.deckng 33 | * https://apps.apple.com/us/app/deck-ng/id6443334702 34 | * https://play.google.com/console/u/0/developers/7989774826491590599/app/4976068423564949204/app-dashboard?timespan=thirtyDays 35 | * https://appstoreconnect.apple.com/apps/6443334702/distribution 36 | 37 | # Marketing 38 | titel: Nextcloud Deck NG 39 | slogan: efficient teamwork for your nexcloud 40 | description: Nextcloud Deck NG is the ultimate app to manage your projects and tasks – flexible, secure, and fully integrated with your Nextcloud server. Whether for personal use or team collaboration, Nextcloud Deck NG helps you stay organized and work more efficiently. 41 | Compatibility: Requires Nextcloud Server version X.X or higher with the Deck app enabled. 42 | call-to-action-links: https://play.google.com/store/apps/details?id=net.meltzow.deckng, https://apps.apple.com/us/app/deck-ng/id6443334702 43 | promotional text: Take control of your projects with Nextcloud Deck NG! Simplify tasks, collaborate in real-time and stay secure with self-hosted data. Download now for smarter management! 44 | Features: 45 | * Login with Username, Password, or QR-Code 46 | * Kanban Board View with Drag-and-Drop 47 | * Assign Users and Labels to Cards 48 | * Set Due Dates for Tasks 49 | * Multiple Sorting Options for Boards 50 | * Support for Subpath Logins like https://next.cloud/subpath 51 | * Easy Feedback: Send bugs or feature requests 52 | layout: https://github.com/PaulleDemon/awesome-landing-pages/tree/main/src/apps/AISales 53 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | 31 | analyzer: 32 | exclude: 33 | - "**/*.g.dart" -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/to/reference-keystore 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | 15 | **/report.xml -------------------------------------------------------------------------------- /android/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | 5 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 6 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 7 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 5 | id "dev.flutter.flutter-gradle-plugin" 6 | } 7 | 8 | def keystoreProperties = new Properties() 9 | def keystorePropertiesFile = rootProject.file('key.properties') 10 | if (keystorePropertiesFile.exists()) { 11 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 12 | } 13 | 14 | dependencies { 15 | implementation 'com.google.android.play:integrity:1.4.0' 16 | // Other dependencies 17 | } 18 | 19 | android { 20 | namespace "net.meltzow.deckng" 21 | compileSdkVersion 34 22 | ndkVersion "26.1.10909125" 23 | 24 | compileOptions { 25 | sourceCompatibility JavaVersion.VERSION_15 26 | targetCompatibility JavaVersion.VERSION_15 27 | } 28 | 29 | kotlinOptions { 30 | jvmTarget = JavaVersion.VERSION_15 31 | } 32 | 33 | defaultConfig { 34 | applicationId "net.meltzow.deckng" 35 | // You can update the following values to match your application needs. 36 | // For more information, see: https://flutter.dev/to/review-gradle-config. 37 | minSdk 21 38 | targetSdk 34 39 | versionCode 99 40 | versionName '2.0.0' 41 | } 42 | 43 | signingConfigs { 44 | release { 45 | keyAlias keystoreProperties['keyAlias'] 46 | keyPassword keystoreProperties['keyPassword'] 47 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null 48 | storePassword keystoreProperties['storePassword'] 49 | } 50 | } 51 | buildTypes { 52 | release { 53 | signingConfig signingConfigs.release 54 | } 55 | } 56 | } 57 | 58 | flutter { 59 | source = "../.." 60 | } 61 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/net/meltzow/deckng/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package net.meltzow.deckng 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = "../build" 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(":app") 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /android/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | package_name("net.meltzow.deckng") 2 | -------------------------------------------------------------------------------- /android/fastlane/Pluginfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | gem 'fastlane-plugin-versioning_android' 6 | -------------------------------------------------------------------------------- /android/fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ---- 3 | 4 | # Installation 5 | 6 | Make sure you have the latest version of the Xcode command line tools installed: 7 | 8 | ```sh 9 | xcode-select --install 10 | ``` 11 | 12 | For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) 13 | 14 | # Available Actions 15 | 16 | ## Android 17 | 18 | ### android production 19 | 20 | ```sh 21 | [bundle exec] fastlane android production 22 | ``` 23 | 24 | 25 | 26 | ### android beta 27 | 28 | ```sh 29 | [bundle exec] fastlane android beta 30 | ``` 31 | 32 | 33 | 34 | ### android test 35 | 36 | ```sh 37 | [bundle exec] fastlane android test 38 | ``` 39 | 40 | Runs all the tests 41 | 42 | ### android build 43 | 44 | ```sh 45 | [bundle exec] fastlane android build 46 | ``` 47 | 48 | 49 | 50 | ### android release 51 | 52 | ```sh 53 | [bundle exec] fastlane android release 54 | ``` 55 | 56 | Deploy a new version to the Google Play 57 | 58 | ### android update_metadata 59 | 60 | ```sh 61 | [bundle exec] fastlane android update_metadata 62 | ``` 63 | 64 | 65 | 66 | ### android beta_bkp 67 | 68 | ```sh 69 | [bundle exec] fastlane android beta_bkp 70 | ``` 71 | 72 | Submit a new Beta Build to Crashlytics Beta 73 | 74 | ---- 75 | 76 | This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. 77 | 78 | More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). 79 | 80 | The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 81 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/changelogs/2.0.0.txt: -------------------------------------------------------------------------------- 1 | Komplett überarbeitete Version mit neuer Benutzeroberfläche. Neue Funktionen kommen in den nächsten Versionen. 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/changelogs/2.0.3.txt: -------------------------------------------------------------------------------- 1 | Der Login mit einem Barcode von deiner Nextcloud wird nun unterstützt. 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/changelogs/2.0.4.txt: -------------------------------------------------------------------------------- 1 | Bessere Unterstützung beim Login und bei der Beschreibung einer Karte wird nun Markdown unterstützt. 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/changelogs/2.0.5.txt: -------------------------------------------------------------------------------- 1 | Wir freuen uns, das neueste Update für Nextcloud Deck NG vorzustellen, vollgepackt mit neuen Funktionen und Verbesserungen, um deine Erfahrung noch besser zu machen: 2 | 3 | Sortierung von Boards: Sortiere deine Boards für eine bessere Organisation und Übersichtlichkeit. 4 | Verbesserte Titelzeile in der Boardansicht: Ein intuitiveres und optimiertes Design für eine einfachere Navigation. 5 | Unterstützung von Schlagwörtern/Labels: Organisiere und kategorisiere deine Aufgaben jetzt noch effektiver. 6 | Anzeige der Karten-ID: Behalte die Übersicht mit der schnellen Referenz der Card IDs. 7 | UI-Verbesserungen: Genieße eine überarbeitete und benutzerfreundlichere Oberfläche. 8 | Jetzt aktualisieren und von den neuen Funktionen profitieren – für ein noch effizienteres Projektmanagement! -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/changelogs/default.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/changelogs/default.txt -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/full_description.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG ist die perfekte App, um deine Projekte und Aufgaben zu organisieren – flexibel, sicher und vollständig integriert in deinen Nextcloud-Server. Ob privat oder beruflich, Nextcloud Deck NG hilft dir, den Überblick zu behalten und effizienter zu arbeiten. 2 | 3 | Kompatibilität: 4 | Erfordert Nextcloud Server Version 28 oder höher und die Deck-App aktiviert. 5 | 6 | Lade Nextcloud Deck NG herunter und verbessere deine Organisation – überall und jederzeit! -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/featureGraphic.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/icon.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/icon.jpeg -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/phoneScreenshots/01-login_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/phoneScreenshots/01-login_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/phoneScreenshots/02-dashboard_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/phoneScreenshots/02-dashboard_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/phoneScreenshots/03-kanban_board_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/phoneScreenshots/03-kanban_board_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/phoneScreenshots/04-card_details_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/phoneScreenshots/04-card_details_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01-login_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/01-login_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02-dashboard_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/02-dashboard_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03-kanban_board_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/03-kanban_board_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04-card_details_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/images/tenInchScreenshots/04-card_details_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/short_description.txt: -------------------------------------------------------------------------------- 1 | Effiziente Teamarbeit und Organisation auf deinem Nextcloud-Server. -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/title.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG -------------------------------------------------------------------------------- /android/fastlane/metadata/android/de-DE/video.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/de-DE/video.txt -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/changelogs/2.0.0.txt: -------------------------------------------------------------------------------- 1 | Completely revised version with a new user interface. New features will be coming in the next versions. -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/changelogs/2.0.3.txt: -------------------------------------------------------------------------------- 1 | Login with a barcode from your nextcloud is now supported. 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/changelogs/2.0.4.txt: -------------------------------------------------------------------------------- 1 | Better support for login and card description: Markdown is now supported. 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/changelogs/2.0.5.txt: -------------------------------------------------------------------------------- 1 | We’re excited to introduce the latest update for Nextcloud Deck NG, packed with new features and enhancements to improve your experience: 2 | 3 | Board Sorting: Easily sort your boards for better organization and accessibility. 4 | Improved Title Bar in Board View: A more intuitive and polished look for seamless navigation. 5 | Support for Tags/Labels: Organize and categorize your tasks more effectively with labels. 6 | Card ID Display: Quickly reference card IDs for better task management. 7 | UI Improvements: Enjoy a more refined and user-friendly interface. 8 | Update now to take advantage of these new features and make your project management even smoother! -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/changelogs/default.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/full_description.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG is the ultimate app to manage your projects and tasks – flexible, secure, and fully integrated with your Nextcloud server. Whether for personal use or team collaboration, Nextcloud Deck NG helps you stay organized and work more efficiently. 2 | 3 | Compatibility: 4 | Requires Nextcloud Server version 28 or higher with the Deck app enabled. 5 | 6 | Download Nextcloud Deck NG today and take your organization to the next level – anywhere, anytime! -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/phoneScreenshots/01-login_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/phoneScreenshots/01-login_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/phoneScreenshots/02-dashboard_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/phoneScreenshots/02-dashboard_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/phoneScreenshots/03-kanban_board_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/phoneScreenshots/03-kanban_board_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/phoneScreenshots/04-card_details_screenPixel 4-Portrait-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/phoneScreenshots/04-card_details_screenPixel 4-Portrait-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/01-login_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/01-login_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/02-dashboard_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/02-dashboard_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/03-kanban_board_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/03-kanban_board_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/04-card_details_screenNexus 9-LandscapeRight-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/images/tenInchScreenshots/04-card_details_screenNexus 9-LandscapeRight-.png -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/short_description.txt: -------------------------------------------------------------------------------- 1 | Streamlined teamwork and organization for your Nextcloud server. -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/title.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG -------------------------------------------------------------------------------- /android/fastlane/metadata/android/en-GB/video.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/android/fastlane/metadata/android/en-GB/video.txt -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | repositories { 14 | google() 15 | mavenCentral() 16 | gradlePluginPortal() 17 | } 18 | } 19 | 20 | plugins { 21 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 22 | id "com.android.application" version '8.5.0' apply false 23 | id "org.jetbrains.kotlin.android" version "1.8.22" apply false 24 | } 25 | 26 | include ":app" 27 | -------------------------------------------------------------------------------- /assets/albums-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/albums-outline.png -------------------------------------------------------------------------------- /assets/albums-outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 37 | Albums 39 | 42 | 45 | 57 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /assets/icon-foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/icon-foreground.png -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/icon.png -------------------------------------------------------------------------------- /assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/images/icon.png -------------------------------------------------------------------------------- /assets/kamil-porembinski-clouds-2732.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/kamil-porembinski-clouds-2732.jpg -------------------------------------------------------------------------------- /assets/kamil-porembinski-clouds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/kamil-porembinski-clouds.jpg -------------------------------------------------------------------------------- /assets/logo.ora: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/logo.ora -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/logo.png -------------------------------------------------------------------------------- /assets/splash-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/splash-dark.png -------------------------------------------------------------------------------- /assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/assets/splash.png -------------------------------------------------------------------------------- /build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | sources: 4 | - $package$ 5 | - lib/$lib$ 6 | - lib/**.dart 7 | - test/**.dart 8 | - integration_test/**.dart 9 | builders: 10 | mockito|mockBuilder: 11 | generate_for: 12 | - test/**.dart 13 | - integration_test/**.dart -------------------------------------------------------------------------------- /devtools_options.yaml: -------------------------------------------------------------------------------- 1 | extensions: 2 | - provider: true -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | volumes: 4 | nextcloud: 5 | db: 6 | 7 | services: 8 | db: 9 | image: mariadb:10.11 10 | command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW 11 | volumes: 12 | - db:/var/lib/mysql 13 | environment: 14 | - MARIADB_ROOT_PASSWORD=nextcloud 15 | - MARIADB_PASSWORD=nextcloud 16 | - MARIADB_DATABASE=nextcloud 17 | - MARIADB_USER=nextcloud 18 | 19 | app: 20 | image: nextcloud:stable 21 | ports: 22 | - "8080:80" 23 | links: 24 | - db 25 | volumes: 26 | - nextcloud:/var/www/html 27 | environment: 28 | - MYSQL_PASSWORD=nextcloud 29 | - MYSQL_DATABASE=nextcloud 30 | - MYSQL_USER=nextcloud 31 | - MYSQL_HOST=db 32 | - TRUSTED_PROXIES=127.0.0.1 localhost 33 | - NEXTCLOUD_TRUSTED_DOMAINS=127.0.0.1 localhost:8100 192.168.178.81:8080 192.168.178.49:8080 34 | - NEXTCLOUD_ADMIN_USER=admin 35 | - NEXTCLOUD_ADMIN_PASSWORD=admin 36 | -------------------------------------------------------------------------------- /example.env: -------------------------------------------------------------------------------- 1 | WIREDASH_SECRET=33333333333333333333333333333333 2 | WIREDASH_PROJECT_ID=22222222222 3 | WIREDASH_SECRET_TEST=11111111111111111111111111111111 4 | IS_PRODUCTION=false -------------------------------------------------------------------------------- /integration_test/login_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:deck_ng/model/models.dart'; 4 | import 'package:deck_ng/my_app.dart'; 5 | import 'package:deck_ng/service/services.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_test/flutter_test.dart'; 8 | import 'package:get/get.dart'; 9 | import 'package:integration_test/integration_test.dart'; 10 | import 'package:mockito/annotations.dart'; 11 | import 'package:mockito/mockito.dart'; 12 | import 'package:screenshots/src/capture_screen.dart'; 13 | 14 | import 'login_test.mocks.dart'; 15 | 16 | @GenerateMocks([AuthService, StorageService, NotificationService]) 17 | void main() { 18 | IntegrationTestWidgetsFlutterBinding binding = 19 | IntegrationTestWidgetsFlutterBinding.ensureInitialized(); 20 | 21 | setUp(() async { 22 | late AuthService authServiceMock; 23 | 24 | Get.replace(MockAuthService()); 25 | authServiceMock = Get.find(); 26 | 27 | Get.replace(MockStorageService()); 28 | var storageServiceMock = Get.find(); 29 | 30 | Get.replace(MockNotificationService()); 31 | //var storageServiceMock = Get.find(); 32 | 33 | when(storageServiceMock.getAccount()).thenReturn(null); 34 | when(storageServiceMock.hasAccount()).thenReturn(false); 35 | when(storageServiceMock.saveAccount(Account( 36 | username: "admin", 37 | password: "admin", 38 | authData: 'Basic ${base64.encode(utf8.encode('admin:admin'))}', 39 | url: "http://192.168.178.81:8080", 40 | isAuthenticated: false))) 41 | .thenReturn(null); 42 | 43 | when(storageServiceMock.hasSettings()).thenReturn(false); 44 | 45 | var resp = Capabilities(CapabilitiesOcs( 46 | meta: Meta('success', 200, 'success'), 47 | data: CapabilitiesData(Version(0, 0, 26, "26.0.0", '', false), {}))); 48 | when(authServiceMock.checkServer('https://my.next.cloud')) 49 | .thenAnswer((_) async => resp); 50 | when(authServiceMock.isAuth()).thenReturn(false); 51 | }); 52 | 53 | testWidgets('display login screen', (tester) async { 54 | await tester.pumpWidget(MyApp(debugShowCheckedModeBanner: false)); 55 | 56 | await tester.enterText( 57 | find.byKey(const Key('serverUrl')), 'https://my.next.cloud'); 58 | await tester.enterText(find.byKey(const Key('username')), 'deckNG'); 59 | await tester.enterText(find.byKey(const Key('password')), 'secret'); 60 | await tester.pumpAndSettle(); 61 | expect(find.text('Login'), findsOneWidget); 62 | await tester.tapAt(const Offset(10, 10)); 63 | await tester.pumpAndSettle(); 64 | await screenshot(binding, tester, 'login_screen'); 65 | }); 66 | } 67 | -------------------------------------------------------------------------------- /integration_test/settings_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/app_routes.dart'; 2 | import 'package:deck_ng/model/models.dart' as nc; 3 | import 'package:deck_ng/my_app.dart'; 4 | import 'package:deck_ng/service/services.dart'; 5 | import 'package:deck_ng/settings/settings_controller.dart'; 6 | import 'package:deck_ng/settings/settings_screen.dart'; 7 | import 'package:flutter_test/flutter_test.dart'; 8 | import 'package:get/get.dart'; 9 | import 'package:integration_test/integration_test.dart'; 10 | import 'package:mockito/annotations.dart'; 11 | import 'package:mockito/mockito.dart'; 12 | import 'package:screenshots/src/capture_screen.dart'; 13 | 14 | import 'settings_test.mocks.dart'; 15 | 16 | @GenerateNiceMocks([ 17 | MockSpec(), 18 | MockSpec(), 19 | ]) 20 | void main() { 21 | late SettingsController controller; 22 | late StorageService storageServiceMock; 23 | 24 | final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized(); 25 | 26 | setUp(() async { 27 | Get.testMode = true; 28 | Get.replace(MockStorageService()); 29 | storageServiceMock = Get.find(); 30 | Get.replace(MockNotificationService()); 31 | 32 | controller = SettingsController(); 33 | }); 34 | 35 | testWidgets('display settings screen', (WidgetTester tester) async { 36 | when(storageServiceMock.hasAccount()).thenReturn(true); 37 | when(storageServiceMock.getAccount()).thenReturn(nc.Account( 38 | username: 'foo', 39 | password: 'ddd', 40 | authData: 'authData', 41 | url: 'url', 42 | isAuthenticated: true)); 43 | 44 | when(storageServiceMock.hasSettings()).thenReturn(true); 45 | when(storageServiceMock.getSetting()).thenReturn(nc.Setting('english')); 46 | 47 | Get.lazyReplace(() => controller); 48 | 49 | await tester.pumpWidget(MyApp( 50 | debugShowCheckedModeBanner: false, 51 | initialRoute: AppRoutes.settings, 52 | initialPages: [ 53 | GetPage( 54 | parameters: {}, 55 | name: AppRoutes.settings, 56 | page: () => SettingScreen(), 57 | ) 58 | ])); 59 | await Future.delayed(const Duration(seconds: 1), () {}); 60 | await tester.pumpAndSettle(); 61 | await binding.convertFlutterSurfaceToImage(); 62 | await tester.pumpAndSettle(); 63 | await screenshot(binding, tester, 'settings_screen'); 64 | }, skip: true); 65 | } 66 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | 36 | *.mobileprovision 37 | *.ipa 38 | *.app.dSYM.zip 39 | 40 | **/report.xml 41 | /fastlane/Preview.html 42 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | # Add this line to include the cocoapods gem 5 | gem 'cocoapods' 6 | 7 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 8 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 9 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '13.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | target 'RunnerTests' do 36 | inherit! :search_paths 37 | end 38 | end 39 | 40 | post_install do |installer| 41 | installer.pods_project.targets.each do |target| 42 | flutter_additional_ios_build_settings(target) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - device_info_plus (0.0.1): 3 | - Flutter 4 | - Flutter (1.0.0) 5 | - integration_test (0.0.1): 6 | - Flutter 7 | - package_info_plus (0.4.5): 8 | - Flutter 9 | - path_provider_foundation (0.0.1): 10 | - Flutter 11 | - FlutterMacOS 12 | - shared_preferences_foundation (0.0.1): 13 | - Flutter 14 | - FlutterMacOS 15 | - url_launcher_ios (0.0.1): 16 | - Flutter 17 | 18 | DEPENDENCIES: 19 | - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) 20 | - Flutter (from `Flutter`) 21 | - integration_test (from `.symlinks/plugins/integration_test/ios`) 22 | - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) 23 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 24 | - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) 25 | - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) 26 | 27 | EXTERNAL SOURCES: 28 | device_info_plus: 29 | :path: ".symlinks/plugins/device_info_plus/ios" 30 | Flutter: 31 | :path: Flutter 32 | integration_test: 33 | :path: ".symlinks/plugins/integration_test/ios" 34 | package_info_plus: 35 | :path: ".symlinks/plugins/package_info_plus/ios" 36 | path_provider_foundation: 37 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 38 | shared_preferences_foundation: 39 | :path: ".symlinks/plugins/shared_preferences_foundation/darwin" 40 | url_launcher_ios: 41 | :path: ".symlinks/plugins/url_launcher_ios/ios" 42 | 43 | SPEC CHECKSUMS: 44 | device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d 45 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 46 | integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4 47 | package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c 48 | path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 49 | shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 50 | url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe 51 | 52 | PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 53 | 54 | COCOAPODS: 1.15.2 55 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSCameraUsageDescription 6 | Camera permission is required for barcode scanning. 7 | ITSAppUsesNonExemptEncryption 8 | 9 | NSPhotoLibraryUsageDescription 10 | Possibilty to add some photos to nextcloud issues if needed 11 | CADisableMinimumFrameDurationOnPhone 12 | 13 | CFBundleDevelopmentRegion 14 | $(DEVELOPMENT_LANGUAGE) 15 | CFBundleDisplayName 16 | deck-ng 17 | CFBundleExecutable 18 | $(EXECUTABLE_NAME) 19 | CFBundleIdentifier 20 | $(PRODUCT_BUNDLE_IDENTIFIER) 21 | CFBundleInfoDictionaryVersion 22 | 6.0 23 | CFBundleName 24 | deckng 25 | CFBundlePackageType 26 | APPL 27 | CFBundleShortVersionString 28 | 2.0.2 29 | CFBundleSignature 30 | ???? 31 | CFBundleVersion 32 | 71 33 | LSRequiresIPhoneOS 34 | 35 | UIApplicationSupportsIndirectInputEvents 36 | 37 | UILaunchStoryboardName 38 | LaunchScreen 39 | UIMainStoryboardFile 40 | Main 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | UISupportedInterfaceOrientations~ipad 48 | 49 | UIInterfaceOrientationPortrait 50 | UIInterfaceOrientationPortraitUpsideDown 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | UIViewControllerBasedStatusBarAppearance 55 | 56 | com.posthog.posthog.API_KEY 57 | phc_za6nWkOZPQYfJGPGQff8tucXXvk2WbxlQMhHz9RENKK 58 | com.posthog.posthog.POSTHOG_HOST 59 | https://eu.i.posthog.com 60 | com.posthog.posthog.CAPTURE_APPLICATION_LIFECYCLE_EVENTS 61 | 62 | com.posthog.posthog.DEBUG 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/Runner/Runner.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ios/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier("net.meltzow.deckng") # The bundle identifier of your app 2 | apple_id("appstore@meltzow.net") # Your Apple Developer Portal username 3 | 4 | itc_provider "F3C769M2C7" 5 | 6 | # For more information about the Appfile, see: 7 | # https://docs.fastlane.tools/advanced/#appfile 8 | -------------------------------------------------------------------------------- /ios/fastlane/Deliverfile: -------------------------------------------------------------------------------- 1 | # The Deliverfile allows you to store various App Store Connect metadata 2 | # For more information, check out the docs 3 | # https://docs.fastlane.tools/actions/deliver/ 4 | #dev_portal_team_id = "125543860" 5 | submit_for_review(true) 6 | automatic_release(true) 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/fastlane/Matchfile: -------------------------------------------------------------------------------- 1 | storage_mode("git") 2 | type("appstore") # The default type, can be: appstore, adhoc, enterprise or development 3 | app_identifier(["net.meltzow.deckng"]) # The bundle identifier of your app 4 | username("appstore@meltzow.net") 5 | 6 | # app_identifier(["tools.fastlane.app", "tools.fastlane.app2"]) 7 | # username("user@fastlcat ane.tools") # Your Apple Developer Portal username 8 | 9 | # For all available options run `fastlane match --help` 10 | # Remove the # in the beginning of the line to enable the other options 11 | 12 | # The docs are available on https://docs.fastlane.tools/actions/match 13 | -------------------------------------------------------------------------------- /ios/fastlane/Pluginfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | gem 'fastlane-plugin-versioning' 6 | -------------------------------------------------------------------------------- /ios/fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ---- 3 | 4 | # Installation 5 | 6 | Make sure you have the latest version of the Xcode command line tools installed: 7 | 8 | ```sh 9 | xcode-select --install 10 | ``` 11 | 12 | For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) 13 | 14 | # Available Actions 15 | 16 | ### tests_ios 17 | 18 | ```sh 19 | [bundle exec] fastlane tests_ios 20 | ``` 21 | 22 | 23 | 24 | ---- 25 | 26 | 27 | ## iOS 28 | 29 | ### ios import_certificate_from_github 30 | 31 | ```sh 32 | [bundle exec] fastlane ios import_certificate_from_github 33 | ``` 34 | 35 | 36 | 37 | ### ios build 38 | 39 | ```sh 40 | [bundle exec] fastlane ios build 41 | ``` 42 | 43 | 44 | 45 | ### ios release 46 | 47 | ```sh 48 | [bundle exec] fastlane ios release 49 | ``` 50 | 51 | 52 | 53 | ### ios beta 54 | 55 | ```sh 56 | [bundle exec] fastlane ios beta 57 | ``` 58 | 59 | 60 | 61 | ### ios sim 62 | 63 | ```sh 64 | [bundle exec] fastlane ios sim 65 | ``` 66 | 67 | 68 | 69 | ### ios snapshots 70 | 71 | ```sh 72 | [bundle exec] fastlane ios snapshots 73 | ``` 74 | 75 | 76 | 77 | ### ios screenshots 78 | 79 | ```sh 80 | [bundle exec] fastlane ios screenshots 81 | ``` 82 | 83 | 84 | 85 | ---- 86 | 87 | This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. 88 | 89 | More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). 90 | 91 | The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 92 | -------------------------------------------------------------------------------- /ios/fastlane/Screengrabfile: -------------------------------------------------------------------------------- 1 | # remove the leading '#' to uncomment lines 2 | 3 | # app_package_name('your.app.package') 4 | # use_tests_in_packages(['your.screenshot.tests.package']) 5 | 6 | app_apk_path('android/app/build/outputs/apk/debug/app-debug.apk') 7 | tests_apk_path('android/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk') 8 | 9 | locales(['en-GB', 'de-DE']) 10 | #locales(['de-DE']) 11 | use_timestamp_suffix(false) 12 | 13 | # clear all previously generated screenshots in your local output directory before creating new ones 14 | # clear_previous_screenshots(true) 15 | 16 | # For more information about all available options run 17 | # fastlane screengrab --help 18 | -------------------------------------------------------------------------------- /ios/fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | # Uncomment the lines below you want to change by removing the # in the beginning 2 | 3 | # A list of devices you want to take the screenshots from 4 | # devices([ 5 | # "iPhone 8", 6 | # "iPhone 8 Plus", 7 | # "iPhone SE", 8 | # "iPhone X", 9 | # "iPad Pro (12.9-inch)", 10 | # "iPad Pro (9.7-inch)", 11 | # "Apple TV 1080p", 12 | # "Apple Watch Series 6 - 44mm" 13 | # ]) 14 | 15 | devices([ 16 | "iPhone 14 Plus", 17 | "iPhone 8 Plus", 18 | "iPad Pro (12.9-inch) (6th generation)", 19 | "iPad Pro (12.9-inch) (2nd generation)", 20 | ]) 21 | 22 | 23 | languages([ 24 | "en-GB", 25 | "de-DE", 26 | ]) 27 | 28 | # The name of the scheme which contains the UI Tests 29 | # scheme("SchemeName") 30 | 31 | # Where should the resulting screenshots be stored? 32 | # output_directory("./screenshots") 33 | 34 | # remove the '#' to clear all previously generated screenshots before creating new ones 35 | clear_previous_screenshots(true) 36 | 37 | # Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception. See also override_status_bar_arguments for custom options. 38 | override_status_bar(true) 39 | 40 | # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments 41 | # launch_arguments(["-favColor red"]) 42 | 43 | # For more information about all available options run 44 | # fastlane action snapshot 45 | ios_version("16.0") 46 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/copyright.txt: -------------------------------------------------------------------------------- 1 | 2024/2025 Mario Meltzow 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/apple_tv_privacy_policy.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/description.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG ist die perfekte App, um deine Projekte und Aufgaben zu organisieren – flexibel, sicher und vollständig integriert in deinen Nextcloud-Server. Ob privat oder beruflich, Nextcloud Deck NG hilft dir, den Überblick zu behalten und effizienter zu arbeiten. 2 | 3 | Kompatibilität: 4 | Erfordert Nextcloud Server Version 28 oder höher und die Deck-App aktiviert. 5 | 6 | Lade Nextcloud Deck NG herunter und verbessere deine Organisation – überall und jederzeit! -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/keywords.txt: -------------------------------------------------------------------------------- 1 | Nextcloud 2 | Projektmanagement 3 | Aufgabenmanager 4 | Teamarbeit 5 | To-Do-Liste 6 | Deck 7 | Selbstgehostet 8 | Datenschutz 9 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/marketing_url.txt: -------------------------------------------------------------------------------- 1 | https://meltzow.github.io/deck-ng/ 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/name.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/privacy_url.txt: -------------------------------------------------------------------------------- 1 | https://meltzow.github.io/deck-ng/#privacy 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Behalte Projekte im Griff mit Nextcloud Deck NG: Intuitiv, teamfähig, sicher und selbstgehostet. Perfekt für Aufgabenmanagement und Produktivität. Jetzt downloaden! -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/release_notes.txt: -------------------------------------------------------------------------------- 1 | Wir freuen uns, das neueste Update für Nextcloud Deck NG vorzustellen, vollgepackt mit neuen Funktionen und Verbesserungen, um deine Erfahrung noch besser zu machen: 2 | 3 | Sortierung von Boards: Sortiere deine Boards für eine bessere Organisation und Übersichtlichkeit. 4 | Verbesserte Titelzeile in der Boardansicht: Ein intuitiveres und optimiertes Design für eine einfachere Navigation. 5 | Unterstützung von Schlagwörtern/Labels: Organisiere und kategorisiere deine Aufgaben jetzt noch effektiver. 6 | Anzeige der Karten-ID: Behalte die Übersicht mit der schnellen Referenz der Card IDs. 7 | UI-Verbesserungen: Genieße eine überarbeitete und benutzerfreundlichere Oberfläche. 8 | Jetzt aktualisieren und von den neuen Funktionen profitieren – für ein noch effizienteres Projektmanagement! -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/subtitle.txt: -------------------------------------------------------------------------------- 1 | Teamwork & Orga für Nextcloud -------------------------------------------------------------------------------- /ios/fastlane/metadata/de-DE/support_url.txt: -------------------------------------------------------------------------------- 1 | https://github.com/meltzow/deck-ng/issues 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/apple_tv_privacy_policy.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/description.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG is the ultimate app to manage your projects and tasks – flexible, secure, and fully integrated with your Nextcloud server. Whether for personal use or team collaboration, Nextcloud Deck NG helps you stay organized and work more efficiently. 2 | 3 | Compatibility: 4 | Requires Nextcloud Server version X.X or higher with the Deck app enabled. 5 | 6 | Download Nextcloud Deck NG today and take your organization to the next level – anywhere, anytime! -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/keywords.txt: -------------------------------------------------------------------------------- 1 | Nextcloud 2 | Project management 3 | task manager 4 | teamwork 5 | to-do list 6 | Deck 7 | self-hosted 8 | privacy 9 | productivity -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/marketing_url.txt: -------------------------------------------------------------------------------- 1 | https://meltzow.github.io/deck-ng/ 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/name.txt: -------------------------------------------------------------------------------- 1 | Nextcloud Deck NG -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/privacy_url.txt: -------------------------------------------------------------------------------- 1 | https://meltzow.github.io/deck-ng/#privacy 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Take control of your projects with Nextcloud Deck NG! Simplify tasks, collaborate in real-time and stay secure with self-hosted data. Download now for smarter management! -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/release_notes.txt: -------------------------------------------------------------------------------- 1 | We’re excited to introduce the latest update for Nextcloud Deck NG, packed with new features and enhancements to improve your experience: 2 | 3 | Board Sorting: Easily sort your boards for better organization and accessibility. 4 | Improved Title Bar in Board View: A more intuitive and polished look for seamless navigation. 5 | Support for Tags/Labels: Organize and categorize your tasks more effectively with labels. 6 | Card ID Display: Quickly reference card IDs for better task management. 7 | UI Improvements: Enjoy a more refined and user-friendly interface. 8 | Update now to take advantage of these new features and make your project management even smoother! -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/subtitle.txt: -------------------------------------------------------------------------------- 1 | Teamwork & Org for Nextcloud -------------------------------------------------------------------------------- /ios/fastlane/metadata/en-GB/support_url.txt: -------------------------------------------------------------------------------- 1 | https://github.com/meltzow/deck-ng/issues 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/primary_category.txt: -------------------------------------------------------------------------------- 1 | PRODUCTIVITY 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/primary_first_sub_category.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/primary_second_sub_category.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/review_information/email_address.txt: -------------------------------------------------------------------------------- 1 | deckng@meltzow.net 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/review_information/first_name.txt: -------------------------------------------------------------------------------- 1 | Mario 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/review_information/last_name.txt: -------------------------------------------------------------------------------- 1 | Meltzow 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/review_information/notes.txt: -------------------------------------------------------------------------------- 1 | please enter the following url in the app: 2 | https://nextcloud.meltzow.net 3 | 4 | After clicking the login button, a browser window on the server will be opened. 5 | There you must log in (see credentials) and after that you must accept the access for the app. 6 | You have 2 minutes to follow to process successfully. 7 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/review_information/phone_number.txt: -------------------------------------------------------------------------------- 1 | +49 1551 0055021 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/secondary_category.txt: -------------------------------------------------------------------------------- 1 | BUSINESS -------------------------------------------------------------------------------- /ios/fastlane/metadata/secondary_first_sub_category.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/metadata/secondary_second_sub_category.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 14 Plus-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/de-DE/iPhone 8 Plus-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Air 13-inch (M2)-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPad Pro (12.9-inch) (6th generation)-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 14 Plus-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-01-login_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-01-login_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-02-dashboard_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-02-dashboard_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-03-kanban_board_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-03-kanban_board_screen.png -------------------------------------------------------------------------------- /ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-04-card_details_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meltzow/deck-ng/fe3f08e5b0a01d92882973b706e68ad377537cf6/ios/fastlane/screenshots/en-GB/iPhone 8 Plus-Portrait-04-card_details_screen.png -------------------------------------------------------------------------------- /lib/app_routes.dart: -------------------------------------------------------------------------------- 1 | class AppRoutes { 2 | static const home = '/'; 3 | static const kanbanBoard = '/boards/details'; 4 | static const cardDetails = '/cards/details'; 5 | static const login = '/auth/login'; 6 | static const settings = '/settings'; 7 | static const licenses = '/licenses'; 8 | 9 | static String privacyPolicy = '/privacy-policy'; 10 | } 11 | -------------------------------------------------------------------------------- /lib/board_details/list_view_card_item_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/app_routes.dart'; 2 | import 'package:deck_ng/model/card.dart' as NC; 3 | import 'package:flutter/material.dart'; 4 | import 'package:get/get.dart'; 5 | 6 | class ListViewCardItem extends StatelessWidget { 7 | final NC.Card? card; 8 | final int boardId; 9 | 10 | const ListViewCardItem( 11 | {super.key, required this.card, required this.boardId}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Card( 16 | child: ListTile( 17 | title: Column( 18 | crossAxisAlignment: CrossAxisAlignment.start, 19 | children: [ 20 | Text(card != null ? card!.title : ""), 21 | const SizedBox(height: 4), 22 | Row( 23 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 24 | children: [ 25 | Text("# ${card != null ? card!.id.toString() : ''}"), 26 | if (card != null && 27 | card!.assignedUsers != null && 28 | card!.assignedUsers!.isNotEmpty) 29 | CircleAvatar( 30 | child: Text( 31 | card!.assignedUsers!.first.participant.displayname[0], 32 | style: const TextStyle(color: Colors.white), 33 | ), 34 | backgroundColor: Colors.blue, 35 | ) 36 | else 37 | const CircleAvatar( 38 | child: Icon(Icons.person_outline), 39 | backgroundColor: Colors.grey, 40 | ), 41 | ], 42 | ), 43 | ], 44 | ), 45 | onTap: () { 46 | Get.toNamed( 47 | AppRoutes.cardDetails, 48 | parameters: { 49 | 'boardId': boardId.toString(), 50 | 'stackId': card!.stackId.toString(), 51 | 'cardId': card!.id.toString() 52 | }, 53 | ); 54 | }, 55 | ), 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/component/add_task_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AddTaskScreen extends StatefulWidget { 4 | final Function(String taskValue) onAddTaskClicked; 5 | 6 | const AddTaskScreen({super.key, required this.onAddTaskClicked}); 7 | 8 | @override 9 | State createState() => _AddTaskScreenState(); 10 | } 11 | 12 | class _AddTaskScreenState extends State { 13 | final textController = TextEditingController(); 14 | void _buttonAddClick(context) { 15 | Navigator.pop(context); 16 | widget.onAddTaskClicked(textController.text); 17 | } 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Container( 22 | color: const Color(0xff757575), 23 | child: Container( 24 | decoration: const BoxDecoration( 25 | color: Colors.white, 26 | borderRadius: BorderRadius.only( 27 | topLeft: Radius.circular(30), topRight: Radius.circular(30))), 28 | child: Container( 29 | padding: const EdgeInsets.all(30.0), 30 | child: Column( 31 | crossAxisAlignment: CrossAxisAlignment.stretch, 32 | children: [ 33 | const Text( 34 | "Add your task here ..", 35 | textAlign: TextAlign.center, 36 | style: TextStyle(fontSize: 25), 37 | ), 38 | TextField( 39 | controller: textController, 40 | textAlign: TextAlign.center, 41 | autofocus: true, 42 | ), 43 | TextButton( 44 | onPressed: () => _buttonAddClick(context), 45 | child: const Text("ADD"), 46 | ) 47 | ], 48 | ), 49 | ), 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/component/loading_indicator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LoadingIndicator extends StatelessWidget { 4 | const LoadingIndicator({super.key}); 5 | 6 | // This widget is the root of your application. 7 | @override 8 | Widget build(BuildContext context) { 9 | return const Column( 10 | mainAxisSize: MainAxisSize.min, 11 | children: [ 12 | CircularProgressIndicator(), 13 | SizedBox( 14 | height: 15, 15 | ), 16 | Text('Loading...') 17 | ], 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/controller/drawer_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/service/auth_service.dart'; 2 | import 'package:get/get.dart'; 3 | 4 | class DrawerController extends GetxController { 5 | var authService = Get.find(); 6 | 7 | RxBool get isAuth => authService.isAuth().obs; 8 | 9 | void logout() { 10 | authService.logout(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/dashboard/board_item_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/app_routes.dart'; 2 | import 'package:deck_ng/model/board.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:get/get.dart'; 5 | 6 | class BoardItemWidget extends StatelessWidget { 7 | final Board board; 8 | 9 | const BoardItemWidget({super.key, required this.board}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return GestureDetector( 14 | onTap: () => Get.toNamed( 15 | AppRoutes.kanbanBoard, 16 | parameters: {'boardId': board.id.toString()}, 17 | ), 18 | child: ListTile( 19 | shape: const RoundedRectangleBorder( 20 | side: BorderSide( 21 | width: 1, 22 | ), 23 | borderRadius: BorderRadius.all(Radius.circular(12.0)), 24 | ), 25 | title: Text( 26 | board.title, 27 | ), 28 | leading: CircleAvatar(backgroundColor: board.boardColor), 29 | subtitle: Text( 30 | "${board.stacks.length} stacks, ${board.lastModified} lastmodified"), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/env/env.dart: -------------------------------------------------------------------------------- 1 | import 'package:envied/envied.dart'; 2 | 3 | part 'env.g.dart'; 4 | 5 | @Envied(path: '.env') 6 | abstract class Env { 7 | @EnviedField(varName: 'WIREDASH_SECRET', obfuscate: true, defaultValue: '') 8 | static final String WIREDASH_SECRET = _Env.WIREDASH_SECRET; 9 | 10 | @EnviedField( 11 | varName: 'WIREDASH_SECRET_TEST', obfuscate: true, defaultValue: '') 12 | static final String WIREDASH_SECRET_TEST = _Env.WIREDASH_SECRET_TEST; 13 | 14 | @EnviedField(varName: 'IS_PRODUCTION', obfuscate: false, defaultValue: false) 15 | static const bool IS_PRODUCTION = _Env.IS_PRODUCTION; 16 | 17 | static String VERSION = ''; 18 | } 19 | -------------------------------------------------------------------------------- /lib/guard.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/app_routes.dart'; 2 | import 'package:deck_ng/service/impl/storage_service_impl.dart'; 3 | import 'package:deck_ng/service/services.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:get/get.dart'; 6 | 7 | class Guard extends GetMiddleware { 8 | final storageService = Get.put(StorageServiceImpl()); 9 | 10 | @override 11 | RouteSettings? redirect(String? route) { 12 | return (storageService.hasAccount() && 13 | storageService.getAccount()!.isAuthenticated) 14 | ? null 15 | : const RouteSettings(name: AppRoutes.login); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/l10n/de_de.dart: -------------------------------------------------------------------------------- 1 | class DeDe { 2 | Map get messages => { 3 | 'Language': 'Sprache' 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /lib/l10n/en_us.dart: -------------------------------------------------------------------------------- 1 | class EnUs { 2 | Map get messages => { 3 | 'Language': 'Language' 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /lib/l10n/translation.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:deck_ng/l10n/de_de.dart'; 4 | import 'package:deck_ng/l10n/en_us.dart'; 5 | import 'package:get/get.dart'; 6 | 7 | class Translation extends Translations { 8 | static final List appLanguages = [ 9 | {'name': 'English', 'locale': const Locale('en_GB')}, 10 | {'name': 'Deutsch', 'locale': const Locale('de_DE')}, 11 | ]; 12 | 13 | @override 14 | Map> get keys => { 15 | 'en_GB': EnUs().messages, 16 | 'de_DE': DeDe().messages, 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/env/env.dart'; 2 | import 'package:deck_ng/my_app.dart'; 3 | import 'package:flutter/foundation.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter/services.dart'; 6 | import 'package:get_storage/get_storage.dart'; 7 | import 'package:yaml/yaml.dart'; 8 | 9 | Future main() async { 10 | WidgetsFlutterBinding.ensureInitialized(); 11 | final version = await getVersion(); 12 | Env.VERSION = version; 13 | await GetStorage.init(); 14 | 15 | runApp(const MyApp(debugShowCheckedModeBanner: kDebugMode ? true : false)); 16 | } 17 | 18 | Future getVersion() async { 19 | final content = await rootBundle.loadString('pubspec.yaml'); 20 | final yamlMap = loadYaml(content); 21 | return yamlMap['version']; 22 | } 23 | -------------------------------------------------------------------------------- /lib/model/account.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'account.g.dart'; 4 | 5 | @JsonSerializable(explicitToJson: true) 6 | class Account { 7 | late String username; 8 | late String password; 9 | late String authData; 10 | late String url; 11 | 12 | late bool isAuthenticated; 13 | late String? version; 14 | 15 | Account( 16 | {required this.username, 17 | required this.password, 18 | required this.authData, 19 | required this.url, 20 | required this.isAuthenticated, 21 | this.version = ''}); 22 | 23 | factory Account.fromJson(Map json) => 24 | _$AccountFromJson(json); 25 | 26 | Map toJson() => _$AccountToJson(this); 27 | } 28 | -------------------------------------------------------------------------------- /lib/model/account.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'account.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Account _$AccountFromJson(Map json) => Account( 10 | username: json['username'] as String, 11 | password: json['password'] as String, 12 | authData: json['authData'] as String, 13 | url: json['url'] as String, 14 | isAuthenticated: json['isAuthenticated'] as bool, 15 | version: json['version'] as String? ?? '', 16 | ); 17 | 18 | Map _$AccountToJson(Account instance) => { 19 | 'username': instance.username, 20 | 'password': instance.password, 21 | 'authData': instance.authData, 22 | 'url': instance.url, 23 | 'isAuthenticated': instance.isAuthenticated, 24 | 'version': instance.version, 25 | }; 26 | -------------------------------------------------------------------------------- /lib/model/assignment.dart: -------------------------------------------------------------------------------- 1 | import 'package:deck_ng/model/user.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'assignment.g.dart'; 5 | 6 | @JsonSerializable(explicitToJson: true) 7 | class Assignment { 8 | late int cardId; 9 | late int id; 10 | late User participant; 11 | late int type; 12 | 13 | Assignment( 14 | {required this.cardId, 15 | required this.id, 16 | required this.participant, 17 | required this.type}); 18 | 19 | factory Assignment.fromJson(Map json) => 20 | _$AssignmentFromJson(json); 21 | 22 | Map toJson() => _$AssignmentToJson(this); 23 | } 24 | -------------------------------------------------------------------------------- /lib/model/assignment.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'assignment.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Assignment _$AssignmentFromJson(Map json) => Assignment( 10 | cardId: (json['cardId'] as num).toInt(), 11 | id: (json['id'] as num).toInt(), 12 | participant: User.fromJson(json['participant'] as Map), 13 | type: (json['type'] as num).toInt(), 14 | ); 15 | 16 | Map _$AssignmentToJson(Assignment instance) => 17 | { 18 | 'cardId': instance.cardId, 19 | 'id': instance.id, 20 | 'participant': instance.participant.toJson(), 21 | 'type': instance.type, 22 | }; 23 | -------------------------------------------------------------------------------- /lib/model/attachment.dart: -------------------------------------------------------------------------------- 1 | import 'dart:core'; 2 | 3 | import 'package:deck_ng/model/converter.dart'; 4 | import 'package:json_annotation/json_annotation.dart'; 5 | 6 | part 'attachment.g.dart'; 7 | 8 | @JsonSerializable(explicitToJson: true) 9 | class Attachment { 10 | late int cardId; 11 | late String type; 12 | late String 13 | data; // Change this to List if you want to store the file data as bytes 14 | late int? lastModified; 15 | late int? createdAt; 16 | late String createdBy; // Change this to int if your user ID is an integer 17 | @EpochDateTimeConverter() 18 | DateTime? deletedAt; 19 | late ExtendedData extendedData; 20 | late int id; 21 | 22 | Attachment( 23 | {required this.cardId, 24 | required this.type, 25 | required this.data, 26 | this.lastModified, 27 | this.createdAt, 28 | required this.createdBy, 29 | this.deletedAt, 30 | required this.extendedData, 31 | required this.id}); 32 | 33 | factory Attachment.fromJson(Map json) => 34 | _$AttachmentFromJson(json); 35 | 36 | Map toJson() => _$AttachmentToJson(this); 37 | } 38 | 39 | @JsonSerializable(explicitToJson: true) 40 | class ExtendedData { 41 | int? 42 | filesize; // Change this to double if you're storing the file size in kilobytes, megabytes, etc. 43 | late String mimetype; 44 | late Info info; 45 | 46 | ExtendedData({this.filesize, required this.mimetype, required this.info}); 47 | 48 | factory ExtendedData.fromJson(Map json) => 49 | _$ExtendedDataFromJson(json); 50 | 51 | Map toJson() => _$ExtendedDataToJson(this); 52 | } 53 | 54 | @JsonSerializable() 55 | class Info { 56 | late String dirname; 57 | late String basename; 58 | late String extension; 59 | late String filename; 60 | 61 | Info( 62 | {required this.dirname, 63 | required this.basename, 64 | required this.extension, 65 | required this.filename}); 66 | 67 | factory Info.fromJson(Map json) => _$InfoFromJson(json); 68 | 69 | Map toJson() => _$InfoToJson(this); 70 | } 71 | -------------------------------------------------------------------------------- /lib/model/board.dart: -------------------------------------------------------------------------------- 1 | // lib/model/board.dart 2 | 3 | import 'dart:math'; 4 | import 'dart:ui'; 5 | 6 | import 'package:deck_ng/model/converter.dart'; 7 | import 'package:deck_ng/model/models.dart'; 8 | import 'package:get/get.dart'; 9 | import 'package:json_annotation/json_annotation.dart'; 10 | 11 | part 'board.g.dart'; 12 | 13 | @JsonSerializable() 14 | class BoardSetting { 15 | @JsonKey(name: 'notify-due') 16 | late String notifyDue; 17 | late bool calendar; 18 | 19 | factory BoardSetting.fromJson(Map json) => 20 | _$BoardSettingFromJson(json); 21 | 22 | Map toJson() => _$BoardSettingToJson(this); 23 | 24 | BoardSetting(); 25 | } 26 | 27 | @JsonSerializable(explicitToJson: true) 28 | class Board { 29 | @JsonKey(defaultValue: '') 30 | final String title; 31 | final String? color; 32 | @JsonKey(defaultValue: false) 33 | late bool? archived = false; 34 | final int id; 35 | late List? acl; 36 | final int? shared; 37 | @EpochDateTimeConverter() 38 | final DateTime? deletedAt; 39 | @EpochDateTimeConverter() 40 | final DateTime? lastModified; 41 | @JsonKey(defaultValue: []) 42 | late List