From 47caed7aec2ad4044a2878ccf3ae8e7a9bd44df6 Mon Sep 17 00:00:00 2001 From: DexterHK Date: Sun, 7 Jan 2024 01:49:35 +0100 Subject: [PATCH] Adding the whole project --- .gitignore | 43 + .metadata | 45 + README.md | 16 + analysis_options.yaml | 28 + android/.gitignore | 13 + android/app/build.gradle | 67 ++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 33 + .../com/sobgog/habitmate/MainActivity.kt | 6 + .../imdexter/com/rabbit_habit/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 31 + android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle | 20 + assets/fonts/MontserratAlternates-Bold.ttf | Bin 0 -> 201148 bytes assets/fonts/MontserratAlternates-Light.ttf | Bin 0 -> 198744 bytes assets/fonts/MontserratAlternates-Regular.ttf | Bin 0 -> 201976 bytes assets/fonts/OFL.txt | 93 +++ assets/fonts/Oxygen-Bold.ttf | Bin 0 -> 47156 bytes assets/fonts/Oxygen-Light.ttf | Bin 0 -> 42200 bytes assets/fonts/Oxygen-Regular.ttf | Bin 0 -> 46440 bytes assets/images/rabbit.png | Bin 0 -> 28447 bytes ios/.gitignore | 34 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 2 + ios/Flutter/Release.xcconfig | 2 + ios/Podfile | 44 + ios/Podfile.lock | 23 + ios/Runner.xcodeproj/project.pbxproj | 725 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../AppIcon.appiconset/rabbit.png | Bin 0 -> 33424 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 49 ++ ios/Runner/Runner-Bridging-Header.h | 1 + ios/RunnerTests/RunnerTests.swift | 12 + l10n.yaml | 3 + lib/blocs/new_habit_cubit.dart | 108 +++ lib/blocs/selected_day_cubit.dart | 80 ++ lib/config/app_en.arb | 29 + lib/config/constraint.dart | 8 + lib/config/theme_data.dart | 112 +++ lib/main.dart | 92 +++ lib/models/habit_model.dart | 19 + lib/models/habit_model.freezed.dart | 353 ++++++++ lib/models/habit_sammler.freezed.dart | 373 +++++++++ lib/models/habit_sammler_model.dart | 21 + lib/models/habit_sammler_model.g.dart | 65 ++ lib/models/new_habit_model.dart | 14 + lib/models/new_habit_model.freezed.dart | 181 ++++ lib/models/selected_day_model.dart | 14 + lib/models/selected_day_model.freezed.dart | 161 ++++ lib/repo/habit_repository.dart | 89 ++ lib/repo/icons_repository.dart | 39 + lib/screens/home_screen.dart | 680 +++++++++++++++ lib/screens/login_screen.dart | 178 ++++ lib/screens/rabbit_screen.dart | 407 +++++++++ linux/.gitignore | 1 + linux/CMakeLists.txt | 139 ++++ linux/flutter/CMakeLists.txt | 88 ++ linux/flutter/generated_plugin_registrant.cc | 11 + linux/flutter/generated_plugin_registrant.h | 15 + linux/flutter/generated_plugins.cmake | 23 + linux/main.cc | 6 + linux/my_application.cc | 104 +++ linux/my_application.h | 18 + macos/.gitignore | 7 + macos/Flutter/Flutter-Debug.xcconfig | 1 + macos/Flutter/Flutter-Release.xcconfig | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 12 + macos/Runner.xcodeproj/project.pbxproj | 695 ++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/rabbit.png | Bin 0 -> 33424 bytes macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ macos/Runner/Configs/AppInfo.xcconfig | 14 + macos/Runner/Configs/Debug.xcconfig | 2 + macos/Runner/Configs/Release.xcconfig | 2 + macos/Runner/Configs/Warnings.xcconfig | 13 + macos/Runner/DebugProfile.entitlements | 12 + macos/Runner/Info.plist | 32 + macos/Runner/MainFlutterWindow.swift | 15 + macos/Runner/Release.entitlements | 8 + macos/RunnerTests/RunnerTests.swift | 12 + pubspec.lock | 775 ++++++++++++++++++ pubspec.yaml | 115 +++ test/widget_test.dart | 30 + web/index.html | 59 ++ web/manifest.json | 35 + web/rabbit.png | Bin 0 -> 33424 bytes windows/.gitignore | 17 + windows/CMakeLists.txt | 102 +++ windows/flutter/CMakeLists.txt | 104 +++ .../flutter/generated_plugin_registrant.cc | 11 + windows/flutter/generated_plugin_registrant.h | 15 + windows/flutter/generated_plugins.cmake | 23 + windows/runner/CMakeLists.txt | 40 + windows/runner/Runner.rc | 121 +++ windows/runner/flutter_window.cpp | 71 ++ windows/runner/flutter_window.h | 33 + windows/runner/main.cpp | 43 + windows/runner/resource.h | 16 + windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes windows/runner/runner.exe.manifest | 20 + windows/runner/utils.cpp | 65 ++ windows/runner/utils.h | 19 + windows/runner/win32_window.cpp | 288 +++++++ windows/runner/win32_window.h | 102 +++ 135 files changed, 8676 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/sobgog/habitmate/MainActivity.kt create mode 100644 android/app/src/main/kotlin/imdexter/com/rabbit_habit/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/fonts/MontserratAlternates-Bold.ttf create mode 100644 assets/fonts/MontserratAlternates-Light.ttf create mode 100644 assets/fonts/MontserratAlternates-Regular.ttf create mode 100644 assets/fonts/OFL.txt create mode 100644 assets/fonts/Oxygen-Bold.ttf create mode 100644 assets/fonts/Oxygen-Light.ttf create mode 100644 assets/fonts/Oxygen-Regular.ttf create mode 100644 assets/images/rabbit.png create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Podfile create mode 100644 ios/Podfile.lock create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 ios/RunnerTests/RunnerTests.swift create mode 100644 l10n.yaml create mode 100644 lib/blocs/new_habit_cubit.dart create mode 100644 lib/blocs/selected_day_cubit.dart create mode 100644 lib/config/app_en.arb create mode 100644 lib/config/constraint.dart create mode 100644 lib/config/theme_data.dart create mode 100644 lib/main.dart create mode 100644 lib/models/habit_model.dart create mode 100644 lib/models/habit_model.freezed.dart create mode 100644 lib/models/habit_sammler.freezed.dart create mode 100644 lib/models/habit_sammler_model.dart create mode 100644 lib/models/habit_sammler_model.g.dart create mode 100644 lib/models/new_habit_model.dart create mode 100644 lib/models/new_habit_model.freezed.dart create mode 100644 lib/models/selected_day_model.dart create mode 100644 lib/models/selected_day_model.freezed.dart create mode 100644 lib/repo/habit_repository.dart create mode 100644 lib/repo/icons_repository.dart create mode 100644 lib/screens/home_screen.dart create mode 100644 lib/screens/login_screen.dart create mode 100644 lib/screens/rabbit_screen.dart create mode 100644 linux/.gitignore create mode 100644 linux/CMakeLists.txt create mode 100644 linux/flutter/CMakeLists.txt create mode 100644 linux/flutter/generated_plugin_registrant.cc create mode 100644 linux/flutter/generated_plugin_registrant.h create mode 100644 linux/flutter/generated_plugins.cmake create mode 100644 linux/main.cc create mode 100644 linux/my_application.cc create mode 100644 linux/my_application.h create mode 100644 macos/.gitignore create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner/AppDelegate.swift create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png create mode 100644 macos/Runner/Base.lproj/MainMenu.xib create mode 100644 macos/Runner/Configs/AppInfo.xcconfig create mode 100644 macos/Runner/Configs/Debug.xcconfig create mode 100644 macos/Runner/Configs/Release.xcconfig create mode 100644 macos/Runner/Configs/Warnings.xcconfig create mode 100644 macos/Runner/DebugProfile.entitlements create mode 100644 macos/Runner/Info.plist create mode 100644 macos/Runner/MainFlutterWindow.swift create mode 100644 macos/Runner/Release.entitlements create mode 100644 macos/RunnerTests/RunnerTests.swift create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart create mode 100644 web/index.html create mode 100644 web/manifest.json create mode 100644 web/rabbit.png create mode 100644 windows/.gitignore create mode 100644 windows/CMakeLists.txt create mode 100644 windows/flutter/CMakeLists.txt create mode 100644 windows/flutter/generated_plugin_registrant.cc create mode 100644 windows/flutter/generated_plugin_registrant.h create mode 100644 windows/flutter/generated_plugins.cmake create mode 100644 windows/runner/CMakeLists.txt create mode 100644 windows/runner/Runner.rc create mode 100644 windows/runner/flutter_window.cpp create mode 100644 windows/runner/flutter_window.h create mode 100644 windows/runner/main.cpp create mode 100644 windows/runner/resource.h create mode 100644 windows/runner/resources/app_icon.ico create mode 100644 windows/runner/runner.exe.manifest create mode 100644 windows/runner/utils.cpp create mode 100644 windows/runner/utils.h create mode 100644 windows/runner/win32_window.cpp create mode 100644 windows/runner/win32_window.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29a3a50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..ff2d6f1 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "2e9cb0aa71a386a91f73f7088d115c0d96654829" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: android + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: ios + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: linux + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: macos + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: web + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + - platform: windows + create_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + base_revision: 2e9cb0aa71a386a91f73f7088d115c0d96654829 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..6081edb --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# rabbit_habit + +The Rabbit habit + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..bea6dfa --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,67 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + namespace "rabbitHabit" + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "rabbitHabit" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies {} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5fce913 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/sobgog/habitmate/MainActivity.kt b/android/app/src/main/kotlin/com/sobgog/habitmate/MainActivity.kt new file mode 100644 index 0000000..a7ee964 --- /dev/null +++ b/android/app/src/main/kotlin/com/sobgog/habitmate/MainActivity.kt @@ -0,0 +1,6 @@ +package Dexter.rabbitHabit + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/kotlin/imdexter/com/rabbit_habit/MainActivity.kt b/android/app/src/main/kotlin/imdexter/com/rabbit_habit/MainActivity.kt new file mode 100644 index 0000000..2aaa8ba --- /dev/null +++ b/android/app/src/main/kotlin/imdexter/com/rabbit_habit/MainActivity.kt @@ -0,0 +1,6 @@ +package imdexter.com.rabbit_habit + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..f7eb7f6 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3c472b9 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..55c4ca8 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,20 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + plugins { + id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + } +} + +include ":app" + +apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/assets/fonts/MontserratAlternates-Bold.ttf b/assets/fonts/MontserratAlternates-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6ed08dcc8a40bd948f9b99a9f475a6d91676aa0f GIT binary patch literal 201148 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�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 XwZ-~rKtCzN?b literal 0 HcmV?d00001 diff --git a/assets/fonts/MontserratAlternates-Light.ttf b/assets/fonts/MontserratAlternates-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cb51843ec73f6660cbea5f85cbe487c70cf2f896 GIT binary patch literal 198744 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 z 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

