Commit 0262627
Changed files (18)
android
app
src
assets
ios
Runner
lib
test
model
android/app/src/main/AndroidManifest.xml
@@ -1,5 +1,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.derdilla.blood_pressure_app">
+ <queries>
+ <intent>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="https" />
+ </intent>
+
+ </queries>
<application
android:label="blood pressure app"
android:name="${applicationName}"
android/build.gradle
@@ -26,6 +26,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
delete rootProject.buildDir
}
assets/dark/github-mark.png
Binary file
assets/github-mark.png
Binary file
ios/Runner/Info.plist
@@ -51,5 +51,9 @@
<true/>
<key>UIFileSharingEnabled</key>
<true/>
+ <key>LSApplicationQueriesSchemes</key>
+ <array>
+ <string>https</string>
+ </array>
</dict>
</plist>
lib/components/measurement_graph.dart
@@ -6,7 +6,7 @@ import 'package:fl_chart/fl_chart.dart';
import 'package:provider/provider.dart';
import 'dart:math';
import 'package:intl/intl.dart';
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
class _LineChart extends StatelessWidget {
final double height;
lib/components/measurement_list.dart
@@ -1,11 +1,10 @@
import 'dart:collection';
import 'package:blood_pressure_app/model/blood_pressure.dart';
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:intl/intl.dart';
-import 'dart:io' show Platform;
class MeasurementList extends StatelessWidget {
late final _tableElementsSizes;
lib/components/complex_settings.dart → lib/components/settings_widgets.dart
@@ -28,6 +28,7 @@ class SettingsTile extends StatelessWidget {
child: Row(
children: [
lead,
+ const SizedBox(width: 15,),
SizedBox(
width: MediaQuery.of(context).size.width - 150,
child: (() {
@@ -192,6 +193,7 @@ class _SliderSettingsTileState extends State<SliderSettingsTile> {
child: Row(
children: [
lead,
+ const SizedBox(width: 15,),
SizedBox(
width: MediaQuery.of(context).size.width - 150,
child: Column(
@@ -253,7 +255,7 @@ class SettingsSection extends StatelessWidget {
),
),
Container(
- padding: const EdgeInsets.only(left: 20, right: 20),
+ padding: const EdgeInsets.only(left: 10, right: 20),
child: Column(
children: children,
),
lib/model/settings.dart → lib/model/settings_store.dart
File renamed without changes
lib/screens/add_measurement.dart
@@ -1,5 +1,5 @@
import 'package:blood_pressure_app/model/blood_pressure.dart';
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
@@ -151,6 +151,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
),
validator: (String? value) {
_note = value ?? "";
+ return null;
},
),
const SizedBox(
lib/screens/enter_timeformat.dart
@@ -1,8 +1,8 @@
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
-import 'package:url_launcher/url_launcher.dart' show launch;
+import 'package:url_launcher/url_launcher.dart' show launchUrl;
class EnterTimeFormatScreen extends StatefulWidget {
@@ -37,7 +37,7 @@ class _EnterTimeFormatScreenState extends State<EnterTimeFormatScreen> {
text: 'For a full list of valid formats please look here.',
style: const TextStyle(color: Colors.blue),
recognizer: TapGestureRecognizer()
- ..onTap = () { launch('https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html');
+ ..onTap = () { launchUrl(Uri.parse('https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html'));
},
),
),
lib/screens/home.dart
@@ -1,4 +1,4 @@
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:blood_pressure_app/screens/add_measurement.dart';
import 'package:blood_pressure_app/screens/settings.dart';
import 'package:blood_pressure_app/screens/statistics.dart';
lib/screens/settings.dart
@@ -1,9 +1,10 @@
-import 'package:blood_pressure_app/components/complex_settings.dart';
+import 'package:blood_pressure_app/components/settings_widgets.dart';
import 'package:blood_pressure_app/model/blood_pressure.dart';
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:blood_pressure_app/screens/enter_timeformat.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
+import 'package:url_launcher/url_launcher.dart';
class SettingsPage extends StatelessWidget {
const SettingsPage({super.key});
@@ -64,7 +65,9 @@ class SettingsPage extends StatelessWidget {
title: const Text('enable dark mode'),
disabled: settings.followSystemDarkMode,
),
- SliderSettingsTile(title: const Text('icon size'),
+ SliderSettingsTile(
+ title: const Text('icon size'),
+ leading: const Icon(Icons.zoom_in),
onChanged: (double value) {
settings.iconSize = value;
},
@@ -102,6 +105,7 @@ class SettingsPage extends StatelessWidget {
initialValue: settings.useExportCompatability,
title: const Text('compatability export'),
description: const Text('sets export mime type to text instead of csv'),
+ leading: const Icon(Icons.support),
onToggle: (value) {
settings.useExportCompatability = value;
}
@@ -133,6 +137,36 @@ class SettingsPage extends StatelessWidget {
}),
),
],
+ ),
+ SettingsSection(
+ title: const Text('about'),
+ children: [
+ SettingsTile(
+ title: const Text('source code'),
+ leading: SizedBox(
+ width: 30,
+ height: 30,
+ child: Image.asset('assets/github-mark.png'),
+ ),
+ onPressed: (context) async {
+ var url = Uri.parse('https://github.com/NobodyForNothing/blood-pressure-monitor-fl');
+ if (await canLaunchUrl(url)) {
+ await launchUrl(url, mode: LaunchMode.externalApplication);
+ } else {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(content: Text('Can\'t open URL:\nhttps://github.com/NobodyForNothing/blood-pressure-monitor-fl')));
+ }
+ },
+ ),
+ SettingsTile(
+ title: const Text('3rd party licenses'),
+ leading: const Icon(Icons.policy_outlined),
+ trailing: Icon(Icons.arrow_forward_ios, color: Theme.of(context).highlightColor,),
+ onPressed: (context) {
+ showLicensePage(context: context);
+ },
+ ),
+ ]
)
],
);
lib/screens/statistics.dart
@@ -1,5 +1,5 @@
import 'package:blood_pressure_app/model/blood_pressure.dart';
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@@ -272,7 +272,7 @@ Widget futureInt(Future<int> value) {
}
assert(snapshot.hasData);
if ((snapshot.data ?? -1) < 0) {
- return const Text('invalid data');
+ return const Text('-');
}
return Text(snapshot.data?.toString() ?? 'error');
}
lib/main.dart
@@ -1,11 +1,8 @@
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:blood_pressure_app/model/blood_pressure.dart';
import 'package:blood_pressure_app/screens/home.dart';
-import 'dart:io' show Platform;
-import 'package:sqflite_common_ffi/sqflite_ffi.dart';
-import 'package:sqflite/sqflite.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
test/model/settings_test.dart
@@ -1,4 +1,4 @@
-import 'package:blood_pressure_app/model/settings.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
pubspec.lock
@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: async
- sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
- version: "2.10.0"
+ version: "2.11.0"
async_extension:
dependency: transitive
description:
@@ -45,10 +45,10 @@ packages:
dependency: transitive
description:
name: characters
- sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+ sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.3.0"
clock:
dependency: transitive
description:
@@ -61,10 +61,10 @@ packages:
dependency: transitive
description:
name: collection
- sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+ sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
url: "https://pub.dev"
source: hosted
- version: "1.17.0"
+ version: "1.17.1"
cross_file:
dependency: transitive
description:
@@ -228,10 +228,10 @@ packages:
dependency: transitive
description:
name: js
- sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+ sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
- version: "0.6.5"
+ version: "0.6.7"
json_object_mapper:
dependency: transitive
description:
@@ -244,10 +244,10 @@ packages:
dependency: transitive
description:
name: lints
- sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
+ sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015"
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.1.0"
markdown:
dependency: transitive
description:
@@ -260,10 +260,10 @@ packages:
dependency: transitive
description:
name: matcher
- sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
+ sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
url: "https://pub.dev"
source: hosted
- version: "0.12.13"
+ version: "0.12.15"
material_color_utilities:
dependency: transitive
description:
@@ -276,10 +276,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+ sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
- version: "1.8.0"
+ version: "1.9.1"
mime:
dependency: transitive
description:
@@ -300,10 +300,10 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+ sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
- version: "1.8.2"
+ version: "1.8.3"
path_provider:
dependency: transitive
description:
@@ -388,10 +388,10 @@ packages:
dependency: transitive
description:
name: resource_portable
- sha256: "7b33fa68d1f088227f0d4ba6b1476ea9784fd320fc38385d938d641dc7b6ca0b"
+ sha256: "004f8c5ed07557ad9a21aa075214b6be2b968309a7dfc465fa0aa85e4002518e"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
share_plus:
dependency: "direct main"
description:
@@ -513,10 +513,10 @@ packages:
dependency: "direct main"
description:
name: sqflite
- sha256: "3a82c9a216b46b88617e3714dd74227eaca20c501c4abcc213e56db26b9caa00"
+ sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9
url: "https://pub.dev"
source: hosted
- version: "2.2.8+2"
+ version: "2.2.8+4"
sqflite_common:
dependency: transitive
description:
@@ -537,10 +537,10 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: a3ba4b66a7ab170ce7aa3f5ac43c19ee8d6637afbe7b7c95c94112b4f4d91566
+ sha256: "2cef47b59d310e56f8275b13734ee80a9cf4a48a43172020cb55a620121fbf66"
url: "https://pub.dev"
source: hosted
- version: "1.11.0"
+ version: "1.11.1"
stack_trace:
dependency: transitive
description:
@@ -593,10 +593,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
+ sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
url: "https://pub.dev"
source: hosted
- version: "0.4.16"
+ version: "0.5.1"
typed_data:
dependency: transitive
description:
@@ -617,10 +617,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
- sha256: "22f8db4a72be26e9e3a4aa3f194b1f7afbc76d20ec141f84be1d787db2155cbd"
+ sha256: "7aac14be5f4731b923cc697ae2d42043945076cd0dbb8806baecc92c1dc88891"
url: "https://pub.dev"
source: hosted
- version: "6.0.31"
+ version: "6.0.33"
url_launcher_ios:
dependency: transitive
description:
@@ -702,5 +702,5 @@ packages:
source: hosted
version: "1.0.0"
sdks:
- dart: ">=2.19.6 <3.0.0"
+ dart: ">=3.0.0-417 <3.0.2"
flutter: ">=3.3.0"
pubspec.yaml
@@ -68,16 +68,8 @@ flutter:
# the material Icons class.
uses-material-design: true
- # To add assets to your application, add an assets section, like this:
- # assets:
- # - images/a_dot_burr.jpeg
- # - images/a_dot_ham.jpeg
-
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/assets-and-images/#resolution-aware
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/assets-and-images/#from-packages
+ assets:
+ - assets/github-mark.png
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a