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