P5KSZbp&kxEV-G) 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/MontserratAlternates-Regular.ttf b/assets/fonts/MontserratAlternates-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a4588fa2027aeb21412665fce1f1dadf15ec05f GIT binary patch literal 201976 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

  • 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 F{U1BbJcs}Q literal 0 HcmV?d00001 diff --git a/assets/fonts/OFL.txt b/assets/fonts/OFL.txt new file mode 100644 index 0000000..5f3451c --- /dev/null +++ b/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2012, vernon adams (vern@newtypography.co.uk), with Reserved Font Names 'Oxygen' + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/Oxygen-Bold.ttf b/assets/fonts/Oxygen-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..feca433b467105b3597d06dd0ffd553771d826c6 GIT binary patch literal 47156 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 E|MfNxFaQ7m literal 0 HcmV?d00001 diff --git a/assets/fonts/Oxygen-Regular.ttf b/assets/fonts/Oxygen-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d03f43af2402cae10ea3d27c6937806d537b41ae GIT binary patch literal 46440 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

    P1yPgbv zIl`#R7YlvinBG_?2H`8n&<~mCIq597Fc|#s*wFlx6YzXala^L(!x~#@P6*7exXyK1 zMMTu48T<(QLEC)fDDiCiI38**p;hfL9bDqK^~(Cwk>TG3LDSu$jS{NLftNT<((4$5 zY3mS#VzDX8XQ8(|*`SvcaC~_2>m^wH;~5R^daf3?dOF~^^Kiti%&2|5We>i#eb*&f z>%XZMfBELqAO6TR9g&f1NAVj%`LiDFkCoa@`I z)0^fi^R?5xM;YT24UY1Dr*k$XG%8yg(`B}ft}eX2RSs8Po0N8TPuXQAsny>0=+6nC zWLXmdH4^PrAEjjM1BM33Ab zmmRz`GmTfU3H%Pp(*-JjVD3bzZmh)bh<~FA_=ajtVg5u?lwR%3RTq7IsD07v>q`Kl zM`RR@<$R*WdV`4DY15daPQ?HZGT`38KY*9LQX5ySI>Sd6~SD*|n5Za1eMSge49_ zNzzk{8r}l#oVo+VZoS3S??c-6Ti#c{ZBQ=pw*-b{Y99W6HMM(6r=42TBLDl<>f3G+5p}dZX635BnuPw#Lud)?Kwo+M!s@GkO>NjOBUx9RB~wCMLu&3`(L>JfgD@s63=j@ zdUXMkE4up4%i1T!5>aXm>xyK{o> z179fCC#czJi)^&9>fDu={KETn*c5FPct4uEP)_LghE#Zve%D?4^@sM7xXkGJ`i0_s z$)lJjN=>sypkq{Gr4fjA^EW#3F7VA*%yb~K^nY2DOHqs$He8m+T`VX5d!xv#jGThP zt+T7+_rx$Zmfzs5*T54kse8XSKK)3MqW@OfFi@2XDNRfb zghc6l7e^VFd$7d`n%|i^8uTBMR%(c|XGHrr+l`wvzm|#0_!;)+E9IYEB^L>Mb%1S>tDBud2JI$d&3jH-N0RH3Bm#}%e8eOLIs*gg`hyXC?0CrP`q5-Z|UEZ(^yPCs*7;({pt~&+Izmt zDJ9zT-!q2?5)UFhn%w>ZcG(%Uwsd%HBp-VPdM6$n8qMfmH2GIPS^|!B^mk^f=H^TU zT-E(AjEBuHCg)}^F7!ysioU)0bWJ?Qmhtr^n^N$6Crk6=(mn41>MuhVoF?4iv0CZv zd@Hi551)8fNuf&|>!&(Rh_T+%;b9D74iEZqR+&~lnH~bcbrSwe^vijT5xxs&tCk~m zDZLl9PencVpKI26pk}-N%lTEic+AX63qc!&V#i2w($Bt$LCpj80UBVaUKZYQXyUfF zZ`&p#3b)D|vF%L3XMU)OcvQ1lJQs9x-ZoU~*O6@zp`u*7zyHB`nV#{(T*|Dja0R%K zOJHj8orefmloL14U2KFbbi7}vHg)W14fug}%9UtrDN)!DZBgsedAd+XF}Q_ZJ1Wof ztlRUNwoc&&et1_JzKfG`y=ABAl-#?WuPhTT#+@86bL3s>**A7K;#ZC~v&3NXyMw_q z#=U5H;6aUB$la6>5t~E1kGDmkC5`)hCetR~GJ~G0$sbHx{P;(3^Nm_l`gIuyLt@PA zEY~;XcLBT_LUoH}@4c=VEG*;#YKw~n#%ZTXQ)S?bc_Ydh!EGPq)e(J%SnDinqN>t z@q5EhHr8m*@Vh}17fgwOiK+S`lW6!`f%}nHuFnz#`+BRq0eSkSx${ZZyI?qli$N*; zbfegPZYG@3u()&1py@3IOATvukI&l8$<8<^lY0JatxIT9M3?e;=wD~E@an_JC-_&e@ z2qn#b{;cX?XVlZv>w#lRXXEa|Pbn*lfz^ck2g5({ECivs}{81sVaAzh{%%W}7Y|`4CN)c_7hvAr8^hm#y-`2B# z^0Urv^OtaMY^Gal<4KC8Smj6ZYq!_039#aGckqxZK|uB^@#;-KLx?52Khect3BJk>o{9^K_-e>FtB+#W{eFHwTdA6 z*1o-0tfyDDntIg#E7L0X*@qw7e7}bY_<^zP7Ww|xFN&W^0^gm-1%<=d|2;WQYEN>B za80l}mvww_LU5zSICqcC0Labmp2O_x)LZ zUJt{|%Rr$)2kTjLsHFy5MB0*W3+eE@(^gBdo>5iAov_WQt1PQr#fqYDyssLwBH#1a zK~gtLc39`T-pK@iR?YeNIXqP_voguK9D}cKN8)bW%y=!O(^g|ECe_T+nyd&{B~ibp z5JaSwqr>-jN|kc-M*u3ZY+{@7=5ZU@6aIIm}r=U%3H zh9Na`nD}Z}7xnmJjb?;KPmZahdSggnY9Y*(^^2z`o|vCO;bI=NLSQ(RBl8Il{R>z} zIH9Q*OX_pZMQw(SbvVy6@RIcObAP}REgF$W8Wg@>B7Mz!?<0(8GEG&zOXtjzd|J!l zkuH^Se~|7deM6|4A&~&Y>!?Ieq>^f!$XP>i|o9E8%gp zR%#41Qr5(9fn2ul)J;G(W8%Hw`I!9!*OyO<-6q`=QX2?@W37VDGc%tkQ|{yvF*6?^ zvQLhMT9}M0_B!5eaUTr{9`$^8#AOdPn{FY%kwe_1ytq z#O&{BzI(3YJE3b1EMIS=_w{mP9CnH2>w$P&N^xuR5IUh|Pmhrayu0C7TC@KBC6AQB z*vpENXi3aZM{x50B~4MTII7<Epmdxv+tsS44^r$#xaQIQGxLf_6wm^8d zl?;HGQ*dm&lvyG?r0+{boT)b*(TaZyu`gROxHh^UWCu>RPof6sR$J9ESA~4>3%|df zvMm6ClHD(}&%lKp9ERRtEq#yK&4^j2n@kYF9+1@a594BM{_3kbGpYOlAtA*YnaeRZ zP!J;D8>evaBjr)oJjVxjO;@8$1PDI&m>((540>`LFr`LtVVZQ%LZI_=EJ#r}nO;1ux|Qvju~dWqB?@;Ni6jM=1}`{T=OPEw>buvN z0R^S5I|O3anNT>sot!)Le%A&iMj?X*`i>~}haae7un-j%s4kccnX1iaX#FrErN?;M zjDfmRAC_5JYRQ*bF4laLqD*}9i2k+Ds7uVKKG1=c$?18SBx;K2x`00UXJ~BaZkU0% z!E`xAaqc7}44Ncz2ea?&39oUz_@86(^lcW{tkE)3=@{qM|1{2 z4FS6`m9HVY|KaYei+rg}c^8oAbl+|w^{&6~MOjzs*`=84Vh(lb@v?ioTC8o}>Ekah z10Y94Vh6G%6Jl=WnGD<78K9G2&uq?F=ul_0vrbLu>mae_*T41R!nVqJN z2t?rTf3s;2JS!QIqU4H{pTQhYPMU=m6XYr(KAfi*ks&>9;~n6fQvE+vw*8({6A~OuBkdzMkpyWRFdWbF@y08!o+lt zU_iFnuEfX(SMj9>m z+@ynEL49>COa}yIsjbC13qYl@sic0auK$Ljp? zp8jH5g+!sNA8JnXU((OcO#LalAcCO)G?MQ^e4xljAAxdz`w!ygu04-|6VTECKJdmp z815EI<#WTaV5Ho8I`W=V{=vpxN42iC;$g774`nc6O6gBvhE=>TyT*WXPn?4RjAzcF%mtxB0 ziWgu@VBSF6SVgl29201{%*NnnvEMtc(V2NEWWKy-J=^%=M5AjhZ7oqVnaU`^=hNo|Ib_+AQQ4*>vTW8usQz}olG`OTFEY+ke1rDZsJW&H zET4$5b67@aS{)j!flVjGgng-7*>QJtS4+IikU0Mu~j%47!lo1 z<0J(DqtNOSkLbeoxA8jkw7B1hz2NqK;Qh3aNZC)obxkN zBq+t7srzh1J%*1YW`OOi%N9V(kA0`M9O>DSs_FMIL!jhh^+4V5?#$}DeFy_7@1*#& zYq&mhJ8Pe9ZwdW$%ONtH#@>1_r@gWdZ5aE{{CF?+nnErW5UMeIQxr*G33#)-`h8tE z8b=XF!l8d>9i*eba3*C?qssrsW$T$&!0X6CTI=hIf`DuT+-=mm&oAth_alZ-T_NJr zy(Yeo>GEt|stZY@KZ8ElZj9ha&eRYX7K@BIraa}pCVj5dWDxvVMRm(KGftLrWUG3a zdOqi|7%q6Ii4B&egQ^DcDSePWYH22%#L-*p2fyStT;~fwxzdY$Zn+REO!Cf*R%Xum zOx9HQ%TF*VBN9~)_K-dJj1F+F!G!ZH*0{H#>kR&d?vbYlADqVRqre&Woc3)8CXS=J zcq%^&gR#)VDKx>8wRn4SF+Y3Q>1a(R7|hv~>6frouRp}y{<$Lc$*q1XdPFpgjg|oG zaH-iDSV#W$zY*i~esmqfW$-mUkE_V+`gjz$ZUdX!m>Nsdq^MQcN~o*y2CIRJo|?#L zU(szwjC3p{*++X2G;Z62tRe`jv4MToZe)dVOnqE1LwFMWpH`MB|4+~sjd2u0M3GU0 zw8s6rDaI5x%Mw}9JoLn~UtE*;uW&)-Z-_;f^E}JG^2cka@@A`n>gmKM>`B|Ix%Q?l z@OI<6>#6Yi%K*Nq#?cavv-dd=bo?NL5|&rErR$5t)y0TznBW^wCYwz0f4W-z)mB3u ztow)z`(In*I8mV?H_P`p;r-bfu_XChCua!HF-aK@i)g>^H4yIcGf_6*q1Q!~66;`yzk?yD8i z)c@cEI$58lD%4~zYm0Z_z%3V+Z)TUz^V7O5d?PWy3mf zDTH8TrbWjjy>6Pxp&UF}L6!F&9;Dx5h(IkxZ9Ff0eu@9ZlnHnBj2#U^;1!%Xj$?xW zz{{#oW_A~Xz5eem6~Z|a^F?hKs&i+%en9Q|`i1$lJTM{N{3HtT!6EVb8;0S92{8Ms zc`fP}`KdGZX#WYVn8&n3LUedgoh7@a%CV5Xt{sF&Bqhqj?cOut=JXvH0fgz8zgK=| z;Hz5;CWdtwTAC96qmP^VAO(m~w+($j2=>>Rdy`Nwh<60~5WVtB;8r-OA(J~Pfmef+ zI37}ft}S0}#&V#bQ3Ii&V+WB$cBL<`(w@=)qTtkzEl7~wME&pRp2~?nLg=cGKy_|! zv#>;7{&GPq!*3~z_&$~}b>Z{pf!$N91nwwzeO4Xho+6;$wwbw79 zvCqvA`szQSk?8CyiqIQB%I&Z9t16b%mVCY2r7Huq<_Od<`0%%{w?_Dp7>| z2&F!;983Yk96tK3u7omRFP-Nmu-~nQIx5#U3Ih~?tk3dgjQx$e2oyE0YwhWCM&Tmp zFGXdKrnkt67JMLeA;?lln&r2=;2nX>O5iYgayn$mYN&1U6kP9D$wMXetG}CzWS|fz zofnW(;yRT+Td~ue5h?Z^EG^I#3`R};lZ(K3)BwXX6TmCH+}NXFjQzS@BQ=~7C;8GJ z-^p{|&;7c8NL`iWz93*8SzvzrkZY}jV}w!w0_Y^aedq~Y`>lIE^9K*?-f3P#utzW4 zI>i!dzo_)Sm#(FTQO_SV(!)4a8%9?FlXEzJy*@&9304SF{xs;{#F@P^HH#xhpu@7q zV_Rx6O|;07#Dat!5&S2W!Lu zmJ1mKsjmuWC_?0Gn73J?ETqJDd15`hCt%fNvD=`1g*05vg`XGNi;Z16bWV zbqBQ?(%2CL9yZaEqg>f^PUSeiC2tx6ibtlvPx#qTN$^PoMZLY_a2Bn$Xcotz|L_ijiO{(-|Ll0kJk7OUHn}Y%XLz&b)?zWFC6p~Xj zl>iVk(B^B!@yy?wU~Eu!#97afrcEz%yK+T;Fe;qZ0F)4KgB?x+7?jAtspRpA;V5i6Ys=I%r{+9nKuc)4#8sf<&)~fnuTEZ`YVAYg|5%m zDeUk*i1LXhE&dF+lfUW$Rf@p>1S4=+&+Q%{RW1T_#EERLY-(SPwSnQ>>>L%FI6kUt zRoW%Lg*)lqCOC+?_g1;~?RGeD7z-+qEH7k7m>FVa=D#CG8X)SoI;bwpdh_a->M(a5oU6ajpK z>5sf3jd=qpb(3fX`O)}r<092)A@$#lcl+Vw5!*S6Y^F)B$KgC`y!@qo@!qiXFq0mKzN5OLI+?KH20^s@juE|>Z z&(YU~!f9yqP|GWNa#8n)BoV6@gN6T%=%PT7Ko{x}661fbps6U(IvIq}?#fL=VPeFX zP0QhKwzO|BVk?LU#V0567ChT421%AV$nu+!D7^rk`^RyygCDadD_qC3pv041`n4ir z){KG;Ng)nF*T#Lk&q*fG_bHk0Q)BvdlUfL=@Cz-48JJF?^J0av-cKE8X3t*ri5q#v zqR)wu_pdW&EPN?PBZXl(dN}nw;_?si1_8LcKrtq+o6mq`B4sr&T#6QRh#f=+5kd2m z_rm806!?McJc8q6^U~_Az$SafO?Nl!lys(5-ZOS+7OndZKyyftyAhgCs+<~IO+>m?RcE^u&> z|JwLC^SeJjE#_&MOfo&=!13s&5~PNBEOcbJbjpxgCV(W8Dw0S>+6NFG5`?eets6qX z&tU;@q=6S|q(Ei92DLPqvSdDPdujLf#RO4>EqwEwFyXu@wQ#n<@S?0p;E1=Ozxl;^ z#)xh@XfvXmw=z^$cuuIXdn3l|{O}F@TN?d%`kVn6(ijw!-a4s*IPdwY7?Jhf;OF_{ z*V19h48ZytQ1#r>#8mob@(=XaZ|JXyKVYqdFP6+-6_}Em4bA7lfG1_iquzOn8Kgg* z011>BJ++k(_XDpyfd15g+7{~7QH@n5j|p*Y{<2n&>?gRxvNVDGbFsVQzti&7qyiAr zTFa}rZ4~slRq?a0&osM zo7a5-K2#At4?P#Yj;C>vtpB4bOibSfX80Y)thEl;gG@jL0WYaXbc~7n76dxP$KfcrVw<9t|kC9FtG<+?sHeH znSynqpeu%55Q3s-fat|}wDrE0`|$E*`G|821GcqC$ihwZc1vI}qmIwNfynQ_2BT_Y zmjVVgRbBWnlp1N)a4DH`sz9g}Ge|21Ht7}adXa4-H{J z*@oVMu5~vDn3fyn>7cwyrmgqby!NTMk|4yj|L1S1uzsNMRBWL!>r(eM^G>z52*ey? z!qX}LBSR85)_7S8V#zWql*8hHtol#S9GYU)w6dkf3u6Y;DYeOvYMADGrJIjz&V_&- zjuzzd`+v<=QcO=Bq_k7^sfYvtwrJ!1?$GL?oA@?vFf1VlXANVhbK{D4vh_O1--#Yf zuh#;f+ zZrHk%AaIY}wBeAC`idOsj}y43Z41>?F0=P3DBOHM*4QgGVyw6G0>Z=AxYP!bs&1j` z#QbZdfeoVtSO2CvlE=?yzUN@TfDD9BUkUz!cIpt}t++UVo}hZBjn^?*+I=M=Gb8sB zjG59;x9h_S85@GIlYjtD=AMQImd_X;^#fh{%vUJ$tB_-)R>nTa$XOJsGeOpTn7sBc@m0i!fpLI7 z@lMLA{l&{KrgaL4a8eNK`P0Yz&;!U})F2%KB)oYo6nzxP0E}9hUFb|n92+K{Jpz2Q z4&IU;c;7?T*y_x5C2?QVyHSd*jjaogcMfao-JR`EZRdikaIJ6QUS2Pc!3CI-p> zIw3CiqcO)mC3^!LGL8X=l`wl^^``5a8x1)F)-xTGtTRlTTHjtR9qDwpY`T$2Ps~0A zb4Q=K637i)Gb+E-+&^Og;*sNDC1sjmsgwcWu1xrk?Q+xXIjx6F8mqclDr8tb9*fiN zkixwdRI30`&pen0vdarjLwzu7GgLQ|WLTwx2uPB;Nmhco5gxSfE{}0N9C6=h_4)BTNBCXJ^ZEu zo%PjrRHIAxXBxa2MSk-Jms^;YsGLBMnu1Ag9j4Ve|M>KKsAOMyhrz5-5??@J}X zs#U&lL)w?-=D|zSs1R z_SfERb;8M{W4KZu7#W1q&VJbZVwz-XBO?S;%{u{^9`OC)LoVrOe>nGDenINVk&hA4 z#7QK?+*S#T+k|~?+oDA*+nHa!6k<5DC^HF=1b4@aLzaghkP!ZA^Wg;y5l?h+nn+1% zV7x#=bf+e}#Fxd~{m2cchJuAN0Q7u~r)_?6oBT`(q@6i{(MV#LqAe5}1`HM1j{E&C zTl@OJu@iw)M!CjVS#21LH4VHwS#zW<$DbeyxpQPTv_|-px8V?590y%fv{+L?bHSA zw&ew5Cr(OvWUZvocjZR~HPvE&^Oi(XGp zcc;fsRKr~~yKa6JVPe4#Z#Y77dX=`Is{Z7lut zC*rorvguf~!$GjBtG#cQ7pNMK3BLEgoyrQTV1Q|ea7?aRg*piYsNT2ZB-N#C$AHg^ zwwkguZkWujN!*mMOl*;Uo~-igA-^jrI + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..fdcc671 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..56e32e0 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,23 @@ +PODS: + - Flutter (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - Flutter (from `Flutter`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + +SPEC CHECKSUMS: + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 + +PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189 + +COCOAPODS: 1.11.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..009b3eb --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,725 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 0C7888C06E96ABC0726F5CA7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F75C6B8CA2DC8CF4B96B1457 /* Pods_Runner.framework */; }; + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 28179696E2D805491732723B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5CB81790C5C402927656DFB /* Pods_RunnerTests.framework */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4D09A74A401BEAB7A0053087 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5B2E95238F4FD0F5E9B04711 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7DC4EDF894DA98A84413042E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 86368DF920D54C7AFC15174B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BDC0322694CB3269BDC9D558 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E5CB81790C5C402927656DFB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F0B21C62B76161468418B0C8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F75C6B8CA2DC8CF4B96B1457 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 288F58CD54FD408BD23B80A3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 28179696E2D805491732723B /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0C7888C06E96ABC0726F5CA7 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 286AD48900BC20B636A3EB8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + F75C6B8CA2DC8CF4B96B1457 /* Pods_Runner.framework */, + E5CB81790C5C402927656DFB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9711DD59F4B38BF2F8C37120 /* Pods */ = { + isa = PBXGroup; + children = ( + 4D09A74A401BEAB7A0053087 /* Pods-Runner.debug.xcconfig */, + 7DC4EDF894DA98A84413042E /* Pods-Runner.release.xcconfig */, + 86368DF920D54C7AFC15174B /* Pods-Runner.profile.xcconfig */, + BDC0322694CB3269BDC9D558 /* Pods-RunnerTests.debug.xcconfig */, + F0B21C62B76161468418B0C8 /* Pods-RunnerTests.release.xcconfig */, + 5B2E95238F4FD0F5E9B04711 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 9711DD59F4B38BF2F8C37120 /* Pods */, + 286AD48900BC20B636A3EB8A /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 23502A02C7933BD9ED9D14C8 /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 288F58CD54FD408BD23B80A3 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 2B88BB291495F426439E927F /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 22DDB49B625F90BDFB8C1995 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 22DDB49B625F90BDFB8C1995 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 23502A02C7933BD9ED9D14C8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 2B88BB291495F426439E927F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = BB8QWCXG7C; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BDC0322694CB3269BDC9D558 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F0B21C62B76161468418B0C8 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B2E95238F4FD0F5E9B04711 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = BB8QWCXG7C; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = BB8QWCXG7C; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rabbitHabit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..87131a0 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1ba66b8 --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : ""rabbit.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "rabbit.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : ""rabbit.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "rabbit.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png new file mode 100644 index 0000000000000000000000000000000000000000..2d855ca5859542b3b4c768844d2e50264b8001d8 GIT binary patch literal 33424 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 Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..6455d83 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + rabbitHabit + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + rabbitHabit + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/l10n.yaml b/l10n.yaml new file mode 100644 index 0000000..9fd4d93 --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,3 @@ +arb-dir: lib/config +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart \ No newline at end of file diff --git a/lib/blocs/new_habit_cubit.dart b/lib/blocs/new_habit_cubit.dart new file mode 100644 index 0000000..a07f8fe --- /dev/null +++ b/lib/blocs/new_habit_cubit.dart @@ -0,0 +1,108 @@ +import 'package:bloc/bloc.dart'; +import 'package:Rabbit_Habit/models/habit_sammler_model.dart'; +import 'package:Rabbit_Habit/models/new_habit_model.dart'; +import 'package:Rabbit_Habit/repo/habit_repository.dart'; +import 'package:hive_flutter/hive_flutter.dart'; + +class NewHabitCubit extends Cubit { + NewHabitCubit() + : super(const NewHabit(name: '', description: '', iconCodePoint: 57825)); + setNewHabitName(String name) { + emit(state.copyWith(name: name)); + } + + setNewHabitDescription(String description) { + emit(state.copyWith(description: description)); + } + + setNewHabitIconCodePoint(int iconCodePoint) { + emit(state.copyWith(iconCodePoint: iconCodePoint)); + } + + Future getHabitToEdit(String id) async { + Box box = await Hive.openBox('habits'); + try { + HabeichHabit? habit = box.get(id); + if (habit == null) return; + emit( + state.copyWith( + name: habit.name, + description: habit.description, + iconCodePoint: habit.icon, + ), + ); + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + } + + Future addNewHabit( + String name, + String description, + int iconCodePoint, + ) async { + Box box = await Hive.openBox('habits'); + try { + final DateTime now = DateTime.now(); + await HabitRepository(box).addHabit( + now.millisecondsSinceEpoch.toString(), + HabeichHabit( + name: name, + description: description, + icon: iconCodePoint, + frequency: 'daily', + goal: null, + streak: 0, + onlyOn: [], + doneOn: [], + createdAt: now, + updatedAt: now, + ), + ); + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + } + + Future updateHabit( + String id, + String name, + String description, + int iconCodePoint, + ) async { + Box box = await Hive.openBox('habits'); + try { + final DateTime now = DateTime.now(); + HabeichHabit prevHabit = box.get(id)!; + await HabitRepository(box).updateHabit( + id, + prevHabit.copyWith( + name: name, + description: description, + icon: iconCodePoint, + updatedAt: now, + ), + ); + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + } + + Future deleteHabit(String id) async { + Box box = await Hive.openBox('habits'); + try { + await HabitRepository(box).deleteHabit(id); + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + } +} + diff --git a/lib/blocs/selected_day_cubit.dart b/lib/blocs/selected_day_cubit.dart new file mode 100644 index 0000000..c351331 --- /dev/null +++ b/lib/blocs/selected_day_cubit.dart @@ -0,0 +1,80 @@ +import 'package:bloc/bloc.dart'; +import 'package:Rabbit_Habit/models/habit_sammler_model.dart'; +import 'package:Rabbit_Habit/models/habit_model.dart'; +import 'package:Rabbit_Habit/models/selected_day_model.dart'; +import 'package:Rabbit_Habit/repo/habit_repository.dart'; +import 'package:hive_flutter/hive_flutter.dart'; + +class SelectedDayCubit extends Cubit { + SelectedDayCubit() + : super(SelectedDay(selectedDay: DateTime.now(), habits: [])) { + changeSelectedDay( + DateTime.utc( + DateTime.now().year, + DateTime.now().month, + DateTime.now().day, + ), + ); + } + Future changeSelectedDay(DateTime newDay) async { + if (newDay == state.selectedDay) return; + List habits = []; + Box box = await Hive.openBox('habits'); + try { + habits = HabitRepository(box).getHabitsForDate(newDay); + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + emit(state.copyWith(selectedDay: newDay, habits: habits)); + } + + void changeHabitExpanded(int index) { + List newHabits = state.habits.toList(); + Rabbit habit = + newHabits[index].copyWith(isExpanded: !newHabits[index].isExpanded); + newHabits[index] = habit; + if (newHabits != state.habits) { + emit(state.copyWith(habits: newHabits)); + } + } + + Future changeHabitDone(int index) async { + List newHabits = state.habits.toList(); + Rabbit habit = newHabits[index].copyWith( + isDone: !newHabits[index].isDone, + ); + Box box = await Hive.openBox('habits'); + try { + HabeichHabit? oldHabit = box.get(habit.id); + if (oldHabit == null) return; + List doneOn = oldHabit.doneOn.toList(); + if (habit.isDone) { + doneOn.add( + state.selectedDay, + ); + } else { + doneOn.remove(state.selectedDay); + } + await HabitRepository(box).updateHabit( + habit.id, + oldHabit.copyWith( + doneOn: doneOn, + updatedAt: DateTime.now(), + ), + ); + habit = habit.copyWith( + doneOn: doneOn, + ); + newHabits[index] = habit; + } catch (e) { + // add error handling to crashlytics + } finally { + await box.close(); + } + if (newHabits != state.habits) { + emit(state.copyWith(habits: newHabits)); + } + } +} diff --git a/lib/config/app_en.arb b/lib/config/app_en.arb new file mode 100644 index 0000000..2964ec3 --- /dev/null +++ b/lib/config/app_en.arb @@ -0,0 +1,29 @@ +{ + "add": "Add", + "and": "and", + "app_name": "Rabbit Habit", + "auth_brand_quote_text1": "Break free from old habits and embrace a healthier lifestyle ", + "auth_declaration_text": "By continuing, you agree to our ", + "cancel": "Cancel", + "description": "Description", + "edit": "Edit", + "edit_rabbit": "Edit habit", + "finished": "Finished", + "for_a_better_life": "for a better life", + "icon": "Icon", + "mark_as_done": "Mark as done", + "name": "Name", + "name_cannot_be_empty": "Name cannot be empty", + "new_rabbit": "New Rabbit", + "no_rabbits": "No Rabbits found", + "continue_to_sign": "Continue", + "privacy_policy": "Privacy Policy", + "remove": "Remove", + "remove_rabbit": "Remove habit", + "remove_habit_confirmation": "Are you sure you want to remove this Rabbit?", + "save": "Save", + "terms_of_service": "Terms of Service", + "to_do": "To-do", + "undo_habit": "Undo", + "welcome_to": "Welcome to" +} \ No newline at end of file diff --git a/lib/config/constraint.dart b/lib/config/constraint.dart new file mode 100644 index 0000000..080865f --- /dev/null +++ b/lib/config/constraint.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +EdgeInsetsGeometry defaultHorizontalViewPadding = + const EdgeInsets.symmetric(horizontal: 15); +EdgeInsetsGeometry defaultTopPadding = const EdgeInsets.only(top: 30); +BorderRadius defaultBorderRadius = BorderRadius.circular(15); + + diff --git a/lib/config/theme_data.dart b/lib/config/theme_data.dart new file mode 100644 index 0000000..85c9cc9 --- /dev/null +++ b/lib/config/theme_data.dart @@ -0,0 +1,112 @@ +import 'package:flex_color_scheme/flex_color_scheme.dart'; +import 'package:flutter/material.dart'; + +ThemeData lightModeTheme = FlexThemeData.light( + colors: const FlexSchemeColor( + primary: Color(0xff5fa0ff), + primaryContainer: Color(0xff036e91), + secondary: Color(0xff1957f5), + secondaryContainer: Color(0xff0078ff), + tertiary: Color(0xff03237a), + tertiaryContainer: Color(0xff0c4a8f), + appBarColor: Color(0xff0066ff), + error: Color(0xffb00020), + ), + surfaceMode: FlexSurfaceMode.levelSurfacesLowScaffold, + blendLevel: 7, + subThemesData: const FlexSubThemesData( + blendOnLevel: 10, + blendOnColors: false, + useTextTheme: true, + useM2StyleDividerInM3: true, + textButtonRadius: 10.0, + filledButtonRadius: 10.0, + elevatedButtonRadius: 10.0, + outlinedButtonRadius: 10.0, + toggleButtonsRadius: 10.0, + segmentedButtonSchemeColor: SchemeColor.primary, + sliderTrackHeight: 10, + inputDecoratorSchemeColor: SchemeColor.surface, + inputDecoratorBorderSchemeColor: SchemeColor.onSurface, + inputDecoratorRadius: 10.0, + inputCursorSchemeColor: SchemeColor.onSurface, + alignedDropdown: true, + useInputDecoratorThemeInDialogs: true, + snackBarRadius: 10, + snackBarBackgroundSchemeColor: SchemeColor.inversePrimary, + snackBarActionSchemeColor: SchemeColor.onPrimary, + tabBarItemSchemeColor: SchemeColor.primary, + tabBarUnselectedItemSchemeColor: SchemeColor.outline, + drawerRadius: 35.0, + bottomNavigationBarSelectedLabelSchemeColor: SchemeColor.primary, + bottomNavigationBarUnselectedLabelSchemeColor: SchemeColor.outline, + bottomNavigationBarMutedUnselectedLabel: false, + bottomNavigationBarSelectedIconSchemeColor: SchemeColor.primary, + bottomNavigationBarUnselectedIconSchemeColor: SchemeColor.outline, + bottomNavigationBarMutedUnselectedIcon: false, + navigationBarSelectedLabelSchemeColor: SchemeColor.onSurface, + navigationBarSelectedIconSchemeColor: SchemeColor.onPrimary, + navigationBarIndicatorSchemeColor: SchemeColor.primary, + navigationBarIndicatorOpacity: 0.80, + navigationRailIndicatorSchemeColor: SchemeColor.primary, + ), + visualDensity: FlexColorScheme.comfortablePlatformDensity, + useMaterial3: true, + swapLegacyOnMaterial3: true, + fontFamily: 'Oxygen', +); +ThemeData darkModeTheme = FlexThemeData.dark( + colors: const FlexSchemeColor( + primary: Color(0xff5fa0ff), + primaryContainer: Color(0xff036e91), + secondary: Color(0xff1957f5), + secondaryContainer: Color(0xff0078ff), + tertiary: Color(0xff03237a), + tertiaryContainer: Color(0xff0c4a8f), + appBarColor: Color(0xff0066ff), + error: Color(0xffb00020), + ), + surfaceMode: FlexSurfaceMode.levelSurfacesLowScaffold, + blendLevel: 13, + subThemesData: const FlexSubThemesData( + blendOnLevel: 20, + useTextTheme: true, + useM2StyleDividerInM3: true, + textButtonRadius: 10.0, + filledButtonRadius: 10.0, + elevatedButtonRadius: 10.0, + outlinedButtonRadius: 10.0, + toggleButtonsRadius: 10.0, + segmentedButtonSchemeColor: SchemeColor.primary, + sliderTrackHeight: 10, + inputDecoratorSchemeColor: SchemeColor.surface, + inputDecoratorBorderSchemeColor: SchemeColor.onSurface, + inputDecoratorRadius: 10.0, + inputCursorSchemeColor: SchemeColor.onSurface, + alignedDropdown: true, + useInputDecoratorThemeInDialogs: true, + snackBarRadius: 10, + snackBarBackgroundSchemeColor: SchemeColor.inversePrimary, + snackBarActionSchemeColor: SchemeColor.onPrimary, + tabBarItemSchemeColor: SchemeColor.primary, + tabBarUnselectedItemSchemeColor: SchemeColor.outline, + drawerRadius: 35.0, + bottomNavigationBarSelectedLabelSchemeColor: SchemeColor.primary, + bottomNavigationBarUnselectedLabelSchemeColor: SchemeColor.outline, + bottomNavigationBarMutedUnselectedLabel: false, + bottomNavigationBarSelectedIconSchemeColor: SchemeColor.primary, + bottomNavigationBarUnselectedIconSchemeColor: SchemeColor.outline, + bottomNavigationBarMutedUnselectedIcon: false, + navigationBarSelectedLabelSchemeColor: SchemeColor.onSurface, + navigationBarSelectedIconSchemeColor: SchemeColor.onPrimary, + navigationBarIndicatorSchemeColor: SchemeColor.primary, + navigationBarIndicatorOpacity: 0.80, + navigationRailIndicatorSchemeColor: SchemeColor.primary, + ), + visualDensity: FlexColorScheme.comfortablePlatformDensity, + useMaterial3: true, + swapLegacyOnMaterial3: true, + fontFamily: 'Oxygen', +); + + diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..b0b80bf --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,92 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:get_it/get_it.dart'; +import 'package:Rabbit_Habit/blocs/new_habit_cubit.dart'; +import 'package:Rabbit_Habit/config/theme_data.dart'; +import 'package:Rabbit_Habit/models/habit_sammler_model.dart'; +import 'package:Rabbit_Habit/screens/rabbit_screen.dart'; +import 'package:Rabbit_Habit/screens/home_screen.dart'; +import 'package:Rabbit_Habit/screens/login_screen.dart'; +import 'package:hive_flutter/hive_flutter.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; + +void main() async { + await Hive.initFlutter(); + Hive.registerAdapter(HabitHiveAdapter()); + runApp(const App()); +} + +class App extends StatefulWidget { + const App({Key? key}) : super(key: key); + @override + AppState createState() => AppState(); +} + +class AppState extends State { + @override + void initState() { + super.initState(); + } + + final _router = GoRouter( + routes: [ + GoRoute(path: '/', builder: (context, state) => const LoginScreen()), + GoRoute(path: '/home', builder: (context, state) => const HomeScreen()), + GoRoute( + path: '/habits/new', + builder: (context, state) => BlocProvider( + create: (context) => NewHabitCubit(), + child: const HabitScreen(id: null)), + ), + GoRoute( + path: '/habits/:id', + builder: (context, state) => BlocProvider( + create: (context) => NewHabitCubit(), + child: HabitScreen( + id: state.pathParameters['id'], + ), + ), + ) + ], + ); + + @override + Widget build(BuildContext context) { + return MaterialApp.router( + routerConfig: _router, + debugShowCheckedModeBanner: false, + darkTheme: darkModeTheme, + theme: lightModeTheme, + themeMode: ThemeMode.system, + supportedLocales: const [ + Locale('en'), + ], + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + title: 'Rabbit Habit', + builder: (context, child) { + Locale locale = Localizations.localeOf(context); + AppLocalizations tr = AppLocalizations.of(context)!; + final GetIt getIt = GetIt.I; + if (!getIt.isRegistered()) { + getIt.registerSingleton(tr); + } + if (!getIt.isRegistered()) { + getIt.registerSingleton(locale); + } + return MediaQuery( + data: MediaQuery.of(context) + .copyWith(textScaler: const TextScaler.linear(1.0)), + child: child!, + ); + }, + ); + } +} + diff --git a/lib/models/habit_model.dart b/lib/models/habit_model.dart new file mode 100644 index 0000000..ecf9a2d --- /dev/null +++ b/lib/models/habit_model.dart @@ -0,0 +1,19 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +part 'habit_model.freezed.dart'; + +@freezed +class Rabbit with _$Habit { + const factory Rabbit({ + required String id, + required String description, + required String name, + required int icon, + required String frequency, + required int? goal, + required int streak, + required List onlyOn, + required List doneOn, + required bool isExpanded, + required bool isDone, + }) = _Habit; +} diff --git a/lib/models/habit_model.freezed.dart b/lib/models/habit_model.freezed.dart new file mode 100644 index 0000000..ae7fa5b --- /dev/null +++ b/lib/models/habit_model.freezed.dart @@ -0,0 +1,353 @@ + +part of 'habit_model.dart'; + + + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +/// @nodoc +mixin _$Habit { + String get id => throw _privateConstructorUsedError; + String get description => throw _privateConstructorUsedError; + String get name => throw _privateConstructorUsedError; + int get icon => throw _privateConstructorUsedError; + String get frequency => throw _privateConstructorUsedError; + int? get goal => throw _privateConstructorUsedError; + int get streak => throw _privateConstructorUsedError; + List get onlyOn => throw _privateConstructorUsedError; + List get doneOn => throw _privateConstructorUsedError; + bool get isExpanded => throw _privateConstructorUsedError; + bool get isDone => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $HabitCopyWith get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HabitCopyWith<$Res> { + factory $HabitCopyWith(Rabbit value, $Res Function(Rabbit) then) = + _$HabitCopyWithImpl<$Res, Rabbit>; + @useResult + $Res call( + {String id, + String description, + String name, + int icon, + String frequency, + int? goal, + int streak, + List onlyOn, + List doneOn, + bool isExpanded, + bool isDone}); +} + +/// @nodoc +class _$HabitCopyWithImpl<$Res, $Val extends Rabbit> + implements $HabitCopyWith<$Res> { + _$HabitCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = null, + Object? description = null, + Object? name = null, + Object? icon = null, + Object? frequency = null, + Object? goal = freezed, + Object? streak = null, + Object? onlyOn = null, + Object? doneOn = null, + Object? isExpanded = null, + Object? isDone = null, + }) { + return _then(_value.copyWith( + id: null == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + icon: null == icon + ? _value.icon + : icon // ignore: cast_nullable_to_non_nullable + as int, + frequency: null == frequency + ? _value.frequency + : frequency // ignore: cast_nullable_to_non_nullable + as String, + goal: freezed == goal + ? _value.goal + : goal // ignore: cast_nullable_to_non_nullable + as int?, + streak: null == streak + ? _value.streak + : streak // ignore: cast_nullable_to_non_nullable + as int, + onlyOn: null == onlyOn + ? _value.onlyOn + : onlyOn // ignore: cast_nullable_to_non_nullable + as List, + doneOn: null == doneOn + ? _value.doneOn + : doneOn // ignore: cast_nullable_to_non_nullable + as List, + isExpanded: null == isExpanded + ? _value.isExpanded + : isExpanded // ignore: cast_nullable_to_non_nullable + as bool, + isDone: null == isDone + ? _value.isDone + : isDone // ignore: cast_nullable_to_non_nullable + as bool, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_HabitCopyWith<$Res> implements $HabitCopyWith<$Res> { + factory _$$_HabitCopyWith(_$_Habit value, $Res Function(_$_Habit) then) = + __$$_HabitCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String id, + String description, + String name, + int icon, + String frequency, + int? goal, + int streak, + List onlyOn, + List doneOn, + bool isExpanded, + bool isDone}); +} + +/// @nodoc +class __$$_HabitCopyWithImpl<$Res> extends _$HabitCopyWithImpl<$Res, _$_Habit> + implements _$$_HabitCopyWith<$Res> { + __$$_HabitCopyWithImpl(_$_Habit _value, $Res Function(_$_Habit) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = null, + Object? description = null, + Object? name = null, + Object? icon = null, + Object? frequency = null, + Object? goal = freezed, + Object? streak = null, + Object? onlyOn = null, + Object? doneOn = null, + Object? isExpanded = null, + Object? isDone = null, + }) { + return _then(_$_Habit( + id: null == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + icon: null == icon + ? _value.icon + : icon // ignore: cast_nullable_to_non_nullable + as int, + frequency: null == frequency + ? _value.frequency + : frequency // ignore: cast_nullable_to_non_nullable + as String, + goal: freezed == goal + ? _value.goal + : goal // ignore: cast_nullable_to_non_nullable + as int?, + streak: null == streak + ? _value.streak + : streak // ignore: cast_nullable_to_non_nullable + as int, + onlyOn: null == onlyOn + ? _value._onlyOn + : onlyOn // ignore: cast_nullable_to_non_nullable + as List, + doneOn: null == doneOn + ? _value._doneOn + : doneOn // ignore: cast_nullable_to_non_nullable + as List, + isExpanded: null == isExpanded + ? _value.isExpanded + : isExpanded // ignore: cast_nullable_to_non_nullable + as bool, + isDone: null == isDone + ? _value.isDone + : isDone // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$_Habit implements _Habit { + const _$_Habit( + {required this.id, + required this.description, + required this.name, + required this.icon, + required this.frequency, + required this.goal, + required this.streak, + required final List onlyOn, + required final List doneOn, + required this.isExpanded, + required this.isDone}) + : _onlyOn = onlyOn, + _doneOn = doneOn; + + @override + final String id; + @override + final String description; + @override + final String name; + @override + final int icon; + @override + final String frequency; + @override + final int? goal; + @override + final int streak; + final List _onlyOn; + @override + List get onlyOn { + if (_onlyOn is EqualUnmodifiableListView) return _onlyOn; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_onlyOn); + } + + final List _doneOn; + @override + List get doneOn { + if (_doneOn is EqualUnmodifiableListView) return _doneOn; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_doneOn); + } + + @override + final bool isExpanded; + @override + final bool isDone; + + @override + String toString() { + return 'Habit(id: $id, description: $description, name: $name, icon: $icon, frequency: $frequency, goal: $goal, streak: $streak, onlyOn: $onlyOn, doneOn: $doneOn, isExpanded: $isExpanded, isDone: $isDone)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_Habit && + (identical(other.id, id) || other.id == id) && + (identical(other.description, description) || + other.description == description) && + (identical(other.name, name) || other.name == name) && + (identical(other.icon, icon) || other.icon == icon) && + (identical(other.frequency, frequency) || + other.frequency == frequency) && + (identical(other.goal, goal) || other.goal == goal) && + (identical(other.streak, streak) || other.streak == streak) && + const DeepCollectionEquality().equals(other._onlyOn, _onlyOn) && + const DeepCollectionEquality().equals(other._doneOn, _doneOn) && + (identical(other.isExpanded, isExpanded) || + other.isExpanded == isExpanded) && + (identical(other.isDone, isDone) || other.isDone == isDone)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + id, + description, + name, + icon, + frequency, + goal, + streak, + const DeepCollectionEquality().hash(_onlyOn), + const DeepCollectionEquality().hash(_doneOn), + isExpanded, + isDone); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_HabitCopyWith<_$_Habit> get copyWith => + __$$_HabitCopyWithImpl<_$_Habit>(this, _$identity); +} + +abstract class _Habit implements Rabbit { + const factory _Habit( + {required final String id, + required final String description, + required final String name, + required final int icon, + required final String frequency, + required final int? goal, + required final int streak, + required final List onlyOn, + required final List doneOn, + required final bool isExpanded, + required final bool isDone}) = _$_Habit; + + @override + String get id; + @override + String get description; + @override + String get name; + @override + int get icon; + @override + String get frequency; + @override + int? get goal; + @override + int get streak; + @override + List get onlyOn; + @override + List get doneOn; + @override + bool get isExpanded; + @override + bool get isDone; + @override + @JsonKey(ignore: true) + _$$_HabitCopyWith<_$_Habit> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/models/habit_sammler.freezed.dart b/lib/models/habit_sammler.freezed.dart new file mode 100644 index 0000000..d378dce --- /dev/null +++ b/lib/models/habit_sammler.freezed.dart @@ -0,0 +1,373 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'habit_sammler_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +/// @nodoc +mixin _$HabitHive { + @HiveField(0) + String get name => throw _privateConstructorUsedError; + @HiveField(1) + String get description => throw _privateConstructorUsedError; + @HiveField(2) + int get icon => throw _privateConstructorUsedError; + @HiveField(3) + String get frequency => throw _privateConstructorUsedError; + @HiveField(4) + int? get goal => throw _privateConstructorUsedError; + @HiveField(5) + int get streak => throw _privateConstructorUsedError; + @HiveField(6) + List get onlyOn => throw _privateConstructorUsedError; + @HiveField(7) + List get doneOn => throw _privateConstructorUsedError; + @HiveField(8) + DateTime get createdAt => throw _privateConstructorUsedError; + @HiveField(9) + DateTime get updatedAt => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $HabitHiveCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HabitHiveCopyWith<$Res> { + factory $HabitHiveCopyWith(HabeichHabit value, $Res Function(HabeichHabit) then) = + _$HabitHiveCopyWithImpl<$Res, HabeichHabit>; + @useResult + $Res call( + {@HiveField(0) String name, + @HiveField(1) String description, + @HiveField(2) int icon, + @HiveField(3) String frequency, + @HiveField(4) int? goal, + @HiveField(5) int streak, + @HiveField(6) List onlyOn, + @HiveField(7) List doneOn, + @HiveField(8) DateTime createdAt, + @HiveField(9) DateTime updatedAt}); +} + +/// @nodoc +class _$HabitHiveCopyWithImpl<$Res, $Val extends HabeichHabit> + implements $HabitHiveCopyWith<$Res> { + _$HabitHiveCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? description = null, + Object? icon = null, + Object? frequency = null, + Object? goal = freezed, + Object? streak = null, + Object? onlyOn = null, + Object? doneOn = null, + Object? createdAt = null, + Object? updatedAt = null, + }) { + return _then(_value.copyWith( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + icon: null == icon + ? _value.icon + : icon // ignore: cast_nullable_to_non_nullable + as int, + frequency: null == frequency + ? _value.frequency + : frequency // ignore: cast_nullable_to_non_nullable + as String, + goal: freezed == goal + ? _value.goal + : goal // ignore: cast_nullable_to_non_nullable + as int?, + streak: null == streak + ? _value.streak + : streak // ignore: cast_nullable_to_non_nullable + as int, + onlyOn: null == onlyOn + ? _value.onlyOn + : onlyOn // ignore: cast_nullable_to_non_nullable + as List, + doneOn: null == doneOn + ? _value.doneOn + : doneOn // ignore: cast_nullable_to_non_nullable + as List, + createdAt: null == createdAt + ? _value.createdAt + : createdAt // ignore: cast_nullable_to_non_nullable + as DateTime, + updatedAt: null == updatedAt + ? _value.updatedAt + : updatedAt // ignore: cast_nullable_to_non_nullable + as DateTime, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_HabitHiveCopyWith<$Res> implements $HabitHiveCopyWith<$Res> { + factory _$$_HabitHiveCopyWith( + _$_HabitHive value, $Res Function(_$_HabitHive) then) = + __$$_HabitHiveCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {@HiveField(0) String name, + @HiveField(1) String description, + @HiveField(2) int icon, + @HiveField(3) String frequency, + @HiveField(4) int? goal, + @HiveField(5) int streak, + @HiveField(6) List onlyOn, + @HiveField(7) List doneOn, + @HiveField(8) DateTime createdAt, + @HiveField(9) DateTime updatedAt}); +} + +/// @nodoc +class __$$_HabitHiveCopyWithImpl<$Res> + extends _$HabitHiveCopyWithImpl<$Res, _$_HabitHive> + implements _$$_HabitHiveCopyWith<$Res> { + __$$_HabitHiveCopyWithImpl( + _$_HabitHive _value, $Res Function(_$_HabitHive) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? description = null, + Object? icon = null, + Object? frequency = null, + Object? goal = freezed, + Object? streak = null, + Object? onlyOn = null, + Object? doneOn = null, + Object? createdAt = null, + Object? updatedAt = null, + }) { + return _then(_$_HabitHive( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + icon: null == icon + ? _value.icon + : icon // ignore: cast_nullable_to_non_nullable + as int, + frequency: null == frequency + ? _value.frequency + : frequency // ignore: cast_nullable_to_non_nullable + as String, + goal: freezed == goal + ? _value.goal + : goal // ignore: cast_nullable_to_non_nullable + as int?, + streak: null == streak + ? _value.streak + : streak // ignore: cast_nullable_to_non_nullable + as int, + onlyOn: null == onlyOn + ? _value._onlyOn + : onlyOn // ignore: cast_nullable_to_non_nullable + as List, + doneOn: null == doneOn + ? _value._doneOn + : doneOn // ignore: cast_nullable_to_non_nullable + as List, + createdAt: null == createdAt + ? _value.createdAt + : createdAt // ignore: cast_nullable_to_non_nullable + as DateTime, + updatedAt: null == updatedAt + ? _value.updatedAt + : updatedAt // ignore: cast_nullable_to_non_nullable + as DateTime, + )); + } +} + +/// @nodoc + +class _$_HabitHive implements _HabeichHabit { + const _$_HabitHive( + {@HiveField(0) required this.name, + @HiveField(1) required this.description, + @HiveField(2) required this.icon, + @HiveField(3) required this.frequency, + @HiveField(4) required this.goal, + @HiveField(5) required this.streak, + @HiveField(6) required final List onlyOn, + @HiveField(7) required final List doneOn, + @HiveField(8) required this.createdAt, + @HiveField(9) required this.updatedAt}) + : _onlyOn = onlyOn, + _doneOn = doneOn; + + @override + @HiveField(0) + final String name; + @override + @HiveField(1) + final String description; + @override + @HiveField(2) + final int icon; + @override + @HiveField(3) + final String frequency; + @override + @HiveField(4) + final int? goal; + @override + @HiveField(5) + final int streak; + final List _onlyOn; + @override + @HiveField(6) + List get onlyOn { + if (_onlyOn is EqualUnmodifiableListView) return _onlyOn; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_onlyOn); + } + + final List _doneOn; + @override + @HiveField(7) + List get doneOn { + if (_doneOn is EqualUnmodifiableListView) return _doneOn; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_doneOn); + } + + @override + @HiveField(8) + final DateTime createdAt; + @override + @HiveField(9) + final DateTime updatedAt; + + @override + String toString() { + return 'HabitHive(name: $name, description: $description, icon: $icon, frequency: $frequency, goal: $goal, streak: $streak, onlyOn: $onlyOn, doneOn: $doneOn, createdAt: $createdAt, updatedAt: $updatedAt)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_HabitHive && + (identical(other.name, name) || other.name == name) && + (identical(other.description, description) || + other.description == description) && + (identical(other.icon, icon) || other.icon == icon) && + (identical(other.frequency, frequency) || + other.frequency == frequency) && + (identical(other.goal, goal) || other.goal == goal) && + (identical(other.streak, streak) || other.streak == streak) && + const DeepCollectionEquality().equals(other._onlyOn, _onlyOn) && + const DeepCollectionEquality().equals(other._doneOn, _doneOn) && + (identical(other.createdAt, createdAt) || + other.createdAt == createdAt) && + (identical(other.updatedAt, updatedAt) || + other.updatedAt == updatedAt)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + name, + description, + icon, + frequency, + goal, + streak, + const DeepCollectionEquality().hash(_onlyOn), + const DeepCollectionEquality().hash(_doneOn), + createdAt, + updatedAt); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_HabitHiveCopyWith<_$_HabitHive> get copyWith => + __$$_HabitHiveCopyWithImpl<_$_HabitHive>(this, _$identity); +} + +abstract class _HabeichHabit implements HabeichHabit { + const factory _HabeichHabit( + {@HiveField(0) required final String name, + @HiveField(1) required final String description, + @HiveField(2) required final int icon, + @HiveField(3) required final String frequency, + @HiveField(4) required final int? goal, + @HiveField(5) required final int streak, + @HiveField(6) required final List onlyOn, + @HiveField(7) required final List doneOn, + @HiveField(8) required final DateTime createdAt, + @HiveField(9) required final DateTime updatedAt}) = _$_HabitHive; + + @override + @HiveField(0) + String get name; + @override + @HiveField(1) + String get description; + @override + @HiveField(2) + int get icon; + @override + @HiveField(3) + String get frequency; + @override + @HiveField(4) + int? get goal; + @override + @HiveField(5) + int get streak; + @override + @HiveField(6) + List get onlyOn; + @override + @HiveField(7) + List get doneOn; + @override + @HiveField(8) + DateTime get createdAt; + @override + @HiveField(9) + DateTime get updatedAt; + @override + @JsonKey(ignore: true) + _$$_HabitHiveCopyWith<_$_HabitHive> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/models/habit_sammler_model.dart b/lib/models/habit_sammler_model.dart new file mode 100644 index 0000000..2328bc8 --- /dev/null +++ b/lib/models/habit_sammler_model.dart @@ -0,0 +1,21 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:hive/hive.dart'; +part 'habit_sammler.freezed.dart'; +part 'habit_sammler_model.g.dart'; + +@freezed +@HiveType(typeId: 0) +class HabeichHabit with _$HabitHive { + const factory HabeichHabit({ + @HiveField(0) required String name, + @HiveField(1) required String description, + @HiveField(2) required int icon, + @HiveField(3) required String frequency, + @HiveField(4) required int? goal, + @HiveField(5) required int streak, + @HiveField(6) required List onlyOn, + @HiveField(7) required List doneOn, + @HiveField(8) required DateTime createdAt, + @HiveField(9) required DateTime updatedAt, + }) = _HabeichHabit; +} diff --git a/lib/models/habit_sammler_model.g.dart b/lib/models/habit_sammler_model.g.dart new file mode 100644 index 0000000..8c47e4a --- /dev/null +++ b/lib/models/habit_sammler_model.g.dart @@ -0,0 +1,65 @@ + + +part of 'habit_sammler_model.dart'; + + +class HabitHiveAdapter extends TypeAdapter { + @override + final int typeId = 0; + + @override + HabeichHabit read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return HabeichHabit( + name: fields[0] as String, + description: fields[1] as String, + icon: fields[2] as int, + frequency: fields[3] as String, + goal: fields[4] as int?, + streak: fields[5] as int, + onlyOn: (fields[6] as List).cast(), + doneOn: (fields[7] as List).cast(), + createdAt: fields[8] as DateTime, + updatedAt: fields[9] as DateTime, + ); + } + + @override + void write(BinaryWriter writer, HabeichHabit obj) { + writer + ..writeByte(10) + ..writeByte(0) + ..write(obj.name) + ..writeByte(1) + ..write(obj.description) + ..writeByte(2) + ..write(obj.icon) + ..writeByte(3) + ..write(obj.frequency) + ..writeByte(4) + ..write(obj.goal) + ..writeByte(5) + ..write(obj.streak) + ..writeByte(6) + ..write(obj.onlyOn) + ..writeByte(7) + ..write(obj.doneOn) + ..writeByte(8) + ..write(obj.createdAt) + ..writeByte(9) + ..write(obj.updatedAt); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is HabitHiveAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/models/new_habit_model.dart b/lib/models/new_habit_model.dart new file mode 100644 index 0000000..14c2127 --- /dev/null +++ b/lib/models/new_habit_model.dart @@ -0,0 +1,14 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:flutter/foundation.dart'; +part 'new_habit_model.freezed.dart'; + +@freezed +class NewHabit with _$NewHabit { + const factory NewHabit({ + required String name, + required String description, + required int iconCodePoint, + }) = _NewHabit; +} + + diff --git a/lib/models/new_habit_model.freezed.dart b/lib/models/new_habit_model.freezed.dart new file mode 100644 index 0000000..912f527 --- /dev/null +++ b/lib/models/new_habit_model.freezed.dart @@ -0,0 +1,181 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'new_habit_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +/// @nodoc +mixin _$NewHabit { + String get name => throw _privateConstructorUsedError; + String get description => throw _privateConstructorUsedError; + int get iconCodePoint => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $NewHabitCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $NewHabitCopyWith<$Res> { + factory $NewHabitCopyWith(NewHabit value, $Res Function(NewHabit) then) = + _$NewHabitCopyWithImpl<$Res, NewHabit>; + @useResult + $Res call({String name, String description, int iconCodePoint}); +} + +/// @nodoc +class _$NewHabitCopyWithImpl<$Res, $Val extends NewHabit> + implements $NewHabitCopyWith<$Res> { + _$NewHabitCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? description = null, + Object? iconCodePoint = null, + }) { + return _then(_value.copyWith( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + iconCodePoint: null == iconCodePoint + ? _value.iconCodePoint + : iconCodePoint // ignore: cast_nullable_to_non_nullable + as int, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_NewHabitCopyWith<$Res> implements $NewHabitCopyWith<$Res> { + factory _$$_NewHabitCopyWith( + _$_NewHabit value, $Res Function(_$_NewHabit) then) = + __$$_NewHabitCopyWithImpl<$Res>; + @override + @useResult + $Res call({String name, String description, int iconCodePoint}); +} + +/// @nodoc +class __$$_NewHabitCopyWithImpl<$Res> + extends _$NewHabitCopyWithImpl<$Res, _$_NewHabit> + implements _$$_NewHabitCopyWith<$Res> { + __$$_NewHabitCopyWithImpl( + _$_NewHabit _value, $Res Function(_$_NewHabit) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? description = null, + Object? iconCodePoint = null, + }) { + return _then(_$_NewHabit( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + iconCodePoint: null == iconCodePoint + ? _value.iconCodePoint + : iconCodePoint // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +class _$_NewHabit with DiagnosticableTreeMixin implements _NewHabit { + const _$_NewHabit( + {required this.name, + required this.description, + required this.iconCodePoint}); + + @override + final String name; + @override + final String description; + @override + final int iconCodePoint; + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'NewHabit(name: $name, description: $description, iconCodePoint: $iconCodePoint)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'NewHabit')) + ..add(DiagnosticsProperty('name', name)) + ..add(DiagnosticsProperty('description', description)) + ..add(DiagnosticsProperty('iconCodePoint', iconCodePoint)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_NewHabit && + (identical(other.name, name) || other.name == name) && + (identical(other.description, description) || + other.description == description) && + (identical(other.iconCodePoint, iconCodePoint) || + other.iconCodePoint == iconCodePoint)); + } + + @override + int get hashCode => + Object.hash(runtimeType, name, description, iconCodePoint); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_NewHabitCopyWith<_$_NewHabit> get copyWith => + __$$_NewHabitCopyWithImpl<_$_NewHabit>(this, _$identity); +} + +abstract class _NewHabit implements NewHabit { + const factory _NewHabit( + {required final String name, + required final String description, + required final int iconCodePoint}) = _$_NewHabit; + + @override + String get name; + @override + String get description; + @override + int get iconCodePoint; + @override + @JsonKey(ignore: true) + _$$_NewHabitCopyWith<_$_NewHabit> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/models/selected_day_model.dart b/lib/models/selected_day_model.dart new file mode 100644 index 0000000..4c35bc4 --- /dev/null +++ b/lib/models/selected_day_model.dart @@ -0,0 +1,14 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:flutter/foundation.dart'; +import 'package:Rabbit_Habit/models/habit_model.dart'; +part 'selected_day_model.freezed.dart'; + +@Freezed(makeCollectionsUnmodifiable: false) +class SelectedDay with _$SelectedDay { + const factory SelectedDay({ + required DateTime selectedDay, + required List habits, + }) = _SelectedDay; +} + + diff --git a/lib/models/selected_day_model.freezed.dart b/lib/models/selected_day_model.freezed.dart new file mode 100644 index 0000000..0c7db6f --- /dev/null +++ b/lib/models/selected_day_model.freezed.dart @@ -0,0 +1,161 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'selected_day_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +/// @nodoc +mixin _$SelectedDay { + DateTime get selectedDay => throw _privateConstructorUsedError; + List get habits => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $SelectedDayCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SelectedDayCopyWith<$Res> { + factory $SelectedDayCopyWith( + SelectedDay value, $Res Function(SelectedDay) then) = + _$SelectedDayCopyWithImpl<$Res, SelectedDay>; + @useResult + $Res call({DateTime selectedDay, List habits}); +} + +/// @nodoc +class _$SelectedDayCopyWithImpl<$Res, $Val extends SelectedDay> + implements $SelectedDayCopyWith<$Res> { + _$SelectedDayCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedDay = null, + Object? habits = null, + }) { + return _then(_value.copyWith( + selectedDay: null == selectedDay + ? _value.selectedDay + : selectedDay // ignore: cast_nullable_to_non_nullable + as DateTime, + habits: null == habits + ? _value.habits + : habits // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_SelectedDayCopyWith<$Res> + implements $SelectedDayCopyWith<$Res> { + factory _$$_SelectedDayCopyWith( + _$_SelectedDay value, $Res Function(_$_SelectedDay) then) = + __$$_SelectedDayCopyWithImpl<$Res>; + @override + @useResult + $Res call({DateTime selectedDay, List habits}); +} + +/// @nodoc +class __$$_SelectedDayCopyWithImpl<$Res> + extends _$SelectedDayCopyWithImpl<$Res, _$_SelectedDay> + implements _$$_SelectedDayCopyWith<$Res> { + __$$_SelectedDayCopyWithImpl( + _$_SelectedDay _value, $Res Function(_$_SelectedDay) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedDay = null, + Object? habits = null, + }) { + return _then(_$_SelectedDay( + selectedDay: null == selectedDay + ? _value.selectedDay + : selectedDay // ignore: cast_nullable_to_non_nullable + as DateTime, + habits: null == habits + ? _value.habits + : habits // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc + +class _$_SelectedDay with DiagnosticableTreeMixin implements _SelectedDay { + const _$_SelectedDay({required this.selectedDay, required this.habits}); + + @override + final DateTime selectedDay; + @override + final List habits; + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'SelectedDay(selectedDay: $selectedDay, habits: $habits)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'SelectedDay')) + ..add(DiagnosticsProperty('selectedDay', selectedDay)) + ..add(DiagnosticsProperty('habits', habits)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_SelectedDay && + (identical(other.selectedDay, selectedDay) || + other.selectedDay == selectedDay) && + const DeepCollectionEquality().equals(other.habits, habits)); + } + + @override + int get hashCode => Object.hash( + runtimeType, selectedDay, const DeepCollectionEquality().hash(habits)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_SelectedDayCopyWith<_$_SelectedDay> get copyWith => + __$$_SelectedDayCopyWithImpl<_$_SelectedDay>(this, _$identity); +} + +abstract class _SelectedDay implements SelectedDay { + const factory _SelectedDay( + {required final DateTime selectedDay, + required final List habits}) = _$_SelectedDay; + + @override + DateTime get selectedDay; + @override + List get habits; + @override + @JsonKey(ignore: true) + _$$_SelectedDayCopyWith<_$_SelectedDay> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/repo/habit_repository.dart b/lib/repo/habit_repository.dart new file mode 100644 index 0000000..b896186 --- /dev/null +++ b/lib/repo/habit_repository.dart @@ -0,0 +1,89 @@ +import 'package:Rabbit_Habit/models/habit_model.dart'; +import 'package:hive/hive.dart'; +import 'package:Rabbit_Habit/models/habit_sammler_model.dart'; + +class HabitRepository { + final Box? habitBox; + + HabitRepository(this.habitBox); + + Future> getAllHabits() async { + if (habitBox == null) return []; + return habitBox!.values.toList().cast(); + } + + Future addHabit(String id, HabeichHabit habit) async { + if (habitBox == null) return; + await habitBox!.put(id, habit); + } + + Future updateHabit(String id, HabeichHabit habit) async { + if (habitBox == null) return; + await habitBox!.put(id, habit); + } + + Future deleteHabit(String habitId) async { + if (habitBox == null) return; + await habitBox!.delete(habitId); + } + + List getHabitsForDate(DateTime datum) { + if (habitBox == null) return []; + final Myrabbit = habitBox!.values.toList().cast(); + List habits = []; + for (int i = 0; i < Myrabbit.length; i++) { + if (Myrabbit[i].onlyOn.contains(datum.weekday) || + Myrabbit[i].onlyOn.isEmpty) { + bool isDone = false; + for (int j = 0; j < Myrabbit[i].doneOn.length; j++) { + if (Myrabbit[i].doneOn[j].day == datum.day && + Myrabbit[i].doneOn[j].month == datum.month && + Myrabbit[i].doneOn[j].year == datum.year) { + isDone = true; + } + } + habits.add( + HabitRepository(habitBox) + .convertHabitHiveToHabit(Myrabbit[i]) + .copyWith( + isDone: isDone, + ), + ); + } + } + return habits; + } + + Rabbit convertHabitHiveToHabit(HabeichHabit einHabit) { + return Rabbit( + id: einHabit.createdAt.millisecondsSinceEpoch.toString(), + name: einHabit.name, + description: einHabit.description, + icon: einHabit.icon, + frequency: einHabit.frequency, + goal: einHabit.goal, + streak: einHabit.streak, + onlyOn: einHabit.onlyOn, + doneOn: einHabit.doneOn, + isExpanded: false, + isDone: false, + ); + } + + HabeichHabit convertHabitToHabitHive(Rabbit habit, DateTime now) { + return HabeichHabit( + name: habit.name, + description: habit.description, + icon: habit.icon, + frequency: habit.frequency, + goal: habit.goal, + streak: habit.streak, + onlyOn: habit.onlyOn, + doneOn: habit.doneOn, + createdAt: now, + updatedAt: now, + ); + } +} + + diff --git a/lib/repo/icons_repository.dart b/lib/repo/icons_repository.dart new file mode 100644 index 0000000..a7d4e0f --- /dev/null +++ b/lib/repo/icons_repository.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; + +class IconsRepository { + static IconData getIcon(int codePoint) { + return IconData(codePoint, fontFamily: 'MaterialIcons'); + } + + List getFeaturedIcons() { + return [ + Icons.directions_walk.codePoint, + Icons.directions_bike.codePoint, + Icons.alarm.codePoint, + Icons.book.codePoint, + Icons.brush.codePoint, + Icons.bubble_chart.codePoint, + Icons.cake.codePoint, + Icons.local_cafe.codePoint, + Icons.local_grocery_store.codePoint, + Icons.local_atm.codePoint, + Icons.music_note.codePoint, + Icons.star_border.codePoint, + Icons.directions_transit_sharp.codePoint, + Icons.self_improvement.codePoint, + Icons.school.codePoint, + Icons.local_gas_station.codePoint, + Icons.computer.codePoint, + Icons.wb_sunny.codePoint, + Icons.call.codePoint, + + + ]; + } + + IconData getIconData(int codePoint) { + return IconData(codePoint, fontFamily: 'MaterialIcons'); + } +} + + diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart new file mode 100644 index 0000000..1310e2c --- /dev/null +++ b/lib/screens/home_screen.dart @@ -0,0 +1,680 @@ +import 'dart:math'; + +import 'package:confetti/confetti.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; +import 'package:Rabbit_Habit/blocs/selected_day_cubit.dart'; +import 'package:Rabbit_Habit/config/constraint.dart'; +import 'package:Rabbit_Habit/models/habit_model.dart'; +import 'package:Rabbit_Habit/models/selected_day_model.dart'; +import 'package:Rabbit_Habit/repo/icons_repository.dart'; +import 'package:intl/intl.dart'; +import 'package:table_calendar/table_calendar.dart'; +import 'package:get_it/get_it.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +final GetIt getIt = GetIt.instance; +final tr = getIt.get(); +final locale = getIt.get(); +const Radius defaultBorderRadius = Radius.circular(15); + +class HomeScreen extends StatefulWidget { + const HomeScreen({super.key}); + + @override + State createState() => _HomeScreenState(); +} + +class _HomeScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Theme.of(context).colorScheme.background, + appBar: _buildAppBar(context), + body: SafeArea( + child: Center( + child: BlocProvider( + create: (context) => SelectedDayCubit(), + child: Padding( + padding: defaultHorizontalViewPadding, + child: Column( + children: [ + const CalendarHabits(), + _buildHabitListView(context), + ], + ), + ), + ), + ), + ), + ); + } + + AppBar _buildAppBar(BuildContext context) { + ThemeData themeData = Theme.of(context); + return AppBar( + backgroundColor: themeData.colorScheme.background, + elevation: 0, + leading: IconButton( + onPressed: () {}, + icon: const Icon(Icons.settings), + ), + actions: [ + IconButton( + onPressed: () {}, + icon: const Icon(Icons.event_note), + ), + IconButton( + onPressed: () { + context.push('/habits/new'); + }, + icon: const Icon(Icons.add_circle), + ), + ], + title: Text( + tr.app_name, + style: themeData.textTheme.bodyLarge?.copyWith( + fontFamily: 'Montserrat', + color: themeData.colorScheme.primary, + fontSize: 28, + fontWeight: FontWeight.bold, + ), + ), + centerTitle: true, + ); + } + + Widget _buildHabitListView(BuildContext context) { + return BlocBuilder( + builder: (context, selectedDay) { + List habitsToShow = selectedDay.habits; + return habitsToShow.isEmpty + ? const NoHabitsFound() + : Expanded( + child: ListView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: habitsToShow.length, + itemBuilder: (context, index) { + Rabbit habit = habitsToShow[index]; + return HabitItem( + title: habit.name, + icon: IconsRepository().getIconData(habit.icon), + description: habit.isDone ? tr.finished : tr.to_do, + iconDescription: + habit.isDone ? Icons.check_circle : Icons.star, + index: index, + ); + }, + ), + ); + }, + ); + } +} + + +class CalendarHabits extends StatelessWidget { + const CalendarHabits({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, selectedDay) { + return TableCalendar( + locale: locale.toString(), + firstDay: DateTime.utc(2023, 01, 01), + lastDay: DateTime.utc(2030, 3, 14), + focusedDay: selectedDay.selectedDay, + pageJumpingEnabled: true, + calendarFormat: CalendarFormat.week, + calendarStyle: const CalendarStyle( + weekendTextStyle: TextStyle(), + ), + daysOfWeekStyle: const DaysOfWeekStyle( + weekendStyle: TextStyle(color: Color(0xFF4F4F4F)), + ), + daysOfWeekHeight: 20, + selectedDayPredicate: (day) { + return isSameDay(selectedDay.selectedDay, day); + }, + onDaySelected: (selectedDay, focusedDay) async { + await context.read().changeSelectedDay(selectedDay); + }, + startingDayOfWeek: StartingDayOfWeek.monday, + headerStyle: const HeaderStyle( + titleCentered: true, + formatButtonVisible: false, + ), + calendarBuilders: CalendarBuilders( + todayBuilder: (context, day, focusedDay) { + return CalendarTodayDay(day: day); + }, + selectedBuilder: (context, day, focusedDay) { + return CalendarSelectedDay(day: day); + }, + dowBuilder: (context, day) { + final text = DateFormat.E(locale.toString()).format(day); + return buildDowWidget(context, day, selectedDay, text); + }, + ), + ); + }, + ); + } + + Widget? buildDowWidget(BuildContext context, DateTime day, SelectedDay selectedDay, String text) { + ThemeData themeData = Theme.of(context); + if (isSameDay(day, selectedDay.selectedDay) || isSameDay(day, selectedDay.selectedDay)) { + return CalendarDow(day: day, text: text); + } + if (isSameDay(day, DateTime.now())) { + return CalendarDowSameDay(text: text); + } + return null; + } +} + + +class CalendarSelectedDay extends StatelessWidget { + final DateTime day; + const CalendarSelectedDay({super.key, required this.day}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Container( + decoration: BoxDecoration( + color: isSameDay(DateTime.now(), day) + ? themeData.colorScheme.primary + : themeData.colorScheme.surfaceVariant, + borderRadius: const BorderRadius.only( + bottomLeft: defaultBorderRadius, + bottomRight: defaultBorderRadius, + ), + ), + child: Center( + child: Text( + DateFormat.d(locale.toString()).format(day), + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + ), + ); + } +} + +class CalendarTodayDay extends StatelessWidget { + final DateTime day; + const CalendarTodayDay({super.key, required this.day}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Center( + child: Container( + decoration: BoxDecoration( + color: themeData.colorScheme.primary, + borderRadius: BorderRadius.circular(defaultBorderRadius.x), + ), + padding: const EdgeInsets.symmetric( + vertical: 5, + horizontal: 10, + ), + child: Text( + DateFormat.d(locale.toString()).format(day), + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + ), + ); + } +} + +class CalendarDow extends StatelessWidget { + final DateTime day; + final String text; + const CalendarDow({super.key, required this.day, required this.text}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Container( + decoration: BoxDecoration( + color: isSameDay(DateTime.now(), day) + ? themeData.colorScheme.primary + : themeData.colorScheme.surfaceVariant, + borderRadius: const BorderRadius.only( + topLeft: defaultBorderRadius, + topRight: defaultBorderRadius, + ), + ), + child: Center( + child: Text( + text, + style: const TextStyle( + fontWeight: FontWeight.bold, + ), + ), + ), + ); + } +} + +class CalendarDowSameDay extends StatelessWidget { + final String text; + const CalendarDowSameDay({super.key, required this.text}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Center( + child: Text( + text, + style: TextStyle( + color: themeData.colorScheme.primary, + fontWeight: FontWeight.bold, + ), + ), + ); + } +} + +class NoHabitsFound extends StatelessWidget { + const NoHabitsFound({super.key}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Container( + decoration: BoxDecoration( + color: themeData.colorScheme.primary, + borderRadius: BorderRadius.circular(15), + ), + padding: const EdgeInsets.all(15), + margin: const EdgeInsets.only(top: 20), + child: Text( + tr.no_rabbits, + textAlign: TextAlign.center, + style: themeData.textTheme.bodyMedium?.copyWith( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + ); + } +} + +class HabitItemVisible extends StatelessWidget { + final String title; + final String? description; + final IconData icon; + final IconData? iconDescription; + final int index; + const HabitItemVisible({ + super.key, + required this.title, + this.description, + required this.icon, + this.iconDescription, + required this.index, + }); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Row( + children: [ + Container( + decoration: BoxDecoration( + color: themeData.colorScheme.primary, + borderRadius: BorderRadius.circular(15), + ), + padding: const EdgeInsets.all(10), + child: Icon( + icon, + color: themeData.colorScheme.onPrimary, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: themeData.textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.w800, + fontSize: 18, + ), + ), + description == null + ? Container() + : Row( + children: [ + Icon( + iconDescription, + color: themeData.colorScheme.primary, + size: 15, + ), + const SizedBox(width: 3), + Text( + description!, + style: themeData.textTheme.bodySmall?.copyWith( + color: themeData.colorScheme.primary, + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ], + ), + ), + const Spacer(), + BlocBuilder( + builder: (context, state) { + return IconButton( + onPressed: () { + context.read().changeHabitExpanded(index); + }, + icon: Icon( + state.habits[index].isExpanded + ? Icons.arrow_drop_up + : Icons.arrow_drop_down, + color: themeData.colorScheme.primary, + ), + ); + }, + ), + ], + ); + } +} + +class MarkAsDoneButton extends StatefulWidget { + final int index; + final SelectedDay state; + const MarkAsDoneButton({super.key, required this.index, required this.state}); + + @override + State createState() => _MarkAsDoneButtonState(); +} + +class _MarkAsDoneButtonState extends State { + late ConfettiController confettiController; + Path drawStar(Size size) { + double degToRad(double deg) => deg * (pi / 180.0); + + const numberOfPoints = 5; + final halfWidth = size.width / 2; + final externalRadius = halfWidth; + final internalRadius = halfWidth / 2.5; + final degreesPerStep = degToRad(360 / numberOfPoints); + final halfDegreesPerStep = degreesPerStep / 2; + final path = Path(); + final fullAngle = degToRad(360); + path.moveTo(size.width, halfWidth); + + for (double step = 0; step < fullAngle; step += degreesPerStep) { + path.lineTo(halfWidth + externalRadius * cos(step), + halfWidth + externalRadius * sin(step)); + path.lineTo(halfWidth + internalRadius * cos(step + halfDegreesPerStep), + halfWidth + internalRadius * sin(step + halfDegreesPerStep)); + } + path.close(); + return path; + } + + @override + void initState() { + super.initState(); + confettiController = + ConfettiController(duration: const Duration(seconds: 1)); + } + + @override + void dispose() { + confettiController.dispose(); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Stack( + children: [ + ElevatedButton( + onPressed: () async { + if (!widget.state.habits[widget.index].isDone) { + confettiController.play(); + } + await context + .read() + .changeHabitDone(widget.index); + }, + child: Text( + widget.state.habits[widget.index].isDone + ? tr.undo_habit + : tr.mark_as_done, + style: themeData.textTheme.bodyMedium?.copyWith( + color: themeData.colorScheme.primary, + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + ), + ConfettiWidget( + confettiController: confettiController, + blastDirectionality: BlastDirectionality.explosive, + shouldLoop: false, + colors: [ + themeData.colorScheme.primary, + ], + createParticlePath: drawStar, + ), + ], + ); + } +} + +class HabitItemCalendarItem extends StatelessWidget { + final DateTime day; + final List doneOn; + const HabitItemCalendarItem( + {super.key, required this.day, required this.doneOn}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + String dayString = DateFormat.d(locale.toString()).format(day); + return Center( + child: Container( + decoration: BoxDecoration( + color: doneOn.contains(day) + ? themeData.colorScheme.primary + : themeData.colorScheme.surface, + borderRadius: BorderRadius.circular(10), + ), + margin: const EdgeInsets.all(2), + child: Center( + child: Text( + dayString, + style: themeData.textTheme.bodyMedium?.copyWith( + color: doneOn.contains(day) + ? themeData.colorScheme.onPrimary + : themeData.colorScheme.primary, + fontWeight: FontWeight.w600, + fontSize: 15, + ), + ), + ), + ), + ); + } +} + +class EditHabitButton extends StatelessWidget { + final String id; + const EditHabitButton({super.key, required this.id}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return TextButton( + onPressed: () { + context.push('/habits/$id'); + }, + child: Text( + tr.edit, + style: themeData.textTheme.bodyMedium?.copyWith( + color: themeData.colorScheme.primary, + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + ); + } +} + +class HabitItemExpanded extends StatelessWidget { + final int index; + const HabitItemExpanded({super.key, required this.index}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + Rabbit habit = state.habits[index]; + return AnimatedSize( + duration: const Duration(milliseconds: 800), + curve: Curves.easeInOut, + child: habit.isExpanded + ? Column( + children: [ + habit.description == '' ? Container() : const Divider(), + habit.description == '' + ? Container() + : Text( + habit.description, + textAlign: TextAlign.center, + style: Theme.of(context) + .textTheme + .bodyMedium + ?.copyWith( + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + const Divider(), + TableCalendar( + rowHeight: 35, + startingDayOfWeek: StartingDayOfWeek.monday, + locale: locale.toString(), + firstDay: DateTime.utc(2023, 01, 01), + lastDay: DateTime.now(), + focusedDay: // now - month + DateTime.now(), + headerVisible: false, + calendarStyle: const CalendarStyle( + cellMargin: EdgeInsets.all(2), + ), + availableGestures: AvailableGestures.horizontalSwipe, + daysOfWeekHeight: 20, + calendarBuilders: CalendarBuilders( + outsideBuilder: (context, day, focusedDay) { + return HabitItemCalendarItem( + day: day, doneOn: habit.doneOn); + }, + defaultBuilder: (context, day, focusedDay) { + return HabitItemCalendarItem( + day: day, doneOn: habit.doneOn); + }, + todayBuilder: (context, day, focusedDay) { + return HabitItemCalendarItem( + day: day, doneOn: habit.doneOn); + }, + ), + ), + const Divider(), + Container( + child: MediaQuery.of(context).size.width > 350 + ? Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + EditHabitButton(id: habit.id), + MarkAsDoneButton(index: index, state: state) + ]) + : Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + EditHabitButton(id: habit.id), + MarkAsDoneButton(index: index, state: state) + ], + ), + ), + ], + ) + : Container(), + ); + }, + ); + } +} + +class HabitItem extends StatelessWidget { + final String title; + final String? description; + final IconData icon; + final IconData? iconDescription; + final int index; + const HabitItem({ + super.key, + required this.title, + this.description, + required this.icon, + this.iconDescription, + required this.index, + }); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Padding( + padding: defaultTopPadding / 2, + child: AnimatedSize( + duration: const Duration(milliseconds: 500), + child: GestureDetector( + onTap: () { + context.read().changeHabitExpanded(index); + }, + child: Container( + decoration: BoxDecoration( + color: themeData.colorScheme.surfaceVariant, + borderRadius: BorderRadius.circular(15), + ), + padding: const EdgeInsets.all(15), + child: Column( + children: [ + HabitItemVisible( + title: title, + description: description, + icon: icon, + iconDescription: iconDescription, + index: index, + ), + HabitItemExpanded(index: index), + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart new file mode 100644 index 0000000..733c78e --- /dev/null +++ b/lib/screens/login_screen.dart @@ -0,0 +1,178 @@ +import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; +import 'package:go_router/go_router.dart'; +import 'package:sign_button/sign_button.dart'; +import 'package:Rabbit_Habit/config/constraint.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +final GetIt getIt = GetIt.instance; +final tr = getIt.get(); +const List screenContent = [ + WelcomeToPicture(), + WelcomeToText(), + SizedBox( + height: 25, + ), + BrandQuoteText(), + SignInButtons(), + +]; + +class LoginScreen extends StatelessWidget { + const LoginScreen({super.key}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Scaffold( + backgroundColor: themeData.colorScheme.background, + body: SafeArea( + child: Center( + child: MediaQuery.of(context).size.height > 500 + ? const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: screenContent, + ) + : ListView( + children: screenContent, + ), + ), + ), + ); + } +} + + +class WelcomeToPicture extends StatelessWidget { + const WelcomeToPicture({super.key}); + + @override + Widget build(BuildContext context) { + AssetImage rabbitAsset = AssetImage('images/rabbit.png'); + Image image = Image(image: rabbitAsset, width: 400, height: 400); + return Container( + child: image, + ); + } +} + + +class WelcomeToText extends StatelessWidget { + const WelcomeToText({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + + return Column( + children: [ + Padding( + padding: defaultTopPadding, + child: Text( + tr.welcome_to, + style: themeData.textTheme.bodyMedium?.copyWith( + color: themeData.colorScheme.outline, + fontSize: 30, + ), + ), + ), + Text( + tr.app_name, + style: TextStyle( + fontFamily: 'Montserrat', + color: Colors.blue, + height: 1, + fontSize: 50, + fontWeight: FontWeight.bold, + ), + ), + ], + ); + } +} + +class BrandQuoteText extends StatelessWidget { + const BrandQuoteText({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + final brandQuoteTextStyle = themeData.textTheme.bodyMedium?.copyWith( + color: themeData.colorScheme.outline, + fontSize: 25, + ); + final betterLifeTextStyle = themeData.textTheme.bodyMedium?.copyWith( + color: Colors.blue, + fontWeight: FontWeight.bold, + decorationThickness: 0.5, + decorationColor: themeData.colorScheme.primary, + fontSize: 25, + ); + + return Padding( + padding: defaultHorizontalViewPadding, + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + text: tr.auth_brand_quote_text1, + style: brandQuoteTextStyle, + children: [ + TextSpan( + text: tr.for_a_better_life, + style: betterLifeTextStyle, + ), + ], + ), + ), + ); + } // D:\studiNerd\Operation WTF went wrong\CPD\Rabbit_Habit\ios\Runner\Assets.xcassets\AppIcon.appiconset +} + +class SignInCustomButton extends StatelessWidget { + final ButtonType type; + final Function() onPressed; + const SignInCustomButton( + {super.key, required this.type, required this.onPressed}); + + @override + Widget build(BuildContext context) { + return SignInButton( + buttonType: type, + buttonSize: ButtonSize.medium, + onPressed: onPressed, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + ); + } +} + +class SignInButtons extends StatelessWidget { + const SignInButtons({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + + return Column( + children: [ + Padding( + padding: defaultTopPadding, + child: InkWell( + onTap: () { + context.go('/home'); + }, + child: Text( + tr.continue_to_sign, + style: themeData.textTheme.bodyMedium?.copyWith( + color: themeData.colorScheme.outline, + fontSize: 15, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/screens/rabbit_screen.dart b/lib/screens/rabbit_screen.dart new file mode 100644 index 0000000..7ef6e9e --- /dev/null +++ b/lib/screens/rabbit_screen.dart @@ -0,0 +1,407 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:get_it/get_it.dart'; +import 'package:go_router/go_router.dart'; +import 'package:Rabbit_Habit/blocs/new_habit_cubit.dart'; +import 'package:Rabbit_Habit/config/constraint.dart'; +import 'package:Rabbit_Habit/models/new_habit_model.dart'; +import 'package:Rabbit_Habit/repo/icons_repository.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +final GetIt getIt = GetIt.instance; +final tr = getIt.get(); + +class HabitScreen extends StatefulWidget { + final String? id; + const HabitScreen({super.key, required this.id}); + + @override + State createState() => _HabitScreenState(); +} + +class _HabitScreenState extends State { + TextEditingController nameController = TextEditingController(); + TextEditingController descriptionController = TextEditingController(); + onSaveHabitPressed(ThemeData themeData) async { + nameController.text = nameController.text.trim(); + descriptionController.text = descriptionController.text.trim(); + if (nameController.text.isNotEmpty) { + if (widget.id == null) { + await context + .read() + .addNewHabit(nameController.text, descriptionController.text, + context.read().state.iconCodePoint) + .then((value) { + while (context.canPop()) { + context.pop(); + } + context.pushReplacement('/home'); + }); + } else { + await context + .read() + .updateHabit( + widget.id!, + nameController.text, + descriptionController.text, + context.read().state.iconCodePoint, + ) + .then((value) { + while (context.canPop()) { + context.pop(); + } + context.pushReplacement('/home'); + }); + } + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + behavior: SnackBarBehavior.floating, + content: Text( + tr.name_cannot_be_empty, + textAlign: TextAlign.center, + style: TextStyle( + color: themeData.colorScheme.onSurface, + fontSize: 15, + fontWeight: FontWeight.w700, + ), + ), + ), + ); + } + } + + @override + void initState() { + if (widget.id != null) { + context.read().getHabitToEdit(widget.id!).then((value) { + nameController.text = context.read().state.name; + descriptionController.text = + context.read().state.description; + }); + } + getIt.registerSingleton(onSaveHabitPressed, + instanceName: 'onSaveHabitPressed'); + super.initState(); + } + + @override + void dispose() { + getIt.unregister( + instanceName: 'onSaveHabitPressed', + ); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Scaffold( + backgroundColor: themeData.colorScheme.background, + appBar: AppBar( + backgroundColor: themeData.colorScheme.background, + elevation: 0, + title: Text( + widget.id == null ? tr.new_rabbit : tr.edit_rabbit, + style: TextStyle( + color: themeData.primaryColor, + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + ), + body: SafeArea( + child: Padding( + padding: defaultHorizontalViewPadding, + child: ListView( + children: [ + HabitTextField(controller: nameController, hintText: tr.name), + HabitTextField( + controller: descriptionController, + hintText: tr.description, + last: true, + ), + const HabitIconPicker(), + const SaveHabitButton(), + RemoveButton(id: widget.id) + ], + ), + ), + ), + ); + } +} + +class HabitTextField extends StatelessWidget { + final TextEditingController controller; + final String hintText; + final bool last; + const HabitTextField( + {super.key, + required this.controller, + required this.hintText, + this.last = false}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Padding( + padding: defaultTopPadding / 2, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + hintText, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + const SizedBox( + height: 5, + ), + TextFormField( + controller: controller, + textCapitalization: TextCapitalization.sentences, + onTapOutside: (event) { + FocusScope.of(context).unfocus(); + }, + textInputAction: last ? TextInputAction.done : TextInputAction.next, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w700, + ), + cursorColor: themeData.colorScheme.primary, + cursorWidth: 3, + decoration: InputDecoration( + isDense: true, + contentPadding: const EdgeInsets.all(10), + fillColor: themeData.colorScheme.surfaceVariant, + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide( + color: themeData.colorScheme.surfaceVariant, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide( + color: themeData.colorScheme.surfaceVariant, + ), + ), + ), + ), + ], + ), + ); + } +} + +class HabitIconItem extends StatelessWidget { + final int index; + final int iconCodePoint; + const HabitIconItem( + {super.key, required this.index, required this.iconCodePoint}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return GestureDetector( + onTap: () { + context.read().setNewHabitIconCodePoint( + IconsRepository().getFeaturedIcons()[index]); + }, + child: Container( + decoration: BoxDecoration( + color: iconCodePoint == IconsRepository().getFeaturedIcons()[index] + ? themeData.colorScheme.primary + : themeData.colorScheme.surfaceVariant, + borderRadius: BorderRadius.circular(15), + ), + child: Icon( + IconsRepository().getIconData( + IconsRepository().getFeaturedIcons()[index], + ), + color: iconCodePoint == IconsRepository().getFeaturedIcons()[index] + ? themeData.colorScheme.onPrimary + : themeData.colorScheme.onSurface, + ), + ), + ); + } +} + +class HabitIconPicker extends StatelessWidget { + const HabitIconPicker({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + tr.icon, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + ), + ), + const SizedBox( + height: 5, + ), + GridView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: IconsRepository().getFeaturedIcons().length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: MediaQuery.of(context).size.width > 800 ? 13 : 7, + mainAxisSpacing: 10, + crossAxisSpacing: 10, + ), + itemBuilder: (context, index) { + return BlocBuilder( + buildWhen: (previous, current) { + // build only widgets that changed + return previous.iconCodePoint == + IconsRepository().getFeaturedIcons()[index] || + current.iconCodePoint == + IconsRepository().getFeaturedIcons()[index]; + }, + builder: (context, state) { + return HabitIconItem( + index: index, + iconCodePoint: state.iconCodePoint, + ); + }, + ); + }, + ), + ], + ); + } +} + +class SaveHabitButton extends StatelessWidget { + const SaveHabitButton({super.key}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Padding( + padding: defaultTopPadding, + child: ElevatedButton( + onPressed: () { + getIt.get( + instanceName: 'onSaveHabitPressed', + )(themeData); + }, + style: ElevatedButton.styleFrom( + backgroundColor: themeData.colorScheme.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.all(15), + ), + child: Text( + tr.save, + style: TextStyle( + color: themeData.colorScheme.onPrimary, + fontSize: 18, + fontWeight: FontWeight.w700, + ), + ), + ), + ); + } +} + +class RemoveButton extends StatelessWidget { + final String? id; + const RemoveButton({super.key, this.id}); + + @override + Widget build(BuildContext context) { + ThemeData themeData = Theme.of(context); + return Column( + children: [ + id == null + ? const SizedBox() + : const SizedBox( + height: 10, + ), + id == null + ? const SizedBox() + : GestureDetector( + onTap: () async { + // show dialog + showDialog( + context: context, + builder: (contextDialog) { + return AlertDialog( + backgroundColor: themeData.colorScheme.surface, + title: Text( + tr.remove_habit_confirmation, + textAlign: TextAlign.center, + style: TextStyle( + color: themeData.colorScheme.onSurface, + fontSize: 18, + fontWeight: FontWeight.w600, + fontFamily: 'Inter', + ), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.pop(contextDialog); + }, + child: Text( + tr.cancel, + style: TextStyle( + color: themeData.colorScheme.onSurface, + fontSize: 18, + fontWeight: FontWeight.w700, + ), + ), + ), + TextButton( + onPressed: () async { + await context + .read() + .deleteHabit( + id!, + ) + .then((value) { + Navigator.pop(contextDialog); + while (context.canPop()) { + context.pop(); + } + context.pushReplacement('/home'); + }); + }, + child: Text( + tr.remove_rabbit, + style: TextStyle( + color: themeData.colorScheme.primary, + fontSize: 18, + fontWeight: FontWeight.w700, + ), + ), + ), + ], + ); + }, + ); + }, + child: Text( + tr.remove_rabbit, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ); + } +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..de0ed3e --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "rabbitHabit") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "Dexter.rabbitHabit") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/main.cc b/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/my_application.cc b/linux/my_application.cc new file mode 100644 index 0000000..15915cd --- /dev/null +++ b/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "rabbitHabit"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "rabbitHabit"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/linux/my_application.h b/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..e777c67 --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) +} diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..423a5de --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* rabbit_habit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "rabbit_habit.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* rabbit_habit.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* rabbit_habit.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = imdexter.com.rabbitHabit.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rabbit_habit.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/rabbit_habit"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = imdexter.com.rabbitHabit.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rabbit_habit.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/rabbit_habit"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = imdexter.com.rabbitHabit.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rabbit_habit.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/rabbit_habit"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a3575d5 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..f4f7680 --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "rabbit.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/rabbit.png new file mode 100644 index 0000000000000000000000000000000000000000..2d855ca5859542b3b4c768844d2e50264b8001d8 GIT binary patch literal 33424 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 + + + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..704ec65 --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = rabbit_habit + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = imdexter.com.rabbitHabit + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 imdexter.com. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..5418c9f --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..a610f11 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,775 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + bloc: + dependency: "direct main" + description: + name: bloc + sha256: "3820f15f502372d979121de1f6b97bfcf1630ebff8fe1d52fb2b0bfa49be5b49" + url: "https://pub.dev" + source: hosted + version: "8.1.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b" + url: "https://pub.dev" + source: hosted + version: "2.4.7" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 + url: "https://pub.dev" + source: hosted + version: "7.2.11" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309 + url: "https://pub.dev" + source: hosted + version: "8.8.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: feee43a5c05e7b3199bb375a86430b8ada1b04104f2923d0e03cc01ca87b6d84 + url: "https://pub.dev" + source: hosted + version: "4.9.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + confetti: + dependency: "direct main" + description: + name: confetti + sha256: "979aafde2428c53947892c95eb244466c109c129b7eee9011f0a66caaca52267" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + url: "https://pub.dev" + source: hosted + version: "1.0.6" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + url: "https://pub.dev" + source: hosted + version: "2.3.4" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flex_color_scheme: + dependency: "direct main" + description: + name: flex_color_scheme + sha256: "32914024a4f404d90ff449f58d279191675b28e7c08824046baf06826e99d984" + url: "https://pub.dev" + source: hosted + version: "7.3.1" + flex_seed_scheme: + dependency: transitive + description: + name: flex_seed_scheme + sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae + url: "https://pub.dev" + source: hosted + version: "8.1.3" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: "6c5031daae12c7072b3a87eff98983076434b4889ef2a44384d0cae3f82372ba" + url: "https://pub.dev" + source: hosted + version: "2.4.6" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + url: "https://pub.dev" + source: hosted + version: "2.4.1" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + get_it: + dependency: "direct main" + description: + name: get_it + sha256: f79870884de16d689cf9a7d15eedf31ed61d750e813c538a6efb92660fea83c3 + url: "https://pub.dev" + source: hosted + version: "7.6.4" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + go_router: + dependency: "direct main" + description: + name: go_router + sha256: "3b40e751eaaa855179b416974d59d29669e750d2e50fcdb2b37f1cb0ca8c803a" + url: "https://pub.dev" + source: hosted + version: "13.0.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + hive: + dependency: "direct main" + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_flutter: + dependency: "direct main" + description: + name: hive_flutter + sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc + url: "https://pub.dev" + source: hosted + version: "1.1.0" + hive_generator: + dependency: "direct main" + description: + name: hive_generator + sha256: "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: "direct main" + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969 + url: "https://pub.dev" + source: hosted + version: "6.7.1" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + platform: + dependency: transitive + description: + name: platform + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + url: "https://pub.dev" + source: hosted + version: "3.1.4" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + provider: + dependency: transitive + description: + name: provider + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + url: "https://pub.dev" + source: hosted + version: "6.1.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + url: "https://pub.dev" + source: hosted + version: "1.2.3" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sign_button: + dependency: "direct main" + description: + name: sign_button + sha256: "03529ce0d98551f76e4cff9a9be35e28bec784a5406da80d087fa043d4625643" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + simple_gesture_detector: + dependency: transitive + description: + name: simple_gesture_detector + sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + table_calendar: + dependency: "direct main" + description: + name: table_calendar + sha256: "1e3521a3e6d3fc7f645a58b135ab663d458ab12504f1ea7f9b4b81d47086c478" + url: "https://pub.dev" + source: hosted + version: "3.0.9" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..c6c5a50 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,115 @@ +name: Rabbit_Habit +description: "Track, manage and improve your habits for a better life by Martin Gogolowicz" +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=3.2.0-42.1.beta <4.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + flutter_bloc: ^8.1.3 + flutter_localizations: + sdk: flutter + intl: any + hive_flutter: ^1.1.0 + flex_color_scheme: ^7.3.1 + sign_button: ^2.0.5 + get_it: ^7.6.0 + go_router: ^13.0.1 + table_calendar: ^3.0.9 + bloc: ^8.1.2 + confetti: ^0.7.0 + freezed_annotation: ^2.4.1 + json_annotation: ^4.8.1 + hive: ^2.2.3 + hive_generator: ^2.0.1 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^3.0.1 + build_runner: ^2.4.6 + freezed: ^2.4.2 + json_serializable: ^6.7.1 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + generate: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + fonts: + - family: Oxygen + fonts: + - asset: assets/fonts/Oxygen-Light.ttf + weight: 300 + - asset: assets/fonts/Oxygen-Regular.ttf + - asset: assets/fonts/Oxygen-Bold.ttf + weight: 700 + + - family: MontserratAlternates + fonts: + - asset: assets/fonts/MontserratAlternates-Light.ttf + weight: 300 + - asset: assets/fonts/MontserratAlternates-Regular.ttf + - asset: assets/fonts/MontserratAlternates-Bold.ttf + weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..7b4cd90 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:rabbit_habit/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..34d4838 --- /dev/null +++ b/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + Rabbit habit + + + + + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..8a06edd --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "Rabbit_Habit", + "short_name": "RH", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": ""A new Flutter project."", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "rabbit.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "rabbit.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "rabbit.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "rabbit.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/web/rabbit.png b/web/rabbit.png new file mode 100644 index 0000000000000000000000000000000000000000..2d855ca5859542b3b4c768844d2e50264b8001d8 GIT binary patch literal 33424 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:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..930d207 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..88a6c5a --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "Dexter" "\0" + VALUE "FileDescription", "rabbitHabit" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "rabbitHabit" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 Dexter. All rights reserved." "\0" + VALUE "OriginalFilename", "rabbitHabit.exe" "\0" + VALUE "ProductName", "rabbitHabit" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..d03a967 --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"rabbitHabit", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..a42ea76 --- /dev/null +++ b/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..b2b0873 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_