Compare commits
5
Commits
05f1b68d3f
...
b02a6ff80a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b02a6ff80a | ||
|
|
b649c9c1e7 | ||
|
|
23ca37c671 | ||
|
|
11616841b3 | ||
|
|
085031bc26 |
No files matched your search
@@ -15,8 +15,6 @@ android {
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
|
||||
|
||||
compileOptions {
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
@@ -77,3 +75,27 @@ dependencies {
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
||||
/// To use this, first be in $PROJ/android/, then run: ./gradlew printFlutterVariables
|
||||
tasks.register("printFlutterVariables") {
|
||||
description = "Print Local Flutter Variables"
|
||||
doLast {
|
||||
// android //
|
||||
// compileSdk = flutter.compileSdkVersion
|
||||
println("compileSdk: ${android.compileSdk}")
|
||||
println("compileSdkVersion: ${android.compileSdkVersion}")
|
||||
// ndkVersion = flutter.ndkVersion
|
||||
println("ndkVersion: ${android.ndkVersion}")
|
||||
|
||||
// android.defaultConfig //
|
||||
// minSdk = flutter.minSdkVersion
|
||||
println("minSdk: ${android.defaultConfig.minSdk}")
|
||||
// targetSdk = flutter.targetSdkVersion
|
||||
println("targetSdk: ${android.defaultConfig.targetSdk}")
|
||||
println("targetSdkVersion: ${android.defaultConfig.targetSdkVersion}")
|
||||
// versionCode = flutter.versionCode
|
||||
println("versionCode: ${android.defaultConfig.versionCode}")
|
||||
// versionName = flutter.versionName
|
||||
println("versionName: ${android.defaultConfig.versionName}")
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
#Sat Sep 12 19:36:23 MST 2026
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip
|
||||
#distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -0,0 +1,3 @@
|
||||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
+60
-27
@@ -121,14 +121,20 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
Future<void> _loadPrefs() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
setState(() {
|
||||
_latController.text = prefs.getDouble('lat').toString();
|
||||
_lngController.text = prefs.getDouble('lng').toString();
|
||||
_sunsetController.text = prefs.getString('sunset_time').toString();
|
||||
_alarmEnabled = prefs.getBool('alarm_enabled') ?? false;
|
||||
final lat = prefs.getDouble('lat').toString();
|
||||
final lng = prefs.getDouble('lng').toString();
|
||||
final sun = prefs.getString('sunset_time');
|
||||
_latController.text = (lat == "null") ? "" : lat;
|
||||
_lngController.text = (lng == "null") ? "" : lng;
|
||||
_sunsetController.text = sun ?? "";
|
||||
|
||||
_minutesBefore = prefs.getInt('minutes_before') ?? 30;
|
||||
_minutesController.text = _minutesBefore.toString();
|
||||
_plural = prefs.getString('plural').toString();
|
||||
|
||||
_alarmEnabled = prefs.getBool('alarm_enabled') ?? false;
|
||||
_validTime = prefs.getBool('valid_time') ?? false;
|
||||
|
||||
_calcPlural();
|
||||
});
|
||||
if (_alarmEnabled && _sunsetController.text.isNotEmpty) {
|
||||
_scheduleAlarm();
|
||||
@@ -146,7 +152,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
}
|
||||
await prefs.setBool('alarm_enabled', _alarmEnabled);
|
||||
await prefs.setInt('minutes_before', _minutesBefore);
|
||||
await prefs.setString('plural', _plural);
|
||||
await prefs.setBool('valid_time', _validTime);
|
||||
}
|
||||
|
||||
@@ -208,7 +213,10 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
} catch (e) {
|
||||
_showSnack('Network Error: $e');
|
||||
} finally {
|
||||
setState(() => _loading = false);
|
||||
setState(() {
|
||||
_loading = false;
|
||||
_validTime = true;
|
||||
});
|
||||
}
|
||||
|
||||
if (_alarmEnabled) {
|
||||
@@ -377,7 +385,9 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
}
|
||||
|
||||
String? _validateTime(String? value) {
|
||||
_validTime = false;
|
||||
setState(() {
|
||||
_validTime = false;
|
||||
});
|
||||
if (value == null || !RegExp(r'^\d{2}:\d{2}$').hasMatch(value)) {
|
||||
return 'Use HH:MM Format';
|
||||
}
|
||||
@@ -385,10 +395,18 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
final m = int.parse(value.substring(3, 5));
|
||||
if (h > 23) return 'Hour Must Be 0–23';
|
||||
if (m > 59) return 'Minute Must Be 0–59';
|
||||
_validTime = true;
|
||||
setState(() {
|
||||
_validTime = true;
|
||||
});
|
||||
return null; // valid
|
||||
}
|
||||
|
||||
void _calcPlural() {
|
||||
setState(() {
|
||||
_plural = (_minutesBefore == 1) ? '' : 's';
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -535,6 +553,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
children: [
|
||||
if (!_alarmEnabled)
|
||||
Expanded(
|
||||
flex: _validTime ? 6 : 4,
|
||||
child: TextField(
|
||||
controller: _minutesController,
|
||||
keyboardType: TextInputType.number,
|
||||
@@ -552,31 +571,45 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
} else {
|
||||
_minuteErrorText = 'Invalid Minute Value';
|
||||
}
|
||||
_plural = (_minutesBefore == 1) ? '' : 's';
|
||||
_calcPlural();
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
//Expanded(
|
||||
// flex: 3,
|
||||
// child: Center(
|
||||
// child:
|
||||
// _validTime ? Text("") : Text("Sunset Time Needed") ,
|
||||
// ),
|
||||
//),
|
||||
|
||||
// --- Toggle ---
|
||||
Expanded(
|
||||
child:
|
||||
_validTime
|
||||
? SwitchListTile(
|
||||
title: Text(
|
||||
_alarmEnabled ? 'Sunset Alarm Enabled' : "",
|
||||
),
|
||||
subtitle: Text(
|
||||
_validTime
|
||||
? _alarmEnabled
|
||||
? '${_minutesBefore} Minute${_plural} Before @ $_alarmDisplayTime'
|
||||
: ""
|
||||
: "Add Time",
|
||||
),
|
||||
value: _alarmEnabled,
|
||||
onChanged: _toggleAlarm,
|
||||
)
|
||||
: Center(child: Text("Sunset Time Invalid")),
|
||||
flex: _validTime ? 7 : 5,
|
||||
child: SwitchListTile(
|
||||
title: Center(
|
||||
child: Text(
|
||||
_validTime
|
||||
? _alarmEnabled
|
||||
? "Sunset Alarm Enabled"
|
||||
: "Enable"
|
||||
: "Disabled",
|
||||
),
|
||||
),
|
||||
subtitle: Center(
|
||||
child: Text(
|
||||
_validTime
|
||||
? _alarmEnabled
|
||||
? "${_minutesBefore} Minute${_plural} Before @ $_alarmDisplayTime"
|
||||
: "Sunset Alarm"
|
||||
: "Enter Time",
|
||||
),
|
||||
),
|
||||
value: _validTime ? _alarmEnabled : false,
|
||||
onChanged: _validTime ? _toggleAlarm : null,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Reference in new issue
Block a user