igen
@ -5,12 +5,14 @@
|
||||
|
||||
#### Nem hivatalos e-napló alkalmazás az eKRÉTA rendszerhez
|
||||
|
||||
[](https://github.com/filc/naplo/releases) [](http://filcnaplo.hu/discord)
|
||||
|
||||
## Setup
|
||||
|
||||
### Clone the project
|
||||
|
||||
```sh
|
||||
git clone --recursive https://github.com/refilc/naplo
|
||||
git clone --recursive https://github.com/filc/naplo
|
||||
cd naplo
|
||||
```
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools" package="hu.filc.naplo">
|
||||
<application android:label="Filc Napló" tools:replace="android:label" android:icon="@mipmap/ic_launcher"
|
||||
<application android:label="reFilc" tools:replace="android:label" android:icon="@mipmap/ic_launcher"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
<activity android:exported="true" android:name=".MainActivity"
|
||||
android:launchMode="singleTop" android:theme="@style/LaunchTheme"
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-hdpi/splash.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 4.1 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-mdpi/splash.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-v21/background.png
Normal file
After Width: | Height: | Size: 69 B |
@ -1,7 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/launch_gradient_background" />
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@mipmap/ic_splash"/>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
After Width: | Height: | Size: 12 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-xhdpi/splash.png
Normal file
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 24 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-xxhdpi/splash.png
Normal file
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 38 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable-xxxhdpi/splash.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
filcnaplo/android/app/src/main/res/drawable/background.png
Normal file
After Width: | Height: | Size: 69 B |
@ -1,7 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/launch_gradient_background" />
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@mipmap/ic_splash"/>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@mipmap/ic_launcher_background" />
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@mipmap/ic_launcher_monochrome" />
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 16 KiB |
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1F5B50</color>
|
||||
<color name="ic_launcher_background">#3D7BF4</color>
|
||||
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
|
@ -5,7 +5,10 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
Flutter draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
@ -16,12 +19,10 @@
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Android.AppWidget.Container" parent="android:Widget">
|
||||
<item name="android:id">@android:id/background</item>
|
||||
<item name="android:background">?android:attr/colorBackground</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Android.AppWidget.InnerView" parent="android:Widget">
|
||||
<item name="android:background">?android:attr/colorBackground</item>
|
||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
||||
|
@ -48,6 +48,6 @@ subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
4
filcnaplo/android/filc3.properties
Normal file
@ -0,0 +1,4 @@
|
||||
storePassword=filc3fix
|
||||
keyPassword=filc3fix
|
||||
keyAlias=upload
|
||||
storeFile=C:/Users/Peti/upload-keystore.jks
|
@ -1,4 +1,4 @@
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
org.gradle.java.home=C:\Program Files\\Java\\jdk-14.0.2
|
||||
org.gradle.java.home=C:\\Program Files\\Java\\jdk-14.0.2
|
||||
|
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 53 KiB |
@ -495,8 +495,8 @@
|
||||
3127F7A028EAEDE300C2EFB3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = AppIcon;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
@ -537,8 +537,8 @@
|
||||
3127F7A128EAEDE300C2EFB3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = AppIcon;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
@ -577,8 +577,8 @@
|
||||
3127F7A228EAEDE300C2EFB3 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = AppIcon;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
|
After Width: | Height: | Size: 593 KiB |
After Width: | Height: | Size: 590 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 931 B |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 69 B |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 31 KiB |
@ -38,7 +38,7 @@
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="512" height="512"/>
|
||||
<image name="LaunchBackground" width="1080" height="1920"/>
|
||||
<image name="LaunchImage" width="500" height="500"/>
|
||||
<image name="LaunchBackground" width="1" height="1"/>
|
||||
</resources>
|
||||
</document>
|
@ -1,71 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Filc Napló</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||
<key>NSSupportsLiveActivities</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>fetch</string>
|
||||
<string>processing</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.transistorsoft.fetch</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Filc Napló</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||
<key>NSSupportsLiveActivities</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>fetch</string>
|
||||
<string>processing</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.transistorsoft.fetch</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -1,9 +1,21 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
enum AccentColor { filc, blue, green, lime, yellow, orange, red, pink, purple, adaptive, custom }
|
||||
enum AccentColor {
|
||||
filc,
|
||||
blue,
|
||||
green,
|
||||
lime,
|
||||
yellow,
|
||||
orange,
|
||||
red,
|
||||
pink,
|
||||
purple,
|
||||
adaptive,
|
||||
custom
|
||||
}
|
||||
|
||||
Map<AccentColor, Color> accentColorMap = {
|
||||
AccentColor.filc: const Color(0xff20AC9B),
|
||||
AccentColor.filc: Color.fromARGB(255, 61, 123, 244),
|
||||
AccentColor.blue: Colors.blue.shade300,
|
||||
AccentColor.green: Colors.green.shade400,
|
||||
AccentColor.lime: Colors.lightGreen.shade400,
|
||||
@ -12,6 +24,6 @@ Map<AccentColor, Color> accentColorMap = {
|
||||
AccentColor.red: Colors.red.shade300,
|
||||
AccentColor.pink: Colors.pink.shade300,
|
||||
AccentColor.purple: Colors.purple.shade300,
|
||||
AccentColor.adaptive: const Color(0xff20AC9B),
|
||||
AccentColor.custom: const Color(0xff20AC9B),
|
||||
AccentColor.adaptive: const Color(0x003d7bf4),
|
||||
AccentColor.custom: const Color(0x003d7bf4),
|
||||
};
|
||||
|
@ -7,7 +7,8 @@ import 'package:filcnaplo/theme/colors/light_mobile.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class AppColors {
|
||||
static ThemeAppColors of(BuildContext context) => fromBrightness(Theme.of(context).brightness);
|
||||
static ThemeAppColors of(BuildContext context) =>
|
||||
fromBrightness(Theme.of(context).brightness);
|
||||
|
||||
static ThemeAppColors fromBrightness(Brightness brightness) {
|
||||
if (Platform.isAndroid || Platform.isIOS) {
|
||||
|
@ -19,11 +19,11 @@ class DarkMobileAppColors implements ThemeAppColors {
|
||||
@override
|
||||
final green = const Color(0xff32D74B);
|
||||
@override
|
||||
final filc = const Color(0xff29826F);
|
||||
final filc = const Color(0x003d7bf4);
|
||||
@override
|
||||
final teal = const Color(0xff64D2FF);
|
||||
@override
|
||||
final blue = const Color(0xff0A84FF);
|
||||
final blue = Color.fromARGB(255, 255, 10, 10);
|
||||
@override
|
||||
final indigo = const Color(0xff5E5CE6);
|
||||
@override
|
||||
|
@ -19,7 +19,7 @@ class LightMobileAppColors implements ThemeAppColors {
|
||||
@override
|
||||
final green = const Color(0xff34C759);
|
||||
@override
|
||||
final filc = const Color(0xff247665);
|
||||
final filc = const Color(0x003d7bf4);
|
||||
@override
|
||||
final teal = const Color(0xff5AC8FA);
|
||||
@override
|
||||
|
@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
|
||||
homepage: https://filcnaplo.hu
|
||||
publish_to: "none"
|
||||
|
||||
version: 3.5.0+193
|
||||
version: 3.5.1+194
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.0 <3.0.0"
|
||||
@ -25,9 +25,9 @@ dependencies:
|
||||
|
||||
flutter_localizations:
|
||||
sdk: flutter
|
||||
i18n_extension: ^6.0.0
|
||||
i18n_extension: ^9.0.0
|
||||
sqflite: ^2.2.0+2
|
||||
intl: ^0.17.0
|
||||
intl: ^0.18.0
|
||||
provider: ^5.0.0
|
||||
http: ^0.13.3
|
||||
uuid: ^3.0.4
|
||||
@ -39,8 +39,8 @@ dependencies:
|
||||
path_provider: ^2.0.2
|
||||
permission_handler: ^10.2.0
|
||||
share_plus: ^5.0.0
|
||||
connectivity_plus: ^3.0.2
|
||||
flutter_displaymode: ^0.4.0
|
||||
connectivity_plus: ^4.0.1
|
||||
flutter_displaymode: ^0.6.0
|
||||
quick_actions: ^1.0.1
|
||||
animated_list_plus: ^0.5.0
|
||||
dynamic_color: ^1.2.2
|
||||
@ -67,12 +67,12 @@ dependencies:
|
||||
image_crop: ^0.4.1
|
||||
animations: ^2.0.1
|
||||
background_fetch: ^1.1.5
|
||||
flutter_local_notifications: ^13.0.0
|
||||
flutter_local_notifications: ^14.1.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_lints: ^2.0.1
|
||||
# flutter_launcher_icons: ^0.9.0
|
||||
# flutter_native_splash: ^1.2.0
|
||||
flutter_launcher_icons: "^0.13.1"
|
||||
#flutter_native_splash: "^2.3.0"
|
||||
sqflite_common_ffi: ^2.0.0+3
|
||||
|
||||
flutter:
|
||||
@ -149,14 +149,14 @@ flutter:
|
||||
|
||||
flutter_icons:
|
||||
image_path: "assets/icons/ic_launcher.png"
|
||||
adaptive_icon_background: "#1F5B50"
|
||||
adaptive_icon_background: "#3D7BF4"
|
||||
adaptive_icon_foreground: "assets/icons/ic_launcher_foreground.png"
|
||||
android: true
|
||||
ios: true
|
||||
remove_alpha_ios: true
|
||||
|
||||
flutter_native_splash:
|
||||
color: "#1F5B50"
|
||||
color: "#3D7BF4"
|
||||
image: "assets/icons/ic_splash.png"
|
||||
android: true
|
||||
android_gravity: center
|
||||
|
47
filcnaplo_desktop_ui/.gitignore
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# 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
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# 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
|
||||
pubspec.lock
|
@ -50,7 +50,8 @@ class SettingsScreen extends StatefulWidget {
|
||||
_SettingsScreenState createState() => _SettingsScreenState();
|
||||
}
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProviderStateMixin {
|
||||
class _SettingsScreenState extends State<SettingsScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
int devmodeCountdown = 3;
|
||||
final bool __ss = false; // secret settings
|
||||
|
||||
@ -90,11 +91,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
}
|
||||
|
||||
accountTiles.add(AccountTile(
|
||||
name: Text(!settings.presentationMode ? account.name : "Béla", style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
username: Text(!settings.presentationMode ? account.username : "72469696969"),
|
||||
name: Text(!settings.presentationMode ? account.name : "Béla",
|
||||
style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
username:
|
||||
Text(!settings.presentationMode ? account.username : "72469696969"),
|
||||
profileImage: ProfileImage(
|
||||
name: _firstName,
|
||||
backgroundColor: !settings.presentationMode ? ColorUtils.stringToColor(account.name) : Theme.of(context).colorScheme.secondary,
|
||||
backgroundColor: !settings.presentationMode
|
||||
? ColorUtils.stringToColor(account.name)
|
||||
: Theme.of(context).colorScheme.secondary,
|
||||
role: account.role,
|
||||
),
|
||||
onTap: () {
|
||||
@ -133,7 +138,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
]);
|
||||
}
|
||||
|
||||
void _openDKT(User u) => tabs.launch("https://dkttanulo.e-kreta.hu/sso?id_token=${kretaClient.idToken}",
|
||||
void _openDKT(User u) => tabs.launch(
|
||||
"https://dkttanulo.e-kreta.hu/sso?id_token=${kretaClient.idToken}",
|
||||
customTabsOption: tabs.CustomTabsOption(
|
||||
toolbarColor: Theme.of(context).scaffoldBackgroundColor,
|
||||
showPageTitle: true,
|
||||
@ -142,7 +148,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_hideContainersController = AnimationController(vsync: this, duration: const Duration(milliseconds: 200));
|
||||
_hideContainersController = AnimationController(
|
||||
vsync: this, duration: const Duration(milliseconds: 200));
|
||||
}
|
||||
|
||||
@override
|
||||
@ -159,8 +166,14 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
firstName = "Béla";
|
||||
}
|
||||
|
||||
String startPageTitle = SettingsHelper.localizedPageTitles()[settings.startPage] ?? "?";
|
||||
String themeModeText = {ThemeMode.light: "light".i18n, ThemeMode.dark: "dark".i18n, ThemeMode.system: "system".i18n}[settings.theme] ?? "?";
|
||||
String startPageTitle =
|
||||
SettingsHelper.localizedPageTitles()[settings.startPage] ?? "?";
|
||||
String themeModeText = {
|
||||
ThemeMode.light: "light".i18n,
|
||||
ThemeMode.dark: "dark".i18n,
|
||||
ThemeMode.system: "system".i18n
|
||||
}[settings.theme] ??
|
||||
"?";
|
||||
String languageText = SettingsHelper.langMap[settings.language] ?? "?";
|
||||
String vibrateTitle = {
|
||||
VibrationStrength.off: "voff".i18n,
|
||||
@ -200,7 +213,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
// Updates
|
||||
if (updateProvider.available)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
child: PanelButton(
|
||||
onPressed: () => _openUpdates(context),
|
||||
@ -210,7 +224,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
updateProvider.releases.first.tag,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
color:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -231,7 +246,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// General Settings
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("general".i18n),
|
||||
child: Column(
|
||||
@ -261,7 +277,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
},
|
||||
title: Text("rounding".i18n),
|
||||
leading: const Icon(FeatherIcons.gitCommit),
|
||||
trailing: Text((settings.rounding / 10).toStringAsFixed(1)),
|
||||
trailing: Text((settings.rounding / 10)
|
||||
.toStringAsFixed(1)),
|
||||
),
|
||||
PanelButton(
|
||||
onPressed: () {
|
||||
@ -280,16 +297,27 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
},
|
||||
title: Text(
|
||||
"bell_delay".i18n,
|
||||
style: TextStyle(color: AppColors.of(context).text.withOpacity(settings.bellDelayEnabled ? 1.0 : .5)),
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.bellDelayEnabled
|
||||
? 1.0
|
||||
: .5)),
|
||||
),
|
||||
leading: settings.bellDelayEnabled
|
||||
? const Icon(FeatherIcons.bell)
|
||||
: Icon(FeatherIcons.bellOff, color: AppColors.of(context).text.withOpacity(.25)),
|
||||
: Icon(FeatherIcons.bellOff,
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(.25)),
|
||||
trailingDivider: true,
|
||||
trailing: Switch(
|
||||
onChanged: (v) => settings.update(bellDelayEnabled: v),
|
||||
onChanged: (v) =>
|
||||
settings.update(bellDelayEnabled: v),
|
||||
value: settings.bellDelayEnabled,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -299,18 +327,23 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
if (kDebugMode)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: const Text("Debug"),
|
||||
child: Column(
|
||||
children: [
|
||||
PanelButton(
|
||||
title: const Text("Subject Icon Gallery"),
|
||||
leading: const Icon(CupertinoIcons.rectangle_3_offgrid_fill),
|
||||
leading: const Icon(CupertinoIcons
|
||||
.rectangle_3_offgrid_fill),
|
||||
trailing: const Icon(Icons.arrow_forward),
|
||||
onPressed: () {
|
||||
Navigator.of(context, rootNavigator: true).push(
|
||||
CupertinoPageRoute(builder: (context) => const SubjectIconGallery()),
|
||||
Navigator.of(context, rootNavigator: true)
|
||||
.push(
|
||||
CupertinoPageRoute(
|
||||
builder: (context) =>
|
||||
const SubjectIconGallery()),
|
||||
);
|
||||
},
|
||||
)
|
||||
@ -322,7 +355,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
// Secret Settings
|
||||
if (__ss)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("secret".i18n),
|
||||
child: Column(
|
||||
@ -331,9 +365,14 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n, style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) {
|
||||
if (v) {
|
||||
showDialog(
|
||||
@ -341,16 +380,26 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(
|
||||
12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
content: Text(
|
||||
"goodstudent_disclaimer"
|
||||
.i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context, listen: false).fetch();
|
||||
Navigator.of(context)
|
||||
.pop();
|
||||
settings.update(
|
||||
goodStudent: v);
|
||||
Provider.of<GradeProvider>(
|
||||
context,
|
||||
listen: false)
|
||||
.fetch();
|
||||
})
|
||||
],
|
||||
),
|
||||
@ -358,11 +407,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
);
|
||||
} else {
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context, listen: false).fetch();
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.fetch();
|
||||
}
|
||||
},
|
||||
value: settings.goodStudent,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
),
|
||||
),
|
||||
|
||||
@ -370,12 +423,20 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Presentation Mode", style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(presentationMode: v),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: const Text("Presentation Mode",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(presentationMode: v),
|
||||
value: settings.presentationMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -385,7 +446,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Theme Settings
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("appearance".i18n),
|
||||
child: Column(
|
||||
@ -412,7 +474,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
width: 12.0,
|
||||
height: 12.0,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
),
|
||||
@ -429,7 +493,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
children: List.generate(
|
||||
5,
|
||||
(i) => Container(
|
||||
margin: const EdgeInsets.only(left: 2.0),
|
||||
margin:
|
||||
const EdgeInsets.only(left: 2.0),
|
||||
width: 12.0,
|
||||
height: 12.0,
|
||||
decoration: BoxDecoration(
|
||||
@ -443,15 +508,22 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
FeatherIcons.barChart,
|
||||
color: settings.graphClassAvg
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
? Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary
|
||||
: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -460,15 +532,22 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.graphClassAvg ? 1.0 : .5),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.graphClassAvg
|
||||
? 1.0
|
||||
: .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
onChanged: (v) => settings.update(graphClassAvg: v),
|
||||
onChanged: (v) =>
|
||||
settings.update(graphClassAvg: v),
|
||||
value: settings.graphClassAvg,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const PremiumIconPackSelector(),
|
||||
@ -479,21 +558,28 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Notifications
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("notifications".i18n),
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.newspaper_outlined,
|
||||
color: settings.newsEnabled
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
? Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary
|
||||
: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -502,15 +588,21 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.newsEnabled ? 1.0 : .5),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(settings.newsEnabled
|
||||
? 1.0
|
||||
: .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
onChanged: (v) => settings.update(newsEnabled: v),
|
||||
onChanged: (v) =>
|
||||
settings.update(newsEnabled: v),
|
||||
value: settings.newsEnabled,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -518,22 +610,30 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Extras
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("extras".i18n),
|
||||
child: Column(children: [
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
FeatherIcons.gift,
|
||||
color: settings.gradeOpeningFun
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
? Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary
|
||||
: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -542,15 +642,22 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.gradeOpeningFun ? 1.0 : .5),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.gradeOpeningFun
|
||||
? 1.0
|
||||
: .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
onChanged: (v) => settings.update(gradeOpeningFun: v),
|
||||
onChanged: (v) =>
|
||||
settings.update(gradeOpeningFun: v),
|
||||
value: settings.gradeOpeningFun,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
]),
|
||||
@ -559,24 +666,31 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// About
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("about".i18n),
|
||||
child: Column(children: [
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.atSign),
|
||||
title: const Text("Discord"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://filcnaplo.hu/discord"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu/discord"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.globe),
|
||||
title: const Text("www.filcnaplo.hu"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://filcnaplo.hu"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.github),
|
||||
title: const Text("Github"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://github.com/filc"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://github.com/filc"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.mail),
|
||||
@ -591,36 +705,59 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.award),
|
||||
title: Text("licenses".i18n),
|
||||
onPressed: () => showLicensePage(context: context),
|
||||
onPressed: () =>
|
||||
showLicensePage(context: context),
|
||||
),
|
||||
Tooltip(
|
||||
message: "data_collected".i18n,
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
textStyle: TextStyle(fontWeight: FontWeight.w500, color: AppColors.of(context).text),
|
||||
decoration: BoxDecoration(color: Theme.of(context).colorScheme.background),
|
||||
textStyle: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.of(context).text),
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.background),
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
secondary: Icon(
|
||||
FeatherIcons.barChart2,
|
||||
color: settings.xFilcId != "none"
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
? Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary
|
||||
: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(.25),
|
||||
),
|
||||
title: Text(
|
||||
"Analytics".i18n,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.xFilcId != "none" ? 1.0 : .5),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.xFilcId != "none"
|
||||
? 1.0
|
||||
: .5),
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
"Anonymous Usage Analytics".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(settings.xFilcId != "none" ? .5 : .2),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.xFilcId != "none"
|
||||
? .5
|
||||
: .2),
|
||||
),
|
||||
),
|
||||
onChanged: (v) {
|
||||
@ -628,14 +765,17 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
if (v == false) {
|
||||
newId = "none";
|
||||
} else if (settings.xFilcId == "none") {
|
||||
newId = SettingsProvider.defaultSettings().xFilcId;
|
||||
newId =
|
||||
SettingsProvider.defaultSettings()
|
||||
.xFilcId;
|
||||
} else {
|
||||
newId = settings.xFilcId;
|
||||
}
|
||||
settings.update(xFilcId: newId);
|
||||
},
|
||||
value: settings.xFilcId != "none",
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -644,7 +784,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
),
|
||||
if (settings.developerMode)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: const Text("Developer Settings"),
|
||||
child: Column(
|
||||
@ -652,28 +793,48 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Developer Mode", style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(developerMode: false),
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: const Text("Developer Mode",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(developerMode: false),
|
||||
value: settings.developerMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
activeColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.copy),
|
||||
title: const Text("Copy JWT"),
|
||||
onPressed: () =>
|
||||
Clipboard.setData(ClipboardData(text: Provider.of<KretaClient>(context, listen: false).accessToken)),
|
||||
onPressed: () => Clipboard.setData(
|
||||
ClipboardData(
|
||||
text: Provider.of<KretaClient>(
|
||||
context,
|
||||
listen: false)
|
||||
.accessToken!)),
|
||||
),
|
||||
if (Provider.of<PremiumProvider>(context, listen: false).hasPremium)
|
||||
if (Provider.of<PremiumProvider>(context,
|
||||
listen: false)
|
||||
.hasPremium)
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.key),
|
||||
title: const Text("Remove Premium"),
|
||||
onPressed: () {
|
||||
Provider.of<PremiumProvider>(context, listen: false).activate(removePremium: true);
|
||||
settings.update(accentColor: AccentColor.filc, store: true);
|
||||
Provider.of<ThemeModeObserver>(context, listen: false).changeTheme(settings.theme);
|
||||
Provider.of<PremiumProvider>(context,
|
||||
listen: false)
|
||||
.activate(removePremium: true);
|
||||
settings.update(
|
||||
accentColor: AccentColor.filc,
|
||||
store: true);
|
||||
Provider.of<ThemeModeObserver>(context,
|
||||
listen: false)
|
||||
.changeTheme(settings.theme);
|
||||
},
|
||||
),
|
||||
],
|
||||
@ -684,18 +845,25 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
top: false,
|
||||
child: Center(
|
||||
child: GestureDetector(
|
||||
child: const Panel(title: Text("v" + String.fromEnvironment("APPVER", defaultValue: "?"))),
|
||||
child: const Panel(
|
||||
title: Text("v" +
|
||||
String.fromEnvironment("APPVER",
|
||||
defaultValue: "?"))),
|
||||
onTap: () {
|
||||
if (devmodeCountdown > 0) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
duration: const Duration(milliseconds: 200),
|
||||
content: Text("You are $devmodeCountdown taps away from Developer Mode."),
|
||||
content: Text(
|
||||
"You are $devmodeCountdown taps away from Developer Mode."),
|
||||
));
|
||||
|
||||
setState(() => devmodeCountdown--);
|
||||
} else if (devmodeCountdown == 0) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
|
||||
content: Text("Developer Mode successfully activated."),
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(const SnackBar(
|
||||
content: Text(
|
||||
"Developer Mode successfully activated."),
|
||||
));
|
||||
|
||||
settings.update(developerMode: true);
|
||||
@ -719,7 +887,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
}
|
||||
|
||||
void _openNews(BuildContext context) =>
|
||||
Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
|
||||
void _openUpdates(BuildContext context) => UpdateView.show(updateProvider.releases.first, context: context);
|
||||
Navigator.of(context, rootNavigator: true)
|
||||
.push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
|
||||
void _openUpdates(BuildContext context) =>
|
||||
UpdateView.show(updateProvider.releases.first, context: context);
|
||||
void _openPrivacy(BuildContext context) => PrivacyView.show(context);
|
||||
}
|
||||
|
11
filcnaplo_kreta_api/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pub" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "daily"
|
47
filcnaplo_kreta_api/.gitignore
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# 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
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# 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
|
||||
pubspec.lock
|
11
filcnaplo_mobile_ui/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pub" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "daily"
|
47
filcnaplo_mobile_ui/.gitignore
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# 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
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# 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
|
||||
pubspec.lock
|
@ -55,7 +55,8 @@ class SettingsScreen extends StatefulWidget {
|
||||
_SettingsScreenState createState() => _SettingsScreenState();
|
||||
}
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProviderStateMixin {
|
||||
class _SettingsScreenState extends State<SettingsScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
int devmodeCountdown = 3;
|
||||
bool __ss = false; // secret settings
|
||||
|
||||
@ -95,11 +96,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
}
|
||||
|
||||
accountTiles.add(AccountTile(
|
||||
name: Text(!settings.presentationMode ? account.name : "Béla", style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
username: Text(!settings.presentationMode ? account.username : "72469696969"),
|
||||
name: Text(!settings.presentationMode ? account.name : "Béla",
|
||||
style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
username:
|
||||
Text(!settings.presentationMode ? account.username : "72469696969"),
|
||||
profileImage: ProfileImage(
|
||||
name: _firstName,
|
||||
backgroundColor: !settings.presentationMode ? ColorUtils.stringToColor(account.name) : Theme.of(context).colorScheme.secondary,
|
||||
backgroundColor: !settings.presentationMode
|
||||
? ColorUtils.stringToColor(account.name)
|
||||
: Theme.of(context).colorScheme.secondary,
|
||||
role: account.role,
|
||||
),
|
||||
onTap: () {
|
||||
@ -139,7 +144,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
]);
|
||||
}
|
||||
|
||||
void _openDKT(User u) => tabs.launch("https://dkttanulo.e-kreta.hu/sso?id_token=${kretaClient.idToken}",
|
||||
void _openDKT(User u) => tabs.launch(
|
||||
"https://dkttanulo.e-kreta.hu/sso?id_token=${kretaClient.idToken}",
|
||||
customTabsOption: tabs.CustomTabsOption(
|
||||
toolbarColor: Theme.of(context).scaffoldBackgroundColor,
|
||||
showPageTitle: true,
|
||||
@ -148,7 +154,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_hideContainersController = AnimationController(vsync: this, duration: const Duration(milliseconds: 200));
|
||||
_hideContainersController = AnimationController(
|
||||
vsync: this, duration: const Duration(milliseconds: 200));
|
||||
}
|
||||
|
||||
@override
|
||||
@ -165,8 +172,14 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
firstName = "Béla";
|
||||
}
|
||||
|
||||
String startPageTitle = SettingsHelper.localizedPageTitles()[settings.startPage] ?? "?";
|
||||
String themeModeText = {ThemeMode.light: "light".i18n, ThemeMode.dark: "dark".i18n, ThemeMode.system: "system".i18n}[settings.theme] ?? "?";
|
||||
String startPageTitle =
|
||||
SettingsHelper.localizedPageTitles()[settings.startPage] ?? "?";
|
||||
String themeModeText = {
|
||||
ThemeMode.light: "light".i18n,
|
||||
ThemeMode.dark: "dark".i18n,
|
||||
ThemeMode.system: "system".i18n
|
||||
}[settings.theme] ??
|
||||
"?";
|
||||
String languageText = SettingsHelper.langMap[settings.language] ?? "?";
|
||||
String vibrateTitle = {
|
||||
VibrationStrength.off: "voff".i18n,
|
||||
@ -193,15 +206,18 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
children: [
|
||||
IconButton(
|
||||
splashRadius: 32.0,
|
||||
onPressed: () => _showBottomSheet(user.getUser(user.id ?? "")),
|
||||
icon: Icon(FeatherIcons.moreVertical, color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
onPressed: () =>
|
||||
_showBottomSheet(user.getUser(user.id ?? "")),
|
||||
icon: Icon(FeatherIcons.moreVertical,
|
||||
color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
),
|
||||
IconButton(
|
||||
splashRadius: 26.0,
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: Icon(FeatherIcons.x, color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
icon: Icon(FeatherIcons.x,
|
||||
color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -216,8 +232,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
badge: updateProvider.available,
|
||||
role: user.role,
|
||||
profilePictureString: user.picture,
|
||||
backgroundColor:
|
||||
!settings.presentationMode ? ColorUtils.stringToColor(user.displayName ?? "?") : Theme.of(context).colorScheme.secondary,
|
||||
backgroundColor: !settings.presentationMode
|
||||
? ColorUtils.stringToColor(user.displayName ?? "?")
|
||||
: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
|
||||
@ -227,18 +244,24 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
onTap: () => _showBottomSheet(user.getUser(user.id ?? "")),
|
||||
onDoubleTap: () => setState(() => __ss = true),
|
||||
child: Text(
|
||||
!settings.presentationMode ? (user.displayName ?? "?") : "Béla",
|
||||
!settings.presentationMode
|
||||
? (user.displayName ?? "?")
|
||||
: "Béla",
|
||||
maxLines: 1,
|
||||
softWrap: false,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.w600, color: AppColors.of(context).text),
|
||||
style: TextStyle(
|
||||
fontSize: 20.0,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.of(context).text),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
child: Column(
|
||||
children: [
|
||||
@ -261,7 +284,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
// Account settings
|
||||
PanelButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pushNamed("login_back").then((value) {
|
||||
Navigator.of(context)
|
||||
.pushNamed("login_back")
|
||||
.then((value) {
|
||||
setSystemChrome(context);
|
||||
});
|
||||
},
|
||||
@ -275,18 +300,24 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Delete User
|
||||
user.removeUser(userId);
|
||||
await Provider.of<DatabaseProvider>(context, listen: false).store.removeUser(userId);
|
||||
await Provider.of<DatabaseProvider>(context,
|
||||
listen: false)
|
||||
.store
|
||||
.removeUser(userId);
|
||||
|
||||
// If no other Users left, go back to LoginScreen
|
||||
if (user.getUsers().isNotEmpty) {
|
||||
user.setUser(user.getUsers().first.id);
|
||||
restore().then((_) => user.setUser(user.getUsers().first.id));
|
||||
restore().then(
|
||||
(_) => user.setUser(user.getUsers().first.id));
|
||||
} else {
|
||||
Navigator.of(context).pushNamedAndRemoveUntil("login", (_) => false);
|
||||
Navigator.of(context)
|
||||
.pushNamedAndRemoveUntil("login", (_) => false);
|
||||
}
|
||||
},
|
||||
title: Text("log_out".i18n),
|
||||
leading: Icon(FeatherIcons.logOut, color: AppColors.of(context).red),
|
||||
leading: Icon(FeatherIcons.logOut,
|
||||
color: AppColors.of(context).red),
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -296,7 +327,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
// Updates
|
||||
if (updateProvider.available)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
child: PanelButton(
|
||||
onPressed: () => _openUpdates(context),
|
||||
@ -332,7 +364,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// General Settings
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("general".i18n),
|
||||
child: Column(
|
||||
@ -362,7 +395,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
},
|
||||
title: Text("rounding".i18n),
|
||||
leading: const Icon(FeatherIcons.gitCommit),
|
||||
trailing: Text((settings.rounding / 10).toStringAsFixed(1)),
|
||||
trailing:
|
||||
Text((settings.rounding / 10).toStringAsFixed(1)),
|
||||
),
|
||||
PanelButton(
|
||||
onPressed: () {
|
||||
@ -381,11 +415,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
},
|
||||
title: Text(
|
||||
"bell_delay".i18n,
|
||||
style: TextStyle(color: AppColors.of(context).text.withOpacity(settings.bellDelayEnabled ? 1.0 : .5)),
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.bellDelayEnabled ? 1.0 : .5)),
|
||||
),
|
||||
leading: settings.bellDelayEnabled
|
||||
? const Icon(FeatherIcons.bell)
|
||||
: Icon(FeatherIcons.bellOff, color: AppColors.of(context).text.withOpacity(.25)),
|
||||
: Icon(FeatherIcons.bellOff,
|
||||
color:
|
||||
AppColors.of(context).text.withOpacity(.25)),
|
||||
trailingDivider: true,
|
||||
trailing: Switch(
|
||||
onChanged: (v) => settings.update(bellDelayEnabled: v),
|
||||
@ -400,18 +438,22 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
if (kDebugMode)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: const Text("Debug"),
|
||||
child: Column(
|
||||
children: [
|
||||
PanelButton(
|
||||
title: const Text("Subject Icon Gallery"),
|
||||
leading: const Icon(CupertinoIcons.rectangle_3_offgrid_fill),
|
||||
leading:
|
||||
const Icon(CupertinoIcons.rectangle_3_offgrid_fill),
|
||||
trailing: const Icon(Icons.arrow_forward),
|
||||
onPressed: () {
|
||||
Navigator.of(context, rootNavigator: true).push(
|
||||
CupertinoPageRoute(builder: (context) => const SubjectIconGallery()),
|
||||
CupertinoPageRoute(
|
||||
builder: (context) =>
|
||||
const SubjectIconGallery()),
|
||||
);
|
||||
},
|
||||
)
|
||||
@ -423,7 +465,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
// Secret Settings
|
||||
if (__ss)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("secret".i18n),
|
||||
child: Column(
|
||||
@ -433,8 +476,11 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n, style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) {
|
||||
if (v) {
|
||||
showDialog(
|
||||
@ -442,16 +488,21 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
content:
|
||||
Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context, listen: false).convertBySettings();
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
})
|
||||
],
|
||||
),
|
||||
@ -459,7 +510,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
);
|
||||
} else {
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context, listen: false).convertBySettings();
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
}
|
||||
},
|
||||
value: settings.goodStudent,
|
||||
@ -472,9 +524,12 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Presentation Mode", style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(presentationMode: v),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Presentation Mode",
|
||||
style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(presentationMode: v),
|
||||
value: settings.presentationMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
@ -486,7 +541,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Theme Settings
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("appearance".i18n),
|
||||
child: Column(
|
||||
@ -545,12 +601,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
FeatherIcons.barChart,
|
||||
color: settings.graphClassAvg ? Theme.of(context).colorScheme.secondary : AppColors.of(context).text.withOpacity(.25),
|
||||
color: settings.graphClassAvg
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -559,7 +618,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.graphClassAvg ? 1.0 : .5),
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.graphClassAvg ? 1.0 : .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -578,19 +638,23 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Notifications
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("notifications".i18n),
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.newspaper_outlined,
|
||||
color: settings.newsEnabled ? Theme.of(context).colorScheme.secondary : AppColors.of(context).text.withOpacity(.25),
|
||||
color: settings.newsEnabled
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -599,7 +663,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.newsEnabled ? 1.0 : .5),
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(settings.newsEnabled ? 1.0 : .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -615,7 +681,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// Extras
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("extras".i18n),
|
||||
child: Column(
|
||||
@ -624,12 +691,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Row(
|
||||
children: [
|
||||
Icon(
|
||||
FeatherIcons.gift,
|
||||
color: settings.gradeOpeningFun ? Theme.of(context).colorScheme.secondary : AppColors.of(context).text.withOpacity(.25),
|
||||
color: settings.gradeOpeningFun
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
),
|
||||
const SizedBox(width: 24.0),
|
||||
Expanded(
|
||||
@ -638,7 +708,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.gradeOpeningFun ? 1.0 : .5),
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.gradeOpeningFun ? 1.0 : .5),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -659,24 +730,31 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
|
||||
// About
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: Text("about".i18n),
|
||||
child: Column(children: [
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.atSign),
|
||||
title: const Text("Discord"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://filcnaplo.hu/discord"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu/discord"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.globe),
|
||||
title: const Text("www.filcnaplo.hu"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://filcnaplo.hu"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.github),
|
||||
title: const Text("Github"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://github.com/filc"), mode: LaunchMode.externalApplication),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://github.com/filc"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.mail),
|
||||
@ -696,29 +774,37 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
Tooltip(
|
||||
message: "data_collected".i18n,
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
textStyle: TextStyle(fontWeight: FontWeight.w500, color: AppColors.of(context).text),
|
||||
decoration: BoxDecoration(color: Theme.of(context).colorScheme.background),
|
||||
textStyle: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.of(context).text),
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).colorScheme.background),
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
secondary: Icon(
|
||||
FeatherIcons.barChart2,
|
||||
color: settings.xFilcId != "none" ? Theme.of(context).colorScheme.secondary : AppColors.of(context).text.withOpacity(.25),
|
||||
color: settings.xFilcId != "none"
|
||||
? Theme.of(context).colorScheme.secondary
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
),
|
||||
title: Text(
|
||||
"Analytics".i18n,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors.of(context).text.withOpacity(settings.xFilcId != "none" ? 1.0 : .5),
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.xFilcId != "none" ? 1.0 : .5),
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
"Anonymous Usage Analytics".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(settings.xFilcId != "none" ? .5 : .2),
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.xFilcId != "none" ? .5 : .2),
|
||||
),
|
||||
),
|
||||
onChanged: (v) {
|
||||
@ -742,7 +828,8 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
),
|
||||
if (settings.developerMode)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 12.0, horizontal: 24.0),
|
||||
child: Panel(
|
||||
title: const Text("Developer Settings"),
|
||||
child: Column(
|
||||
@ -751,9 +838,12 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Developer Mode", style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(developerMode: false),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: const Text("Developer Mode",
|
||||
style: TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(developerMode: false),
|
||||
value: settings.developerMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
@ -761,16 +851,24 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.copy),
|
||||
title: const Text("Copy JWT"),
|
||||
onPressed: () => Clipboard.setData(ClipboardData(text: Provider.of<KretaClient>(context, listen: false).accessToken)),
|
||||
onPressed: () => Clipboard.setData(ClipboardData(
|
||||
text:
|
||||
Provider.of<KretaClient>(context, listen: false)
|
||||
.accessToken!)),
|
||||
),
|
||||
if (Provider.of<PremiumProvider>(context, listen: false).hasPremium)
|
||||
if (Provider.of<PremiumProvider>(context, listen: false)
|
||||
.hasPremium)
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.key),
|
||||
title: const Text("Remove Premium"),
|
||||
onPressed: () {
|
||||
Provider.of<PremiumProvider>(context, listen: false).activate(removePremium: true);
|
||||
settings.update(accentColor: AccentColor.filc, store: true);
|
||||
Provider.of<ThemeModeObserver>(context, listen: false).changeTheme(settings.theme);
|
||||
Provider.of<PremiumProvider>(context, listen: false)
|
||||
.activate(removePremium: true);
|
||||
settings.update(
|
||||
accentColor: AccentColor.filc, store: true);
|
||||
Provider.of<ThemeModeObserver>(context,
|
||||
listen: false)
|
||||
.changeTheme(settings.theme);
|
||||
},
|
||||
),
|
||||
],
|
||||
@ -781,12 +879,15 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
top: false,
|
||||
child: Center(
|
||||
child: GestureDetector(
|
||||
child: const Panel(title: Text("v" + String.fromEnvironment("APPVER", defaultValue: "?"))),
|
||||
child: const Panel(
|
||||
title: Text("v" +
|
||||
String.fromEnvironment("APPVER", defaultValue: "?"))),
|
||||
onTap: () {
|
||||
if (devmodeCountdown > 0) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
||||
duration: const Duration(milliseconds: 200),
|
||||
content: Text("You are $devmodeCountdown taps away from Developer Mode."),
|
||||
content: Text(
|
||||
"You are $devmodeCountdown taps away from Developer Mode."),
|
||||
));
|
||||
|
||||
setState(() => devmodeCountdown--);
|
||||
@ -810,7 +911,9 @@ class _SettingsScreenState extends State<SettingsScreen> with SingleTickerProvid
|
||||
}
|
||||
|
||||
void _openNews(BuildContext context) =>
|
||||
Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
|
||||
void _openUpdates(BuildContext context) => UpdateView.show(updateProvider.releases.first, context: context);
|
||||
Navigator.of(context, rootNavigator: true)
|
||||
.push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
|
||||
void _openUpdates(BuildContext context) =>
|
||||
UpdateView.show(updateProvider.releases.first, context: context);
|
||||
void _openPrivacy(BuildContext context) => PrivacyView.show(context);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ dependencies:
|
||||
fl_chart: ^0.45.1
|
||||
url_launcher: ^6.0.9
|
||||
flutter_material_color_picker: ^1.1.0+2
|
||||
photo_view: ^0.13.0
|
||||
photo_view: ^0.14.0
|
||||
flutter_linkify: ^5.0.2
|
||||
flutter_custom_tabs: ^1.0.3
|
||||
flutter_markdown: ^0.6.5
|
||||
|
48
filcnaplo_premium/.gitignore
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# 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
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# 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
|
||||
pubspec.lock
|
||||
android/local.properties
|
@ -1,2 +1,2 @@
|
||||
sdk.dir=/Users/unknown/Library/Android/sdk
|
||||
flutter.sdk=/Users/unknown/flutter
|
||||
sdk.dir=C:\\Users\\Peti\\AppData\\Local\\Android\\sdk
|
||||
flutter.sdk=/Users/kima/development/flutter
|
@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
cd filcnaplo && pwd && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_kreta_api && pwd && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_mobile_ui && pwd && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_desktop_ui && pwd && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_kreta_api && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_mobile_ui && flutter clean && flutter pub get && cd ..
|
||||
cd filcnaplo_desktop_ui && flutter clean && flutter pub get && cd ..
|
||||
|
||||
echo Fixed pub.
|