+
+
+
+
+
+
diff --git a/android/gradle.properties b/android/gradle.properties
index 21dbfa5..67d6eb8 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,2 +1,6 @@
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
+
+# Use Aliyun mirrors for faster downloads in China
+systemProp.org.gradle.internal.http.connectionTimeout=180000
+systemProp.org.gradle.internal.http.socketTimeout=180000
diff --git a/android/init.gradle.kts b/android/init.gradle.kts
new file mode 100644
index 0000000..9b40756
--- /dev/null
+++ b/android/init.gradle.kts
@@ -0,0 +1,20 @@
+// Global Gradle init script to use Aliyun mirrors for faster downloads in China
+allprojects {
+ buildscript {
+ repositories {
+ maven { url = uri("https://maven.aliyun.com/repository/google") }
+ maven { url = uri("https://maven.aliyun.com/repository/public") }
+ maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+ }
+
+ repositories {
+ maven { url = uri("https://maven.aliyun.com/repository/google") }
+ maven { url = uri("https://maven.aliyun.com/repository/public") }
+ google()
+ mavenCentral()
+ }
+}
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
index 4dcef4b..51d7c0d 100644
--- a/android/settings.gradle.kts
+++ b/android/settings.gradle.kts
@@ -11,6 +11,11 @@ pluginManagement {
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
+ // Use Aliyun mirrors for faster downloads in China
+ maven { url = uri("https://maven.aliyun.com/repository/google") }
+ maven { url = uri("https://maven.aliyun.com/repository/public") }
+ maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
+ // Fallback to original repos
google()
mavenCentral()
gradlePluginPortal()
diff --git a/docs b/docs
new file mode 160000
index 0000000..d6ea4ef
--- /dev/null
+++ b/docs
@@ -0,0 +1 @@
+Subproject commit d6ea4ef6628d59ab74a6adbcef6a81508238bae8
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000..89ed2f9
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png
new file mode 100644
index 0000000..758d99f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..c54a6ad
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/108.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/108.png
new file mode 100644
index 0000000..264c4f6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/108.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..13cb599
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..664da54
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png
new file mode 100644
index 0000000..48826f1
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000..be0beaa
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000..ce80e59
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png
new file mode 100644
index 0000000..bc934f5
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000..3634366
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png
new file mode 100644
index 0000000..50313c4
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..f16c29d
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png
new file mode 100644
index 0000000..e594fb7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000..f097ead
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png
new file mode 100644
index 0000000..3e863b7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/234.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/234.png
new file mode 100644
index 0000000..965f7e8
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/234.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png
new file mode 100644
index 0000000..93c055c
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/258.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/258.png
new file mode 100644
index 0000000..106d80a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/258.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..b52c342
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png
new file mode 100644
index 0000000..d1f3d97
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..8201d0b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png
new file mode 100644
index 0000000..da8185b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000..5ea7553
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png
new file mode 100644
index 0000000..7a48699
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png
new file mode 100644
index 0000000..5d1cd05
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..4f8bbc2
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..9c7f33d
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..e54be81
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png
new file mode 100644
index 0000000..12b6583
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png
new file mode 100644
index 0000000..0f97691
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000..8ef6380
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000..84c26b6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..6650c6d
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..04f9e79
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png
new file mode 100644
index 0000000..b1e5a5a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png
new file mode 100644
index 0000000..3929a3a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index 1950fd8..1319290 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,122 +1 @@
-{
- "images" : [
- {
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-App-20x20@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-App-20x20@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-App-29x29@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-App-29x29@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-App-29x29@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-App-40x40@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-App-40x40@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-App-60x60@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-App-60x60@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "20x20",
- "idiom" : "ipad",
- "filename" : "Icon-App-20x20@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "20x20",
- "idiom" : "ipad",
- "filename" : "Icon-App-20x20@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "ipad",
- "filename" : "Icon-App-29x29@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "29x29",
- "idiom" : "ipad",
- "filename" : "Icon-App-29x29@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "40x40",
- "idiom" : "ipad",
- "filename" : "Icon-App-40x40@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "40x40",
- "idiom" : "ipad",
- "filename" : "Icon-App-40x40@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "76x76",
- "idiom" : "ipad",
- "filename" : "Icon-App-76x76@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "76x76",
- "idiom" : "ipad",
- "filename" : "Icon-App-76x76@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "83.5x83.5",
- "idiom" : "ipad",
- "filename" : "Icon-App-83.5x83.5@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "1024x1024",
- "idiom" : "ios-marketing",
- "filename" : "Icon-App-1024x1024@1x.png",
- "scale" : "1x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"idiom":"watch","filename":"172.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"86x86","expected-size":"172","role":"quickLook"},{"idiom":"watch","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"40x40","expected-size":"80","role":"appLauncher"},{"idiom":"watch","filename":"88.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"40mm","scale":"2x","size":"44x44","expected-size":"88","role":"appLauncher"},{"idiom":"watch","filename":"102.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"51x51","expected-size":"102","role":"appLauncher"},{"idiom":"watch","filename":"108.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"54x54","expected-size":"108","role":"appLauncher"},{"idiom":"watch","filename":"92.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"46x46","expected-size":"92","role":"appLauncher"},{"idiom":"watch","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"50x50","expected-size":"100","role":"appLauncher"},{"idiom":"watch","filename":"196.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"98x98","expected-size":"196","role":"quickLook"},{"idiom":"watch","filename":"216.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"108x108","expected-size":"216","role":"quickLook"},{"idiom":"watch","filename":"234.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"117x117","expected-size":"234","role":"quickLook"},{"idiom":"watch","filename":"258.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"129x129","expected-size":"258","role":"quickLook"},{"idiom":"watch","filename":"48.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"24x24","expected-size":"48","role":"notificationCenter"},{"idiom":"watch","filename":"55.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"27.5x27.5","expected-size":"55","role":"notificationCenter"},{"idiom":"watch","filename":"66.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"33x33","expected-size":"66","role":"notificationCenter"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"3x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"2x"},{"size":"1024x1024","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch-marketing","scale":"1x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
\ No newline at end of file
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
index febded7..af58def 100644
--- a/lib/l10n/app_ar.arb
+++ b/lib/l10n/app_ar.arb
@@ -58,12 +58,17 @@
"about": "حول",
"privacyPolicy": "سياسة الخصوصية",
+ "termsOfService": "شروط الخدمة",
"aboutFocusBuddy": "حول FocusBuddy",
"resetOnboarding": "إعادة تعيين التعريف",
"version": "الإصدار 1.0.0 (MVP)",
"privacyPolicyTitle": "سياسة الخصوصية",
- "privacyPolicyContent": "يعمل FocusBuddy بنسبة 100٪ دون اتصال بالإنترنت. لا نجمع اسمك أو بريدك الإلكتروني أو موقعك أو بيانات الاستخدام. تبقى جميع الجلسات على جهازك.\n\nلا توجد مزامنة سحابية أو نظام حسابات أو تتبع تحليلي.\n\nللحصول على سياسة الخصوصية الكاملة، قم بزيارة:\n[عنوان URL لموقعك]/privacy",
+ "privacyPolicyContent": "يعمل FocusBuddy بنسبة 100٪ دون اتصال بالإنترنت. لا نجمع اسمك أو بريدك الإلكتروني أو موقعك أو بيانات الاستخدام. تبقى جميع الجلسات على جهازك.\n\nلا توجد مزامنة سحابية أو نظام حسابات أو تتبع تحليلي.\n\nللحصول على سياسة الخصوصية الكاملة، قم بزيارة:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "شروط الخدمة",
+ "termsOfServiceContent": "يتم توفير FocusBuddy \"كما هو\" بدون ضمانات. باستخدام هذا التطبيق، فإنك توافق على استخدامه على مسؤوليتك الخاصة.\n\nهذا التطبيق مصمم كأداة مؤقت تركيز ولا يضمن نتائج محددة. يتم تخزين جميع البيانات محليًا على جهازك.\n\nللحصول على شروط الخدمة الكاملة، قم بزيارة:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "إغلاق",
"aboutTitle": "حول FocusBuddy",
diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb
index 71e16f5..f4b488d 100644
--- a/lib/l10n/app_de.arb
+++ b/lib/l10n/app_de.arb
@@ -58,12 +58,17 @@
"about": "Über",
"privacyPolicy": "Datenschutzrichtlinie",
+ "termsOfService": "Nutzungsbedingungen",
"aboutFocusBuddy": "Über FocusBuddy",
"resetOnboarding": "Einführung zurücksetzen",
"version": "Version 1.0.0 (MVP)",
"privacyPolicyTitle": "Datenschutzrichtlinie",
- "privacyPolicyContent": "FocusBuddy funktioniert zu 100% offline. Wir sammeln weder deinen Namen, E-Mail, Standort noch Nutzungsdaten. Alle Sitzungen bleiben auf deinem Gerät.\n\nEs gibt keine Cloud-Synchronisation, kein Kontosystem und keine Analyse-Verfolgung.\n\nFür die vollständige Datenschutzrichtlinie besuche:\n[Deine Website-URL]/privacy",
+ "privacyPolicyContent": "FocusBuddy funktioniert zu 100% offline. Wir sammeln weder deinen Namen, E-Mail, Standort noch Nutzungsdaten. Alle Sitzungen bleiben auf deinem Gerät.\n\nEs gibt keine Cloud-Synchronisation, kein Kontosystem und keine Analyse-Verfolgung.\n\nFür die vollständige Datenschutzrichtlinie besuche:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Nutzungsbedingungen",
+ "termsOfServiceContent": "FocusBuddy wird \"wie besehen\" ohne Garantien bereitgestellt. Durch die Nutzung dieser App erklärst du dich damit einverstanden, sie auf eigenes Risiko zu verwenden.\n\nDiese App ist als Fokus-Timer-Tool konzipiert und garantiert keine spezifischen Ergebnisse. Alle Daten werden lokal auf deinem Gerät gespeichert.\n\nFür die vollständigen Nutzungsbedingungen besuche:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Schließen",
"aboutTitle": "Über FocusBuddy",
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index ae90080..4daae7b 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -145,12 +145,17 @@
"about": "About",
"privacyPolicy": "Privacy Policy",
+ "termsOfService": "Terms of Service",
"aboutFocusBuddy": "About FocusBuddy",
"resetOnboarding": "Reset Onboarding",
"version": "Version 1.0.0 (MVP)",
"privacyPolicyTitle": "Privacy Policy",
- "privacyPolicyContent": "FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\n[Your website URL]/privacy",
+ "privacyPolicyContent": "FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Terms of Service",
+ "termsOfServiceContent": "FocusBuddy is provided \"as is\" without warranties. By using this app, you agree to use it at your own risk.\n\nThis app is designed as a focus timer tool and does not guarantee specific results. All data is stored locally on your device.\n\nFor the full terms of service, visit:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Close",
"aboutTitle": "About FocusBuddy",
diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb
index 3a542a8..4132d0b 100644
--- a/lib/l10n/app_es.arb
+++ b/lib/l10n/app_es.arb
@@ -58,12 +58,17 @@
"about": "Acerca de",
"privacyPolicy": "Política de privacidad",
+ "termsOfService": "Términos de servicio",
"aboutFocusBuddy": "Acerca de FocusBuddy",
"resetOnboarding": "Restablecer introducción",
"version": "Versión 1.0.0 (MVP)",
"privacyPolicyTitle": "Política de privacidad",
- "privacyPolicyContent": "FocusBuddy funciona 100% sin conexión. No recopilamos tu nombre, correo electrónico, ubicación ni datos de uso. Todas las sesiones permanecen en tu dispositivo.\n\nNo hay sincronización en la nube, sistema de cuentas ni seguimiento de análisis.\n\nPara la política de privacidad completa, visita:\n[URL de tu sitio web]/privacy",
+ "privacyPolicyContent": "FocusBuddy funciona 100% sin conexión. No recopilamos tu nombre, correo electrónico, ubicación ni datos de uso. Todas las sesiones permanecen en tu dispositivo.\n\nNo hay sincronización en la nube, sistema de cuentas ni seguimiento de análisis.\n\nPara la política de privacidad completa, visita:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Términos de servicio",
+ "termsOfServiceContent": "FocusBuddy se proporciona \"tal cual\" sin garantías. Al usar esta aplicación, aceptas usarla bajo tu propio riesgo.\n\nEsta aplicación está diseñada como una herramienta de temporizador de concentración y no garantiza resultados específicos. Todos los datos se almacenan localmente en tu dispositivo.\n\nPara los términos de servicio completos, visita:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Cerrar",
"aboutTitle": "Acerca de FocusBuddy",
diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb
index c439c5a..8890f47 100644
--- a/lib/l10n/app_fr.arb
+++ b/lib/l10n/app_fr.arb
@@ -58,12 +58,17 @@
"about": "À propos",
"privacyPolicy": "Politique de confidentialité",
+ "termsOfService": "Conditions d'utilisation",
"aboutFocusBuddy": "À propos de FocusBuddy",
"resetOnboarding": "Réinitialiser l'introduction",
"version": "Version 1.0.0 (MVP)",
"privacyPolicyTitle": "Politique de confidentialité",
- "privacyPolicyContent": "FocusBuddy fonctionne à 100% hors ligne. Nous ne collectons ni votre nom, ni votre e-mail, ni votre localisation, ni vos données d'utilisation. Toutes les sessions restent sur votre appareil.\n\nIl n'y a pas de synchronisation cloud, pas de système de compte et pas de suivi analytique.\n\nPour la politique de confidentialité complète, visitez:\n[URL de votre site web]/privacy",
+ "privacyPolicyContent": "FocusBuddy fonctionne à 100% hors ligne. Nous ne collectons ni votre nom, ni votre e-mail, ni votre localisation, ni vos données d'utilisation. Toutes les sessions restent sur votre appareil.\n\nIl n'y a pas de synchronisation cloud, pas de système de compte et pas de suivi analytique.\n\nPour la politique de confidentialité complète, visitez:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Conditions d'utilisation",
+ "termsOfServiceContent": "FocusBuddy est fourni \"tel quel\" sans garanties. En utilisant cette application, vous acceptez de l'utiliser à vos propres risques.\n\nCette application est conçue comme un outil de minuteur de concentration et ne garantit pas de résultats spécifiques. Toutes les données sont stockées localement sur votre appareil.\n\nPour les conditions d'utilisation complètes, visitez:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Fermer",
"aboutTitle": "À propos de FocusBuddy",
diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb
index e6d1da8..fb996dc 100644
--- a/lib/l10n/app_hi.arb
+++ b/lib/l10n/app_hi.arb
@@ -58,12 +58,17 @@
"about": "के बारे में",
"privacyPolicy": "गोपनीयता नीति",
+ "termsOfService": "सेवा की शर्तें",
"aboutFocusBuddy": "FocusBuddy के बारे में",
"resetOnboarding": "ऑनबोर्डिंग रीसेट करें",
"version": "संस्करण 1.0.0 (MVP)",
"privacyPolicyTitle": "गोपनीयता नीति",
- "privacyPolicyContent": "FocusBuddy 100% ऑफ़लाइन काम करता है। हम आपका नाम, ईमेल, स्थान या उपयोग डेटा एकत्र नहीं करते। सभी सत्र आपके डिवाइस पर रहते हैं।\n\nकोई क्लाउड सिंक, खाता प्रणाली या विश्लेषण ट्रैकिंग नहीं है।\n\nपूर्ण गोपनीयता नीति के लिए, यहाँ जाएं:\n[आपकी वेबसाइट URL]/privacy",
+ "privacyPolicyContent": "FocusBuddy 100% ऑफ़लाइन काम करता है। हम आपका नाम, ईमेल, स्थान या उपयोग डेटा एकत्र नहीं करते। सभी सत्र आपके डिवाइस पर रहते हैं।\n\nकोई क्लाउड सिंक, खाता प्रणाली या विश्लेषण ट्रैकिंग नहीं है।\n\nपूर्ण गोपनीयता नीति के लिए, यहाँ जाएं:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "सेवा की शर्तें",
+ "termsOfServiceContent": "FocusBuddy \"जैसा है\" बिना वारंटी के प्रदान किया जाता है। इस ऐप का उपयोग करके, आप इसे अपने जोखिम पर उपयोग करने के लिए सहमत हैं।\n\nयह ऐप एक फोकस टाइमर टूल के रूप में डिज़ाइन किया गया है और विशिष्ट परिणामों की गारंटी नहीं देता। सभी डेटा आपके डिवाइस पर स्थानीय रूप से संग्रहीत है।\n\nपूर्ण सेवा की शर्तों के लिए, यहाँ जाएं:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "बंद करें",
"aboutTitle": "FocusBuddy के बारे में",
diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb
index 6c57fc4..bf34c79 100644
--- a/lib/l10n/app_id.arb
+++ b/lib/l10n/app_id.arb
@@ -58,12 +58,17 @@
"about": "Tentang",
"privacyPolicy": "Kebijakan Privasi",
+ "termsOfService": "Ketentuan Layanan",
"aboutFocusBuddy": "Tentang FocusBuddy",
"resetOnboarding": "Reset Onboarding",
"version": "Versi 1.0.0 (MVP)",
"privacyPolicyTitle": "Kebijakan Privasi",
- "privacyPolicyContent": "FocusBuddy 100% offline. Kami tidak mengumpulkan nama, email, lokasi, atau data penggunaan Anda. Semua sesi tetap di perangkat Anda.\n\nTidak ada sinkronisasi cloud, sistem akun, atau pelacakan analitik.\n\nUntuk kebijakan privasi lengkap, kunjungi:\n[URL situs web Anda]/privacy",
+ "privacyPolicyContent": "FocusBuddy 100% offline. Kami tidak mengumpulkan nama, email, lokasi, atau data penggunaan Anda. Semua sesi tetap di perangkat Anda.\n\nTidak ada sinkronisasi cloud, sistem akun, atau pelacakan analitik.\n\nUntuk kebijakan privasi lengkap, kunjungi:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Ketentuan Layanan",
+ "termsOfServiceContent": "FocusBuddy disediakan \"apa adanya\" tanpa jaminan. Dengan menggunakan aplikasi ini, Anda setuju untuk menggunakannya dengan risiko Anda sendiri.\n\nAplikasi ini dirancang sebagai alat timer fokus dan tidak menjamin hasil tertentu. Semua data disimpan secara lokal di perangkat Anda.\n\nUntuk ketentuan layanan lengkap, kunjungi:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Tutup",
"aboutTitle": "Tentang FocusBuddy",
diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb
index e4ffb31..6bcb5c9 100644
--- a/lib/l10n/app_it.arb
+++ b/lib/l10n/app_it.arb
@@ -58,12 +58,17 @@
"about": "Informazioni",
"privacyPolicy": "Informativa sulla privacy",
+ "termsOfService": "Termini di servizio",
"aboutFocusBuddy": "Informazioni su FocusBuddy",
"resetOnboarding": "Ripristina introduzione",
"version": "Versione 1.0.0 (MVP)",
"privacyPolicyTitle": "Informativa sulla privacy",
- "privacyPolicyContent": "FocusBuddy funziona al 100% offline. Non raccogliamo nome, email, posizione o dati di utilizzo. Tutte le sessioni rimangono sul tuo dispositivo.\n\nNessuna sincronizzazione cloud, sistema di account o tracciamento analitico.\n\nPer l'informativa completa sulla privacy, visita:\n[URL del tuo sito web]/privacy",
+ "privacyPolicyContent": "FocusBuddy funziona al 100% offline. Non raccogliamo nome, email, posizione o dati di utilizzo. Tutte le sessioni rimangono sul tuo dispositivo.\n\nNessuna sincronizzazione cloud, sistema di account o tracciamento analitico.\n\nPer l'informativa completa sulla privacy, visita:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Termini di servizio",
+ "termsOfServiceContent": "FocusBuddy è fornito \"così com'è\" senza garanzie. Utilizzando questa app, accetti di usarla a tuo rischio.\n\nQuesta app è progettata come uno strumento timer di concentrazione e non garantisce risultati specifici. Tutti i dati sono archiviati localmente sul tuo dispositivo.\n\nPer i termini di servizio completi, visita:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Chiudi",
"aboutTitle": "Informazioni su FocusBuddy",
diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb
index 8da7c35..d1b309e 100644
--- a/lib/l10n/app_ja.arb
+++ b/lib/l10n/app_ja.arb
@@ -58,12 +58,17 @@
"about": "について",
"privacyPolicy": "プライバシーポリシー",
+ "termsOfService": "利用規約",
"aboutFocusBuddy": "フォーカスバディについて",
"resetOnboarding": "オンボーディングをリセット",
"version": "バージョン 1.0.0 (MVP)",
"privacyPolicyTitle": "プライバシーポリシー",
- "privacyPolicyContent": "フォーカスバディは100%オフラインで動作します。氏名、メールアドレス、位置情報、使用データは一切収集しません。すべてのセッションデータはデバイスに保存されます。\n\nクラウド同期、アカウントシステム、分析トラッキングはありません。\n\n完全なプライバシーポリシーについては:\n[あなたのウェブサイトURL]/privacy",
+ "privacyPolicyContent": "フォーカスバディは100%オフラインで動作します。氏名、メールアドレス、位置情報、使用データは一切収集しません。すべてのセッションデータはデバイスに保存されます。\n\nクラウド同期、アカウントシステム、分析トラッキングはありません。\n\n完全なプライバシーポリシーについては:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "利用規約",
+ "termsOfServiceContent": "フォーカスバディは「現状のまま」で提供され、保証はありません。このアプリを使用することにより、自己責任で使用することに同意したものとみなされます。\n\nこのアプリは集中タイマーツールとして設計されており、特定の結果を保証するものではありません。すべてのデータはデバイスにローカルに保存されます。\n\n完全な利用規約については:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "閉じる",
"aboutTitle": "フォーカスバディについて",
diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb
index 384f56d..7c13a61 100644
--- a/lib/l10n/app_ko.arb
+++ b/lib/l10n/app_ko.arb
@@ -58,12 +58,17 @@
"about": "정보",
"privacyPolicy": "개인정보 처리방침",
+ "termsOfService": "서비스 약관",
"aboutFocusBuddy": "포커스버디 소개",
"resetOnboarding": "온보딩 재설정",
"version": "버전 1.0.0 (MVP)",
"privacyPolicyTitle": "개인정보 처리방침",
- "privacyPolicyContent": "포커스버디는 100% 오프라인으로 작동합니다. 이름, 이메일, 위치 또는 사용 데이터를 수집하지 않습니다. 모든 세션 데이터는 기기에 저장됩니다.\n\n클라우드 동기화, 계정 시스템, 분석 추적이 없습니다.\n\n전체 개인정보 처리방침은 다음을 참조하세요:\n[귀하의 웹사이트 URL]/privacy",
+ "privacyPolicyContent": "포커스버디는 100% 오프라인으로 작동합니다. 이름, 이메일, 위치 또는 사용 데이터를 수집하지 않습니다. 모든 세션 데이터는 기기에 저장됩니다.\n\n클라우드 동기화, 계정 시스템, 분석 추적이 없습니다.\n\n전체 개인정보 처리방침은 다음을 참조하세요:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "서비스 약관",
+ "termsOfServiceContent": "포커스버디는 \"있는 그대로\" 제공되며 보증이 없습니다. 이 앱을 사용함으로써 귀하는 자신의 책임 하에 사용하는 것에 동의합니다.\n\n이 앱은 집중 타이머 도구로 설계되었으며 특정 결과를 보장하지 않습니다. 모든 데이터는 기기에 로컬로 저장됩니다.\n\n전체 서비스 약관은 다음을 참조하세요:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "닫기",
"aboutTitle": "포커스버디 소개",
diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart
index 50be0dd..c6472b6 100644
--- a/lib/l10n/app_localizations.dart
+++ b/lib/l10n/app_localizations.dart
@@ -348,6 +348,12 @@ abstract class AppLocalizations {
/// **'Privacy Policy'**
String get privacyPolicy;
+ /// No description provided for @termsOfService.
+ ///
+ /// In en, this message translates to:
+ /// **'Terms of Service'**
+ String get termsOfService;
+
/// No description provided for @aboutFocusBuddy.
///
/// In en, this message translates to:
@@ -375,9 +381,21 @@ abstract class AppLocalizations {
/// No description provided for @privacyPolicyContent.
///
/// In en, this message translates to:
- /// **'FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\n[Your website URL]/privacy'**
+ /// **'FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html'**
String get privacyPolicyContent;
+ /// No description provided for @termsOfServiceTitle.
+ ///
+ /// In en, this message translates to:
+ /// **'Terms of Service'**
+ String get termsOfServiceTitle;
+
+ /// No description provided for @termsOfServiceContent.
+ ///
+ /// In en, this message translates to:
+ /// **'FocusBuddy is provided \"as is\" without warranties. By using this app, you agree to use it at your own risk.\n\nThis app is designed as a focus timer tool and does not guarantee specific results. All data is stored locally on your device.\n\nFor the full terms of service, visit:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html'**
+ String get termsOfServiceContent;
+
/// No description provided for @close.
///
/// In en, this message translates to:
diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart
index 6338e8c..4d6fe25 100644
--- a/lib/l10n/app_localizations_ar.dart
+++ b/lib/l10n/app_localizations_ar.dart
@@ -163,6 +163,9 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get privacyPolicy => 'سياسة الخصوصية';
+ @override
+ String get termsOfService => 'شروط الخدمة';
+
@override
String get aboutFocusBuddy => 'حول FocusBuddy';
@@ -177,7 +180,14 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'يعمل FocusBuddy بنسبة 100٪ دون اتصال بالإنترنت. لا نجمع اسمك أو بريدك الإلكتروني أو موقعك أو بيانات الاستخدام. تبقى جميع الجلسات على جهازك.\n\nلا توجد مزامنة سحابية أو نظام حسابات أو تتبع تحليلي.\n\nللحصول على سياسة الخصوصية الكاملة، قم بزيارة:\n[عنوان URL لموقعك]/privacy';
+ 'يعمل FocusBuddy بنسبة 100٪ دون اتصال بالإنترنت. لا نجمع اسمك أو بريدك الإلكتروني أو موقعك أو بيانات الاستخدام. تبقى جميع الجلسات على جهازك.\n\nلا توجد مزامنة سحابية أو نظام حسابات أو تتبع تحليلي.\n\nللحصول على سياسة الخصوصية الكاملة، قم بزيارة:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'شروط الخدمة';
+
+ @override
+ String get termsOfServiceContent =>
+ 'يتم توفير FocusBuddy \"كما هو\" بدون ضمانات. باستخدام هذا التطبيق، فإنك توافق على استخدامه على مسؤوليتك الخاصة.\n\nهذا التطبيق مصمم كأداة مؤقت تركيز ولا يضمن نتائج محددة. يتم تخزين جميع البيانات محليًا على جهازك.\n\nللحصول على شروط الخدمة الكاملة، قم بزيارة:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'إغلاق';
diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart
index 3167210..8f9b9da 100644
--- a/lib/l10n/app_localizations_de.dart
+++ b/lib/l10n/app_localizations_de.dart
@@ -165,6 +165,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get privacyPolicy => 'Datenschutzrichtlinie';
+ @override
+ String get termsOfService => 'Nutzungsbedingungen';
+
@override
String get aboutFocusBuddy => 'Über FocusBuddy';
@@ -179,7 +182,14 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy funktioniert zu 100% offline. Wir sammeln weder deinen Namen, E-Mail, Standort noch Nutzungsdaten. Alle Sitzungen bleiben auf deinem Gerät.\n\nEs gibt keine Cloud-Synchronisation, kein Kontosystem und keine Analyse-Verfolgung.\n\nFür die vollständige Datenschutzrichtlinie besuche:\n[Deine Website-URL]/privacy';
+ 'FocusBuddy funktioniert zu 100% offline. Wir sammeln weder deinen Namen, E-Mail, Standort noch Nutzungsdaten. Alle Sitzungen bleiben auf deinem Gerät.\n\nEs gibt keine Cloud-Synchronisation, kein Kontosystem und keine Analyse-Verfolgung.\n\nFür die vollständige Datenschutzrichtlinie besuche:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Nutzungsbedingungen';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy wird \"wie besehen\" ohne Garantien bereitgestellt. Durch die Nutzung dieser App erklärst du dich damit einverstanden, sie auf eigenes Risiko zu verwenden.\n\nDiese App ist als Fokus-Timer-Tool konzipiert und garantiert keine spezifischen Ergebnisse. Alle Daten werden lokal auf deinem Gerät gespeichert.\n\nFür die vollständigen Nutzungsbedingungen besuche:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Schließen';
diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart
index 629a31e..a57c4b8 100644
--- a/lib/l10n/app_localizations_en.dart
+++ b/lib/l10n/app_localizations_en.dart
@@ -164,6 +164,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get privacyPolicy => 'Privacy Policy';
+ @override
+ String get termsOfService => 'Terms of Service';
+
@override
String get aboutFocusBuddy => 'About FocusBuddy';
@@ -178,7 +181,14 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\n[Your website URL]/privacy';
+ 'FocusBuddy is 100% offline. We do not collect your name, email, location, or usage data. All sessions stay on your device.\n\nThere is no cloud sync, no account system, and no analytics tracking.\n\nFor the full privacy policy, visit:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Terms of Service';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy is provided \"as is\" without warranties. By using this app, you agree to use it at your own risk.\n\nThis app is designed as a focus timer tool and does not guarantee specific results. All data is stored locally on your device.\n\nFor the full terms of service, visit:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Close';
diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart
index 0c62eac..f123fce 100644
--- a/lib/l10n/app_localizations_es.dart
+++ b/lib/l10n/app_localizations_es.dart
@@ -164,6 +164,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get privacyPolicy => 'Política de privacidad';
+ @override
+ String get termsOfService => 'Términos de servicio';
+
@override
String get aboutFocusBuddy => 'Acerca de FocusBuddy';
@@ -178,7 +181,14 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy funciona 100% sin conexión. No recopilamos tu nombre, correo electrónico, ubicación ni datos de uso. Todas las sesiones permanecen en tu dispositivo.\n\nNo hay sincronización en la nube, sistema de cuentas ni seguimiento de análisis.\n\nPara la política de privacidad completa, visita:\n[URL de tu sitio web]/privacy';
+ 'FocusBuddy funciona 100% sin conexión. No recopilamos tu nombre, correo electrónico, ubicación ni datos de uso. Todas las sesiones permanecen en tu dispositivo.\n\nNo hay sincronización en la nube, sistema de cuentas ni seguimiento de análisis.\n\nPara la política de privacidad completa, visita:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Términos de servicio';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy se proporciona \"tal cual\" sin garantías. Al usar esta aplicación, aceptas usarla bajo tu propio riesgo.\n\nEsta aplicación está diseñada como una herramienta de temporizador de concentración y no garantiza resultados específicos. Todos los datos se almacenan localmente en tu dispositivo.\n\nPara los términos de servicio completos, visita:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Cerrar';
diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart
index 80bfbb0..0c33f63 100644
--- a/lib/l10n/app_localizations_fr.dart
+++ b/lib/l10n/app_localizations_fr.dart
@@ -165,6 +165,9 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get privacyPolicy => 'Politique de confidentialité';
+ @override
+ String get termsOfService => 'Conditions d\'utilisation';
+
@override
String get aboutFocusBuddy => 'À propos de FocusBuddy';
@@ -179,7 +182,14 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy fonctionne à 100% hors ligne. Nous ne collectons ni votre nom, ni votre e-mail, ni votre localisation, ni vos données d\'utilisation. Toutes les sessions restent sur votre appareil.\n\nIl n\'y a pas de synchronisation cloud, pas de système de compte et pas de suivi analytique.\n\nPour la politique de confidentialité complète, visitez:\n[URL de votre site web]/privacy';
+ 'FocusBuddy fonctionne à 100% hors ligne. Nous ne collectons ni votre nom, ni votre e-mail, ni votre localisation, ni vos données d\'utilisation. Toutes les sessions restent sur votre appareil.\n\nIl n\'y a pas de synchronisation cloud, pas de système de compte et pas de suivi analytique.\n\nPour la politique de confidentialité complète, visitez:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Conditions d\'utilisation';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy est fourni \"tel quel\" sans garanties. En utilisant cette application, vous acceptez de l\'utiliser à vos propres risques.\n\nCette application est conçue comme un outil de minuteur de concentration et ne garantit pas de résultats spécifiques. Toutes les données sont stockées localement sur votre appareil.\n\nPour les conditions d\'utilisation complètes, visitez:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Fermer';
diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart
index eca673e..03f4ea8 100644
--- a/lib/l10n/app_localizations_hi.dart
+++ b/lib/l10n/app_localizations_hi.dart
@@ -165,6 +165,9 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get privacyPolicy => 'गोपनीयता नीति';
+ @override
+ String get termsOfService => 'सेवा की शर्तें';
+
@override
String get aboutFocusBuddy => 'FocusBuddy के बारे में';
@@ -179,7 +182,14 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy 100% ऑफ़लाइन काम करता है। हम आपका नाम, ईमेल, स्थान या उपयोग डेटा एकत्र नहीं करते। सभी सत्र आपके डिवाइस पर रहते हैं।\n\nकोई क्लाउड सिंक, खाता प्रणाली या विश्लेषण ट्रैकिंग नहीं है।\n\nपूर्ण गोपनीयता नीति के लिए, यहाँ जाएं:\n[आपकी वेबसाइट URL]/privacy';
+ 'FocusBuddy 100% ऑफ़लाइन काम करता है। हम आपका नाम, ईमेल, स्थान या उपयोग डेटा एकत्र नहीं करते। सभी सत्र आपके डिवाइस पर रहते हैं।\n\nकोई क्लाउड सिंक, खाता प्रणाली या विश्लेषण ट्रैकिंग नहीं है।\n\nपूर्ण गोपनीयता नीति के लिए, यहाँ जाएं:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'सेवा की शर्तें';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy \"जैसा है\" बिना वारंटी के प्रदान किया जाता है। इस ऐप का उपयोग करके, आप इसे अपने जोखिम पर उपयोग करने के लिए सहमत हैं।\n\nयह ऐप एक फोकस टाइमर टूल के रूप में डिज़ाइन किया गया है और विशिष्ट परिणामों की गारंटी नहीं देता। सभी डेटा आपके डिवाइस पर स्थानीय रूप से संग्रहीत है।\n\nपूर्ण सेवा की शर्तों के लिए, यहाँ जाएं:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'बंद करें';
diff --git a/lib/l10n/app_localizations_id.dart b/lib/l10n/app_localizations_id.dart
index 92fdf0a..fb29d56 100644
--- a/lib/l10n/app_localizations_id.dart
+++ b/lib/l10n/app_localizations_id.dart
@@ -165,6 +165,9 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get privacyPolicy => 'Kebijakan Privasi';
+ @override
+ String get termsOfService => 'Ketentuan Layanan';
+
@override
String get aboutFocusBuddy => 'Tentang FocusBuddy';
@@ -179,7 +182,14 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy 100% offline. Kami tidak mengumpulkan nama, email, lokasi, atau data penggunaan Anda. Semua sesi tetap di perangkat Anda.\n\nTidak ada sinkronisasi cloud, sistem akun, atau pelacakan analitik.\n\nUntuk kebijakan privasi lengkap, kunjungi:\n[URL situs web Anda]/privacy';
+ 'FocusBuddy 100% offline. Kami tidak mengumpulkan nama, email, lokasi, atau data penggunaan Anda. Semua sesi tetap di perangkat Anda.\n\nTidak ada sinkronisasi cloud, sistem akun, atau pelacakan analitik.\n\nUntuk kebijakan privasi lengkap, kunjungi:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Ketentuan Layanan';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy disediakan \"apa adanya\" tanpa jaminan. Dengan menggunakan aplikasi ini, Anda setuju untuk menggunakannya dengan risiko Anda sendiri.\n\nAplikasi ini dirancang sebagai alat timer fokus dan tidak menjamin hasil tertentu. Semua data disimpan secara lokal di perangkat Anda.\n\nUntuk ketentuan layanan lengkap, kunjungi:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Tutup';
diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart
index 7f89c34..2aaf4cf 100644
--- a/lib/l10n/app_localizations_it.dart
+++ b/lib/l10n/app_localizations_it.dart
@@ -165,6 +165,9 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get privacyPolicy => 'Informativa sulla privacy';
+ @override
+ String get termsOfService => 'Termini di servizio';
+
@override
String get aboutFocusBuddy => 'Informazioni su FocusBuddy';
@@ -179,7 +182,14 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy funziona al 100% offline. Non raccogliamo nome, email, posizione o dati di utilizzo. Tutte le sessioni rimangono sul tuo dispositivo.\n\nNessuna sincronizzazione cloud, sistema di account o tracciamento analitico.\n\nPer l\'informativa completa sulla privacy, visita:\n[URL del tuo sito web]/privacy';
+ 'FocusBuddy funziona al 100% offline. Non raccogliamo nome, email, posizione o dati di utilizzo. Tutte le sessioni rimangono sul tuo dispositivo.\n\nNessuna sincronizzazione cloud, sistema di account o tracciamento analitico.\n\nPer l\'informativa completa sulla privacy, visita:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Termini di servizio';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy è fornito \"così com\'è\" senza garanzie. Utilizzando questa app, accetti di usarla a tuo rischio.\n\nQuesta app è progettata come uno strumento timer di concentrazione e non garantisce risultati specifici. Tutti i dati sono archiviati localmente sul tuo dispositivo.\n\nPer i termini di servizio completi, visita:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Chiudi';
diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart
index 8f8c90c..57ff4e7 100644
--- a/lib/l10n/app_localizations_ja.dart
+++ b/lib/l10n/app_localizations_ja.dart
@@ -162,6 +162,9 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get privacyPolicy => 'プライバシーポリシー';
+ @override
+ String get termsOfService => '利用規約';
+
@override
String get aboutFocusBuddy => 'フォーカスバディについて';
@@ -176,7 +179,14 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'フォーカスバディは100%オフラインで動作します。氏名、メールアドレス、位置情報、使用データは一切収集しません。すべてのセッションデータはデバイスに保存されます。\n\nクラウド同期、アカウントシステム、分析トラッキングはありません。\n\n完全なプライバシーポリシーについては:\n[あなたのウェブサイトURL]/privacy';
+ 'フォーカスバディは100%オフラインで動作します。氏名、メールアドレス、位置情報、使用データは一切収集しません。すべてのセッションデータはデバイスに保存されます。\n\nクラウド同期、アカウントシステム、分析トラッキングはありません。\n\n完全なプライバシーポリシーについては:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => '利用規約';
+
+ @override
+ String get termsOfServiceContent =>
+ 'フォーカスバディは「現状のまま」で提供され、保証はありません。このアプリを使用することにより、自己責任で使用することに同意したものとみなされます。\n\nこのアプリは集中タイマーツールとして設計されており、特定の結果を保証するものではありません。すべてのデータはデバイスにローカルに保存されます。\n\n完全な利用規約については:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => '閉じる';
diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart
index e0ab065..b5471bc 100644
--- a/lib/l10n/app_localizations_ko.dart
+++ b/lib/l10n/app_localizations_ko.dart
@@ -162,6 +162,9 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get privacyPolicy => '개인정보 처리방침';
+ @override
+ String get termsOfService => '서비스 약관';
+
@override
String get aboutFocusBuddy => '포커스버디 소개';
@@ -176,7 +179,14 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get privacyPolicyContent =>
- '포커스버디는 100% 오프라인으로 작동합니다. 이름, 이메일, 위치 또는 사용 데이터를 수집하지 않습니다. 모든 세션 데이터는 기기에 저장됩니다.\n\n클라우드 동기화, 계정 시스템, 분석 추적이 없습니다.\n\n전체 개인정보 처리방침은 다음을 참조하세요:\n[귀하의 웹사이트 URL]/privacy';
+ '포커스버디는 100% 오프라인으로 작동합니다. 이름, 이메일, 위치 또는 사용 데이터를 수집하지 않습니다. 모든 세션 데이터는 기기에 저장됩니다.\n\n클라우드 동기화, 계정 시스템, 분석 추적이 없습니다.\n\n전체 개인정보 처리방침은 다음을 참조하세요:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => '서비스 약관';
+
+ @override
+ String get termsOfServiceContent =>
+ '포커스버디는 \"있는 그대로\" 제공되며 보증이 없습니다. 이 앱을 사용함으로써 귀하는 자신의 책임 하에 사용하는 것에 동의합니다.\n\n이 앱은 집중 타이머 도구로 설계되었으며 특정 결과를 보장하지 않습니다. 모든 데이터는 기기에 로컬로 저장됩니다.\n\n전체 서비스 약관은 다음을 참조하세요:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => '닫기';
diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart
index 8969845..c51e4f3 100644
--- a/lib/l10n/app_localizations_pt.dart
+++ b/lib/l10n/app_localizations_pt.dart
@@ -164,6 +164,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get privacyPolicy => 'Política de Privacidade';
+ @override
+ String get termsOfService => 'Termos de Serviço';
+
@override
String get aboutFocusBuddy => 'Sobre FocusBuddy';
@@ -178,7 +181,14 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy funciona 100% offline. Não coletamos seu nome, e-mail, localização ou dados de uso. Todas as sessões ficam no seu dispositivo.\n\nNão há sincronização na nuvem, sistema de conta ou rastreamento de análise.\n\nPara a política de privacidade completa, visite:\n[URL do seu site]/privacy';
+ 'FocusBuddy funciona 100% offline. Não coletamos seu nome, e-mail, localização ou dados de uso. Todas as sessões ficam no seu dispositivo.\n\nNão há sincronização na nuvem, sistema de conta ou rastreamento de análise.\n\nPara a política de privacidade completa, visite:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Termos de Serviço';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy é fornecido \"como está\" sem garantias. Ao usar este aplicativo, você concorda em usá-lo por sua própria conta e risco.\n\nEste aplicativo é projetado como uma ferramenta de temporizador de foco e não garante resultados específicos. Todos os dados são armazenados localmente no seu dispositivo.\n\nPara os termos de serviço completos, visite:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Fechar';
diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart
index 7e6ac10..06ca88e 100644
--- a/lib/l10n/app_localizations_ru.dart
+++ b/lib/l10n/app_localizations_ru.dart
@@ -169,6 +169,9 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get privacyPolicy => 'Политика конфиденциальности';
+ @override
+ String get termsOfService => 'Условия использования';
+
@override
String get aboutFocusBuddy => 'О FocusBuddy';
@@ -183,7 +186,14 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get privacyPolicyContent =>
- 'FocusBuddy работает на 100% офлайн. Мы не собираем ваше имя, email, местоположение или данные об использовании. Все сессии остаются на вашем устройстве.\n\nНет облачной синхронизации, системы аккаунтов и отслеживания аналитики.\n\nПолную политику конфиденциальности см.:\n[URL вашего сайта]/privacy';
+ 'FocusBuddy работает на 100% офлайн. Мы не собираем ваше имя, email, местоположение или данные об использовании. Все сессии остаются на вашем устройстве.\n\nНет облачной синхронизации, системы аккаунтов и отслеживания аналитики.\n\nПолную политику конфиденциальности см.:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => 'Условия использования';
+
+ @override
+ String get termsOfServiceContent =>
+ 'FocusBuddy предоставляется \"как есть\" без гарантий. Используя это приложение, вы соглашаетесь использовать его на свой риск.\n\nЭто приложение разработано как инструмент таймера концентрации и не гарантирует конкретных результатов. Все данные хранятся локально на вашем устройстве.\n\nПолные условия использования см.:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => 'Закрыть';
diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart
index ddb1257..4c16bbe 100644
--- a/lib/l10n/app_localizations_zh.dart
+++ b/lib/l10n/app_localizations_zh.dart
@@ -162,6 +162,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get privacyPolicy => '隐私政策';
+ @override
+ String get termsOfService => '服务条款';
+
@override
String get aboutFocusBuddy => '关于专注伙伴';
@@ -176,7 +179,14 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get privacyPolicyContent =>
- '专注伙伴 100% 离线运行。我们不收集您的姓名、电子邮件、位置或使用数据。所有会话数据都保存在您的设备上。\n\n没有云同步,没有账户系统,没有分析追踪。\n\n完整隐私政策请访问:\n[您的网站 URL]/privacy';
+ '专注伙伴 100% 离线运行。我们不收集您的姓名、电子邮件、位置或使用数据。所有会话数据都保存在您的设备上。\n\n没有云同步,没有账户系统,没有分析追踪。\n\n完整隐私政策请访问:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html';
+
+ @override
+ String get termsOfServiceTitle => '服务条款';
+
+ @override
+ String get termsOfServiceContent =>
+ '专注伙伴按\"现状\"提供,不提供任何保证。使用本应用即表示您同意自行承担风险。\n\n本应用是一款专注计时工具,不保证特定结果。所有数据均存储在您的设备本地。\n\n完整服务条款请访问:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html';
@override
String get close => '关闭';
diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb
index 397b67b..b683248 100644
--- a/lib/l10n/app_pt.arb
+++ b/lib/l10n/app_pt.arb
@@ -58,12 +58,17 @@
"about": "Sobre",
"privacyPolicy": "Política de Privacidade",
+ "termsOfService": "Termos de Serviço",
"aboutFocusBuddy": "Sobre FocusBuddy",
"resetOnboarding": "Redefinir introdução",
"version": "Versão 1.0.0 (MVP)",
"privacyPolicyTitle": "Política de Privacidade",
- "privacyPolicyContent": "FocusBuddy funciona 100% offline. Não coletamos seu nome, e-mail, localização ou dados de uso. Todas as sessões ficam no seu dispositivo.\n\nNão há sincronização na nuvem, sistema de conta ou rastreamento de análise.\n\nPara a política de privacidade completa, visite:\n[URL do seu site]/privacy",
+ "privacyPolicyContent": "FocusBuddy funciona 100% offline. Não coletamos seu nome, e-mail, localização ou dados de uso. Todas as sessões ficam no seu dispositivo.\n\nNão há sincronização na nuvem, sistema de conta ou rastreamento de análise.\n\nPara a política de privacidade completa, visite:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Termos de Serviço",
+ "termsOfServiceContent": "FocusBuddy é fornecido \"como está\" sem garantias. Ao usar este aplicativo, você concorda em usá-lo por sua própria conta e risco.\n\nEste aplicativo é projetado como uma ferramenta de temporizador de foco e não garante resultados específicos. Todos os dados são armazenados localmente no seu dispositivo.\n\nPara os termos de serviço completos, visite:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Fechar",
"aboutTitle": "Sobre FocusBuddy",
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
index 4973e34..ba20f9e 100644
--- a/lib/l10n/app_ru.arb
+++ b/lib/l10n/app_ru.arb
@@ -58,12 +58,17 @@
"about": "О программе",
"privacyPolicy": "Политика конфиденциальности",
+ "termsOfService": "Условия использования",
"aboutFocusBuddy": "О FocusBuddy",
"resetOnboarding": "Сбросить введение",
"version": "Версия 1.0.0 (MVP)",
"privacyPolicyTitle": "Политика конфиденциальности",
- "privacyPolicyContent": "FocusBuddy работает на 100% офлайн. Мы не собираем ваше имя, email, местоположение или данные об использовании. Все сессии остаются на вашем устройстве.\n\nНет облачной синхронизации, системы аккаунтов и отслеживания аналитики.\n\nПолную политику конфиденциальности см.:\n[URL вашего сайта]/privacy",
+ "privacyPolicyContent": "FocusBuddy работает на 100% офлайн. Мы не собираем ваше имя, email, местоположение или данные об использовании. Все сессии остаются на вашем устройстве.\n\nНет облачной синхронизации, системы аккаунтов и отслеживания аналитики.\n\nПолную политику конфиденциальности см.:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "Условия использования",
+ "termsOfServiceContent": "FocusBuddy предоставляется \"как есть\" без гарантий. Используя это приложение, вы соглашаетесь использовать его на свой риск.\n\nЭто приложение разработано как инструмент таймера концентрации и не гарантирует конкретных результатов. Все данные хранятся локально на вашем устройстве.\n\nПолные условия использования см.:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "Закрыть",
"aboutTitle": "О FocusBuddy",
diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb
index 457f2ac..1e1ebf2 100644
--- a/lib/l10n/app_zh.arb
+++ b/lib/l10n/app_zh.arb
@@ -58,12 +58,17 @@
"about": "关于",
"privacyPolicy": "隐私政策",
+ "termsOfService": "服务条款",
"aboutFocusBuddy": "关于专注伙伴",
"resetOnboarding": "重置引导",
"version": "版本 1.0.0 (MVP)",
"privacyPolicyTitle": "隐私政策",
- "privacyPolicyContent": "专注伙伴 100% 离线运行。我们不收集您的姓名、电子邮件、位置或使用数据。所有会话数据都保存在您的设备上。\n\n没有云同步,没有账户系统,没有分析追踪。\n\n完整隐私政策请访问:\n[您的网站 URL]/privacy",
+ "privacyPolicyContent": "专注伙伴 100% 离线运行。我们不收集您的姓名、电子邮件、位置或使用数据。所有会话数据都保存在您的设备上。\n\n没有云同步,没有账户系统,没有分析追踪。\n\n完整隐私政策请访问:\nhttps://ytc1012.github.io/focusbuddy-site/privacy-policy.html",
+
+ "termsOfServiceTitle": "服务条款",
+ "termsOfServiceContent": "专注伙伴按\"现状\"提供,不提供任何保证。使用本应用即表示您同意自行承担风险。\n\n本应用是一款专注计时工具,不保证特定结果。所有数据均存储在您的设备本地。\n\n完整服务条款请访问:\nhttps://ytc1012.github.io/focusbuddy-site/terms-of-service.html",
+
"close": "关闭",
"aboutTitle": "关于专注伙伴",
diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart
index daec959..e3a0958 100644
--- a/lib/screens/settings_screen.dart
+++ b/lib/screens/settings_screen.dart
@@ -142,6 +142,22 @@ class _SettingsScreenState extends State {
},
),
const Divider(color: AppColors.divider),
+ ListTile(
+ contentPadding: EdgeInsets.zero,
+ title: Text(
+ l10n.termsOfService,
+ style: AppTextStyles.bodyText,
+ ),
+ trailing: const Icon(
+ Icons.arrow_forward_ios,
+ size: 16,
+ color: AppColors.textSecondary,
+ ),
+ onTap: () {
+ _showTermsOfService();
+ },
+ ),
+ const Divider(color: AppColors.divider),
ListTile(
contentPadding: EdgeInsets.zero,
title: Text(
@@ -385,6 +401,29 @@ class _SettingsScreenState extends State {
);
}
+ void _showTermsOfService() {
+ final l10n = AppLocalizations.of(context)!;
+
+ showDialog(
+ context: context,
+ builder: (context) => AlertDialog(
+ title: Text(l10n.termsOfServiceTitle),
+ content: SingleChildScrollView(
+ child: Text(
+ l10n.termsOfServiceContent,
+ style: AppTextStyles.bodyText,
+ ),
+ ),
+ actions: [
+ TextButton(
+ onPressed: () => Navigator.pop(context),
+ child: Text(l10n.close),
+ ),
+ ],
+ ),
+ );
+ }
+
void _showAboutDialog() {
final l10n = AppLocalizations.of(context)!;
diff --git a/lib/services/notification_service.dart b/lib/services/notification_service.dart
index d5a8370..d2eb056 100644
--- a/lib/services/notification_service.dart
+++ b/lib/services/notification_service.dart
@@ -1,5 +1,7 @@
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter/foundation.dart';
+import 'package:permission_handler/permission_handler.dart';
+import 'dart:io' show Platform;
/// Notification Service - Handles local notifications
class NotificationService {
@@ -64,21 +66,40 @@ class NotificationService {
// TODO: Navigate to appropriate screen if needed
}
- /// Request notification permissions (iOS only, Android auto-grants)
+ /// Request notification permissions (iOS and Android 13+)
Future requestPermissions() async {
if (kIsWeb) return false;
try {
- final result = await _notifications
- .resolvePlatformSpecificImplementation<
- IOSFlutterLocalNotificationsPlugin>()
- ?.requestPermissions(
- alert: true,
- badge: true,
- sound: true,
- );
+ // Check if we're on Android or iOS
+ if (Platform.isAndroid) {
+ // Android 13+ requires runtime permission
+ final status = await Permission.notification.request();
- return result ?? true; // Android always returns true
+ if (kDebugMode) {
+ print('Android notification permission status: $status');
+ }
+
+ return status.isGranted;
+ } else if (Platform.isIOS) {
+ // iOS permission request
+ final result = await _notifications
+ .resolvePlatformSpecificImplementation<
+ IOSFlutterLocalNotificationsPlugin>()
+ ?.requestPermissions(
+ alert: true,
+ badge: true,
+ sound: true,
+ );
+
+ if (kDebugMode) {
+ print('iOS notification permission result: $result');
+ }
+
+ return result ?? false;
+ }
+
+ return true; // Other platforms
} catch (e) {
if (kDebugMode) {
print('Failed to request permissions: $e');
@@ -87,6 +108,27 @@ class NotificationService {
}
}
+ /// Check if notification permission is granted
+ Future hasPermission() async {
+ if (kIsWeb) return false;
+
+ try {
+ if (Platform.isAndroid) {
+ final status = await Permission.notification.status;
+ return status.isGranted;
+ } else if (Platform.isIOS) {
+ // For iOS, we can't easily check without requesting, so we assume granted after request
+ return true;
+ }
+ return true;
+ } catch (e) {
+ if (kDebugMode) {
+ print('Failed to check permission status: $e');
+ }
+ return false;
+ }
+ }
+
/// Show focus session completed notification
Future showFocusCompletedNotification({
required int minutes,
diff --git a/privacy-policy.md b/privacy-policy.md
index f1633e2..8502d98 100644
--- a/privacy-policy.md
+++ b/privacy-policy.md
@@ -1,8 +1,8 @@
# Privacy Policy for FocusBuddy
-**Last Updated**: November 22, 2025
-**Developer**: [Your Name or Studio]
-**Contact**: [your-email@example.com]
+**Last Updated**: November 22, 2025
+**Developer**: FocusBuddy Team
+**Contact**: focusbuddy.app@outlook.com
This Privacy Policy describes how **FocusBuddy** (the “App”) handles your information. The App is designed to be **100% offline and privacy-first**. We do not collect, store, or transmit any personal data from your device.
@@ -40,10 +40,10 @@ This Privacy Policy describes how **FocusBuddy** (the “App”) handles your in
## 6. Questions?
-If you have any questions about this Privacy Policy or how your data is handled, please contact us at:
-📧 **[your-email@example.com]**
+If you have any questions about this Privacy Policy or how your data is handled, please contact us at:
+📧 **focusbuddy.app@outlook.com**
—
-> Made with care by [Your Name].
+> Made with care by FocusBuddy Team.
> We believe focus should feel kind — not punishing.
\ No newline at end of file
diff --git a/pubspec.lock b/pubspec.lock
index d6be813..aa47028 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -525,6 +525,54 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.0"
+ permission_handler:
+ dependency: "direct main"
+ description:
+ name: permission_handler
+ sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "11.4.0"
+ permission_handler_android:
+ dependency: transitive
+ description:
+ name: permission_handler_android
+ sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "12.1.0"
+ permission_handler_apple:
+ dependency: transitive
+ description:
+ name: permission_handler_apple
+ sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "9.4.7"
+ permission_handler_html:
+ dependency: transitive
+ description:
+ name: permission_handler_html
+ sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.1.3+5"
+ permission_handler_platform_interface:
+ dependency: transitive
+ description:
+ name: permission_handler_platform_interface
+ sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "4.3.0"
+ permission_handler_windows:
+ dependency: transitive
+ description:
+ name: permission_handler_windows
+ sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "0.2.1"
petitparser:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 135c3b3..20e4950 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -41,6 +41,7 @@ dependencies:
hive: ^2.2.3 # Local storage
hive_flutter: ^1.1.0 # Hive Flutter integration
flutter_local_notifications: ^17.0.0 # Notifications
+ permission_handler: ^11.0.0 # Runtime permissions (Android 13+)
path_provider: ^2.1.0 # File paths
shared_preferences: ^2.2.0 # Simple key-value storage (for onboarding)
intl: ^0.20.2 # Date formatting and i18n
diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc
index 8b6d468..48de52b 100644
--- a/windows/flutter/generated_plugin_registrant.cc
+++ b/windows/flutter/generated_plugin_registrant.cc
@@ -6,6 +6,9 @@
#include "generated_plugin_registrant.h"
+#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
+ PermissionHandlerWindowsPluginRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
}
diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake
index b93c4c3..0e69e40 100644
--- a/windows/flutter/generated_plugins.cmake
+++ b/windows/flutter/generated_plugins.cmake
@@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
+ permission_handler_windows
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST