Skip to content

Commit eacbb49

Browse files
committed
Intro/Settings screen
1 parent c16932c commit eacbb49

8 files changed

Lines changed: 687 additions & 31 deletions

File tree

lib/app_preferences.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import 'package:shared_preferences/shared_preferences.dart';
2+
3+
const String _keyDistanceUnit = 'distance_unit';
4+
5+
enum DistanceUnit { meters, miles }
6+
7+
extension DistanceUnitX on DistanceUnit {
8+
String get label => this == DistanceUnit.meters ? 'Meters' : 'Miles';
9+
String get short => this == DistanceUnit.meters ? 'm' : 'mi';
10+
}
11+
12+
/// User preferences (distance display, etc.).
13+
class AppPreferences {
14+
static Future<DistanceUnit> getDistanceUnit() async {
15+
final prefs = await SharedPreferences.getInstance();
16+
final v = prefs.getString(_keyDistanceUnit);
17+
if (v == 'miles') return DistanceUnit.miles;
18+
return DistanceUnit.meters;
19+
}
20+
21+
static Future<void> setDistanceUnit(DistanceUnit unit) async {
22+
final prefs = await SharedPreferences.getInstance();
23+
await prefs.setString(_keyDistanceUnit, unit == DistanceUnit.miles ? 'miles' : 'meters');
24+
}
25+
26+
/// Converts meters to display value; callers use [AppPreferences.getDistanceUnit] for unit.
27+
static double metersToDisplay(double meters, DistanceUnit unit) {
28+
if (unit == DistanceUnit.miles) return meters * 0.000621371;
29+
return meters;
30+
}
31+
32+
static String formatDistance(double meters, DistanceUnit unit) {
33+
final v = metersToDisplay(meters, unit);
34+
if (unit == DistanceUnit.miles) return '${v.toStringAsFixed(1)} mi';
35+
return '${v.toStringAsFixed(0)} m';
36+
}
37+
}

lib/home.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ class HomeMenu extends StatelessWidget {
5252
Navigator.pushNamed(context, '/leaderboard');
5353
},
5454
),
55+
HomeMenuButton(
56+
text: 'Settings',
57+
icon: Icon(Icons.settings),
58+
onPressed: () {
59+
Navigator.pushNamed(context, '/settings');
60+
},
61+
),
5562
/*HomeMenuButton(
5663
text: 'Upload Photo',
5764
onPressed: () {

0 commit comments

Comments
 (0)