Commit 279c8ab
Changed files (7)
android
app
lib
android/app/build.gradle
@@ -54,8 +54,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion
- versionCode 4
- versionName "0.3"
+ versionCode 5
+ versionName "0.3.1"
}
signingConfigs {
lib/model/settings.dart
@@ -18,6 +18,8 @@ class Settings extends ChangeNotifier {
late int _graphStepSize;
late DateTime _graphStart;
late DateTime _graphEnd;
+ late bool _followSystemDarkMode;
+ late bool _darkMode;
Settings._create();
Future<void> _asyncInit() async {
@@ -57,11 +59,15 @@ class Settings extends ChangeNotifier {
var pGraphStepSize = _getSetting('_graphStepSize');
var pGraphStart = _getSetting('_graphStart');
var pGraphEnd = _getSetting('_graphEnd');
+ var pFollowSystemDarkMode = _getSetting('_followSystemDarkMode');
+ var pDarkMode = _getSetting('_darkMode');
// var ...
_graphStepSize = (await pGraphStepSize as int?) ?? TimeStep.day;
_graphStart = DateTime.fromMillisecondsSinceEpoch((await pGraphStart as int?) ?? -1);
_graphEnd = DateTime.fromMillisecondsSinceEpoch((await pGraphEnd as int?) ?? -1);
+ _followSystemDarkMode = ((await pFollowSystemDarkMode as int?) ?? "1") == "1" ? true : false;
+ _darkMode = ((await pDarkMode as int?) ?? "1") == "1" ? true : false;
// ...
}
@@ -91,6 +97,22 @@ class Settings extends ChangeNotifier {
_saveSetting('_graphEnd', newGraphEnd.millisecondsSinceEpoch);
notifyListeners();
}
+ bool get followSystemDarkMode {
+ return _followSystemDarkMode;
+ }
+ set followSystemDarkMode(bool newSetting) {
+ _followSystemDarkMode = newSetting;
+ _saveSetting('_followSystemDarkMode', newSetting ? 1 : 0);
+ notifyListeners();
+ }
+ bool get darkMode {
+ return _darkMode;
+ }
+ set darkMode(bool newSetting) {
+ _darkMode = newSetting;
+ _saveSetting('_darkMode', newSetting ? 1 : 0);
+ notifyListeners();
+ }
}
lib/screens/home.dart
@@ -1,4 +1,5 @@
import 'package:blood_pressure_app/screens/add_measurement.dart';
+import 'package:blood_pressure_app/screens/settings.dart';
import 'package:flutter/material.dart';
import 'package:blood_pressure_app/components/measurement_graph.dart';
import 'package:blood_pressure_app/components/measurement_list.dart';
@@ -33,10 +34,26 @@ class AppHome extends StatelessWidget {
),
),
floatingActionButton:
- Container(
- height: 110,
+ SizedBox(
+ height: 150,
child: Column(
children: [
+ Ink(
+ decoration: ShapeDecoration(
+ shape: const CircleBorder(),
+ color: Theme.of(context).unselectedWidgetColor
+ ),
+ child: IconButton(
+ icon: const Icon(Icons.settings),
+ onPressed: () {
+ Navigator.push(
+ context,
+ MaterialPageRoute(builder: (context) => const SettingsScreen()),
+ );
+ },
+ ),
+ ),
+ const SizedBox(height: 10,),
Ink(
decoration: ShapeDecoration(
shape: const CircleBorder(),
lib/screens/settings.dart
@@ -1,1 +1,52 @@
-// TODO
\ No newline at end of file
+import 'package:blood_pressure_app/model/settings.dart';
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+import 'package:settings_ui/settings_ui.dart';
+
+class SettingsScreen extends StatelessWidget {
+ const SettingsScreen({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: const Text('Settings'),
+ backgroundColor: Theme.of(context).primaryColor,
+ ),
+ body: Consumer<Settings>(
+ builder: (context, settings, child) {
+ return SettingsList(sections: [
+ SettingsSection(
+ title: const Text('common'),
+ tiles: <SettingsTile>[
+ SettingsTile.switchTile(
+ initialValue: settings.followSystemDarkMode,
+ onToggle: (value) {
+ settings.followSystemDarkMode = value;
+ },
+ leading: const Icon(Icons.auto_mode),
+ title: const Text('follow system dark mode')
+ ),
+ SettingsTile.switchTile(
+ initialValue: (() {
+ if (settings.followSystemDarkMode) {
+ return MediaQuery.of(context).platformBrightness == Brightness.dark;
+ }
+ return settings.darkMode;
+ })(),
+ onToggle: (value) {
+ settings.darkMode = value;
+ },
+ leading: const Icon(Icons.dark_mode),
+ title: const Text('enable dark mode'),
+ enabled: !settings.followSystemDarkMode,
+ ),
+ ]
+ )
+ ]);
+ }
+ ),
+ );
+ }
+
+}
\ No newline at end of file
lib/main.dart
@@ -37,20 +37,32 @@ class AppRoot extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return MaterialApp(
- title: 'Blood Pressure Logger',
- theme: ThemeData(
- primaryColor: Colors.teal
- ),
- darkTheme: ThemeData(
- brightness: Brightness.dark,
- canvasColor: Colors.black,
- primaryColor: Colors.teal.shade400,
- iconTheme: const IconThemeData(color: Colors.black)
- ),
- themeMode: ThemeMode.system,
- home: const AppHome(),
- );
+ return Consumer<Settings>(
+ builder: (context, settings, child) {
+ late var mode;
+ if (settings.followSystemDarkMode) {
+ mode = ThemeMode.system;
+ } else if (settings.darkMode) {
+ mode = ThemeMode.dark;
+ } else {
+ mode = ThemeMode.light;
+ }
+
+ return MaterialApp(
+ title: 'Blood Pressure App',
+ theme: ThemeData(
+ primaryColor: Colors.teal
+ ),
+ darkTheme: ThemeData(
+ brightness: Brightness.dark,
+ canvasColor: Colors.black,
+ primaryColor: Colors.teal.shade400,
+ iconTheme: const IconThemeData(color: Colors.black)
+ ),
+ themeMode: mode,
+ home: const AppHome(),
+ );
+ });
}
}
pubspec.lock
@@ -304,6 +304,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.0.5"
+ settings_ui:
+ dependency: "direct main"
+ description:
+ name: settings_ui
+ sha256: d9838037cb554b24b4218b2d07666fbada3478882edefae375ee892b6c820ef3
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
share_plus:
dependency: "direct main"
description:
pubspec.yaml
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
-version: 0.3.0
+version: 0.3.1
environment:
sdk: '>=2.19.6 <3.0.0'
@@ -42,6 +42,7 @@ dependencies:
fl_chart: ^0.62.0
file_saver: ^0.2.1
share_plus: ^4.5.3
+ settings_ui: ^2.0.2
dev_dependencies:
flutter_test: