Commit 4e42d54
Changed files (16)
app
integration_test
lib
model
export_import
storage
screens
subsettings
test
ui
components
windows
app/integration_test/add_measurement_test.dart
@@ -6,6 +6,7 @@ import 'package:blood_pressure_app/screens/home_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
+import 'package:health_data_store/health_data_store.dart';
import 'package:integration_test/integration_test.dart';
import '../test/ui/components/settings/color_picker_list_tile_test.dart';
@@ -82,12 +83,12 @@ void main() {
expect(find.text(localizations.loading), findsNothing);
expect(find.byType(MeasurementListRow), findsOneWidget);
- final submittedRecord = tester.widget<MeasurementListRow>(find.byType(MeasurementListRow)).record;
- expect(submittedRecord.systolic, 123);
- expect(submittedRecord.diastolic, 67);
- expect(submittedRecord.pulse, 56);
- expect(submittedRecord.needlePin?.color.value, Colors.red.value);
- expect(submittedRecord.notes, 'some test sample note');
+ final submittedRecord = tester.widget<MeasurementListRow>(find.byType(MeasurementListRow)).data;
+ expect(submittedRecord.sys, 123);
+ expect(submittedRecord.dia, 67);
+ expect(submittedRecord.pul, 56);
+ expect(submittedRecord.color, Colors.red.value);
+ expect(submittedRecord.note, 'some test sample note');
expect(find.text('some test sample note'), findsNothing);
await tester.tap(find.byType(MeasurementListRow));
app/lib/components/dialoges/add_measurement_dialoge.dart
@@ -264,7 +264,7 @@ class _AddEntryDialogeState extends State<AddEntryDialoge> {
if (widget.settings.bleInput)
BluetoothInput(
settings: widget.settings,
- onMeasurement: (BloodPressureRecord record) => setState(
+ onMeasurement: (record) => setState(
() => _loadFields((record, Note(time: record.time, note: noteController.text, color: color?.value), [])),
),
),
app/lib/components/dialoges/confirm_deletion_dialoge.dart
@@ -4,11 +4,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
/// Show a dialoge that prompts the user to confirm a deletion.
///
/// Returns whether it is ok to proceed with deletion.
-Future<bool> showConfirmDeletionDialoge(BuildContext context) async =>
+///
+/// When [customDescription] is set it is used instead of confirmDeleteDesc.
+Future<bool> showConfirmDeletionDialoge(BuildContext context, [String? customDescription]) async =>
await showDialog<bool>(context: context,
builder: (context) => AlertDialog(
title: Text(AppLocalizations.of(context)!.confirmDelete),
- content: Text(AppLocalizations.of(context)!.confirmDeleteDesc),
+ content: Text(customDescription ?? AppLocalizations.of(context)!.confirmDeleteDesc),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, false),
app/lib/components/bluetooth_input.dart
@@ -11,12 +11,12 @@ import 'package:blood_pressure_app/components/bluetooth_input/input_card.dart';
import 'package:blood_pressure_app/components/bluetooth_input/measurement_failure.dart';
import 'package:blood_pressure_app/components/bluetooth_input/measurement_success.dart';
import 'package:blood_pressure_app/logging.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/storage/storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart' show BluetoothDevice, Guid;
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:health_data_store/health_data_store.dart';
/// Class for inputting measurement through bluetooth.
class BluetoothInput extends StatefulWidget {
@@ -144,11 +144,14 @@ class _BluetoothInputState extends State<BluetoothInput> {
listener: (BuildContext context, BleReadState state) {
if (state is BleReadSuccess) {
final BloodPressureRecord record = BloodPressureRecord(
- state.data.timestamp ?? DateTime.now(),
- state.data.systolic.toInt(), // TODO: use pressure info in data
- state.data.diastolic.toInt(),
- state.data.pulse?.toInt(),
- '',
+ time: state.data.timestamp ?? DateTime.now(),
+ sys: state.data.isMMHG
+ ? Pressure.mmHg(state.data.systolic.toInt())
+ : Pressure.kPa(state.data.systolic),
+ dia: state.data.isMMHG
+ ? Pressure.mmHg(state.data.diastolic.toInt())
+ : Pressure.kPa(state.data.diastolic),
+ pul: state.data.pulse?.toInt(),
);
widget.onMeasurement(record);
setState(() {
app/lib/model/export_import/csv_converter.dart
@@ -142,11 +142,11 @@ class CsvConverter {
// manually trim quotes after https://pub.dev/packages/csv/changelog#600
noteText = noteText.trim();
- if (note.endsWith('"')) {
- note = note.substring(0, note.length - 1);
+ if (noteText.endsWith('"')) {
+ noteText = noteText.substring(0, noteText.length - 1);
}
- if (note.startsWith('"')) {
- note = note.substring(1, note.length);
+ if (noteText.startsWith('"')) {
+ noteText = noteText.substring(1, noteText.length);
}
final record = BloodPressureRecord(
app/lib/model/storage/settings_store.dart
@@ -144,7 +144,7 @@ class Settings extends ChangeNotifier {
'allowMissingValues': allowMissingValues,
'drawRegressionLines': drawRegressionLines,
'startWithAddMeasurementPage': startWithAddMeasurementPage,
- 'useLegacyList': useLegacyList,
+ 'useLegacyList': compactList,
'language': ConvertUtil.serializeLocale(language),
'horizontalGraphLines': horizontalGraphLines.map(jsonEncode).toList(),
'needlePinBarWidth': _needlePinBarWidth,
app/lib/screens/subsettings/delete_data_screen.dart
@@ -1,10 +1,10 @@
-import 'package:blood_pressure_app/model/blood_pressure/model.dart';
+import 'package:blood_pressure_app/components/dialoges/confirm_deletion_dialoge.dart';
import 'package:blood_pressure_app/model/storage/export_columns_store.dart';
import 'package:blood_pressure_app/model/storage/storage.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:health_data_store/health_data_store.dart';
-import 'package:provider/provider.dart';
/// Screen that allows mass deleting data entered in the app.
class DeleteDataScreen extends StatefulWidget {
@@ -29,54 +29,54 @@ class _DeleteDataScreenState extends State<DeleteDataScreen> {
),
body: ListView(
children: [
- // FIXME: check everything still works
ListTile(
- leading: const Icon(Icons.timeline),
- title: Text(localizations.deleteAllMeasurements),
+ leading: const Icon(Icons.settings),
+ title: Text(localizations.deleteAllSettings),
trailing: const Icon(Icons.delete_forever),
onTap: () async {
final messanger = ScaffoldMessenger.of(context);
- if (await _showDeleteDialoge(context, localizations)) {
- final model = context.read<BloodPressureModel>();
- final previousRecords = await model.all;
- for (final record in previousRecords) {
- await model.delete(record.creationTime);
- }
+ if (await showConfirmDeletionDialoge(context, localizations.warnDeletionUnrecoverable)) {
+ context.read<Settings>().reset();
+ context.read<ExportSettings>().reset();
+ context.read<CsvExportSettings>().reset();
+ context.read<PdfExportSettings>().reset();
+ context.read<IntervallStoreManager>().reset();
+ context.read<ExportColumnsManager>().reset();
messanger.showSnackBar(SnackBar(
content: Text(localizations.deletionConfirmed),
- action: SnackBarAction(
- label: localizations.btnUndo,
- onPressed: () => model.addAll(previousRecords, context),
- ),
));
}
},
),
ListTile(
- leading: const Icon(Icons.settings),
- title: Text(localizations.deleteAllSettings),
+ leading: const Icon(Icons.timeline),
+ title: Text(localizations.deleteAllMeasurements),
trailing: const Icon(Icons.delete_forever),
onTap: () async {
final messanger = ScaffoldMessenger.of(context);
- if (await _showDeleteDialoge(context, localizations)) {
- context.read<Settings>().reset();
- context.read<ExportSettings>().reset();
- context.read<CsvExportSettings>().reset();
- context.read<PdfExportSettings>().reset();
- context.read<IntervallStoreManager>().reset();
- context.read<ExportColumnsManager>().reset();
+ if (await showConfirmDeletionDialoge(context, localizations.warnDeletionUnrecoverable)) {
+ final repo = RepositoryProvider.of<BloodPressureRepository>(context);
+ final previousRecords = await repo.get(DateRange.all());
+ for (final record in previousRecords) {
+ await repo.remove(record);
+ }
messanger.showSnackBar(SnackBar(
content: Text(localizations.deletionConfirmed),
+ action: SnackBarAction(
+ label: localizations.btnUndo,
+ onPressed: () => Future.forEach(previousRecords, repo.add),
+ ),
));
}
},
),
+ // FIXME: delete notes
ListTile(
leading: const Icon(Icons.medication),
title: Text(localizations.deleteAllMedicineIntakes),
trailing: const Icon(Icons.delete_forever),
onTap: () async {
- if (await _showDeleteDialoge(context, localizations)) {
+ if (await showConfirmDeletionDialoge(context, localizations.warnDeletionUnrecoverable)) {
final repo = context.read<MedicineIntakeRepository>();
final allIntakes = await repo.get(DateRange(start: DateTime.fromMillisecondsSinceEpoch(0), end: DateTime.now()));
for (final intake in allIntakes) {
@@ -93,29 +93,4 @@ class _DeleteDataScreenState extends State<DeleteDataScreen> {
),
);
}
-
- /// Show dialoge to confirm irrevocable deletion.
- Future<bool> _showDeleteDialoge(BuildContext context, AppLocalizations localizations) async => await showDialog<bool>(context: context, builder: (context) =>
- AlertDialog(
- title: Text(localizations.confirmDelete),
- content: Text(localizations.warnDeletionUnrecoverable),
- actionsAlignment: MainAxisAlignment.spaceBetween,
- actions: [
- TextButton(
- onPressed: () => Navigator.pop(context, false),
- child: Text(AppLocalizations.of(context)!.btnCancel),),
- Theme(
- data: ThemeData.from(
- colorScheme: ColorScheme.fromSeed(seedColor: Colors.red, brightness: Theme.of(context).brightness),
- useMaterial3: true,
- ),
- child: ElevatedButton.icon(
- onPressed: () => Navigator.pop(context, true),
- icon: const Icon(Icons.delete_forever),
- label: Text(AppLocalizations.of(context)!.btnConfirm),
- ),
- ),
- ],
- ),
- ) ?? false;
}
app/lib/screens/home_screen.dart
@@ -92,18 +92,17 @@ class AppHome extends StatelessWidget {
}
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values);
return Consumer<Settings>(builder: (context, settings, child) => Column(
- verticalDirection: VerticalDirection.up,
- children: [
- SizedBox.square(
- dimension: 75,
- child: FittedBox(
- child: FloatingActionButton(
- heroTag: 'floatingActionAdd',
- tooltip: localizations.addMeasurement,
- autofocus: true,
- onPressed: context.createEntry,
- child: const Icon(Icons.add,),
- ),
+ verticalDirection: VerticalDirection.up,
+ children: [
+ SizedBox.square(
+ dimension: 75,
+ child: FittedBox(
+ child: FloatingActionButton(
+ heroTag: 'floatingActionAdd',
+ tooltip: localizations.addMeasurement,
+ autofocus: true,
+ onPressed: context.createEntry,
+ child: const Icon(Icons.add,),
),
),
),
app/lib/app.dart
@@ -1,8 +1,6 @@
import 'dart:io';
import 'package:blood_pressure_app/components/consistent_future_builder.dart';
-import 'package:blood_pressure_app/model/blood_pressure/medicine/intake_history.dart';
-import 'package:blood_pressure_app/model/blood_pressure/model.dart';
import 'package:blood_pressure_app/model/export_import/export_configuration.dart';
import 'package:blood_pressure_app/model/storage/db/config_dao.dart';
import 'package:blood_pressure_app/model/storage/db/config_db.dart';
@@ -12,13 +10,17 @@ import 'package:blood_pressure_app/model/storage/update_legacy_settings.dart';
import 'package:blood_pressure_app/screens/home_screen.dart';
import 'package:blood_pressure_app/screens/loading_screen.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:fluttertoast/fluttertoast.dart';
+import 'package:health_data_store/health_data_store.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:path/path.dart';
import 'package:provider/provider.dart';
import 'package:sqflite/sqflite.dart';
+import 'model/blood_pressure/update_legacy_entries.dart';
+
/// Base class for the entire app.
///
/// Sets up databases, performs update logic and provides styles and ancestors
@@ -37,7 +39,7 @@ class App extends StatefulWidget {
class _AppState extends State<App> {
/// Database object for app settings.
ConfigDB? _configDB;
- BloodPressureModel? _bloodPressureModel;
+ Database? _entryDB;
/// The result of the first [_loadApp] call.
///
@@ -48,8 +50,8 @@ class _AppState extends State<App> {
void dispose() {
_configDB?.database.close();
_configDB = null;
- _bloodPressureModel?.close();
- _bloodPressureModel = null;
+ _entryDB?.close(); // TODO: check this is safe
+ _entryDB = null;
super.dispose();
}
@@ -76,10 +78,7 @@ class _AppState extends State<App> {
} on FileSystemException { }
}
- // 2 different db files
- _bloodPressureModel = await BloodPressureModel.create();
_configDB = await ConfigDB.open();
-
final configDao = ConfigDao(_configDB!);
final settings = await configDao.loadSettings(0);
@@ -89,22 +88,23 @@ class _AppState extends State<App> {
final intervalStorageManager = await IntervallStoreManager.load(configDao, 0);
final exportColumnsManager = await configDao.loadExportColumnsManager(0);
- // TODO: unify with blood pressure model (#257)
- late final IntakeHistory intakeHistory;
- try {
- if (settings.medications.isNotEmpty) {
- final intakeString = File(join(await getDatabasesPath(), 'medicine.intakes')).readAsStringSync();
- intakeHistory = IntakeHistory.deserialize(intakeString, settings.medications);
- } else {
- intakeHistory = IntakeHistory([]);
- }
- } catch (e, stack) {
- assert(e is PathNotFoundException, '$e\n$stack');
- intakeHistory = IntakeHistory([]);
- }
- intakeHistory.addListener(() async {
- File(join(await getDatabasesPath(), 'medicine.intakes')).writeAsStringSync(intakeHistory.serialize());
- });
+ _entryDB = await openDatabase(
+ join(await getDatabasesPath(), 'bp.db'),
+ );
+ final db = await HealthDataStore.load(_entryDB!);
+ final bpRepo = db.bpRepo;
+ final noteRepo = db.noteRepo;
+ final medRepo = db.medRepo;
+ final intakeRepo = db.intakeRepo;
+
+ await updateLegacyEntries(
+ settings,
+ bpRepo,
+ noteRepo,
+ medRepo,
+ intakeRepo,
+ );
+ // TODO: document how data is stored in the app
// update logic
if (settings.lastVersion == 0) {
@@ -131,16 +131,25 @@ class _AppState extends State<App> {
// Reset the step size intervall to current on startup
intervalStorageManager.mainPage.setToMostRecentIntervall();
- _loadedChild = MultiProvider(providers: [
- ChangeNotifierProvider(create: (context) => _bloodPressureModel!),
- ChangeNotifierProvider(create: (context) => settings),
- ChangeNotifierProvider(create: (context) => exportSettings),
- ChangeNotifierProvider(create: (context) => csvExportSettings),
- ChangeNotifierProvider(create: (context) => pdfExportSettings),
- ChangeNotifierProvider(create: (context) => intervalStorageManager),
- ChangeNotifierProvider(create: (context) => exportColumnsManager),
- ChangeNotifierProvider(create: (context) => intakeHistory),
- ], child: _buildAppRoot(),);
+ _loadedChild = MultiProvider(
+ providers: [
+ ChangeNotifierProvider(create: (context) => settings),
+ ChangeNotifierProvider(create: (context) => exportSettings),
+ ChangeNotifierProvider(create: (context) => csvExportSettings),
+ ChangeNotifierProvider(create: (context) => pdfExportSettings),
+ ChangeNotifierProvider(create: (context) => intervalStorageManager),
+ ChangeNotifierProvider(create: (context) => exportColumnsManager),
+ ],
+ child: MultiRepositoryProvider(
+ providers: [
+ RepositoryProvider(create: (context) => bpRepo),
+ RepositoryProvider(create: (context) => noteRepo),
+ RepositoryProvider(create: (context) => medRepo),
+ RepositoryProvider(create: (context) => intakeRepo),
+ ],
+ child: _buildAppRoot(),
+ ),
+ );
return _loadedChild!;
}
app/test/model/json_serialization_test.dart
@@ -94,7 +94,6 @@ void main() {
useLegacyList: false,
horizontalGraphLines: [HorizontalGraphLine(Colors.blue, 1230)],
bottomAppBars: true,
- medications: [mockMedicine(), mockMedicine(defaultDosis: 42)],
knownBleDev: ['a', 'b'],
bleInput: false,
);
app/test/ui/components/measurement_list/measurement_list_test.dart
@@ -3,7 +3,7 @@ import 'package:blood_pressure_app/components/measurement_list/measurement_list_
import 'package:blood_pressure_app/model/storage/settings_store.dart';
import 'package:flutter_test/flutter_test.dart';
-import '../../../model/analyzer_test.dart';
+import '../../../model/export_import/record_formatter_test.dart';
import '../util.dart';
void main() {
@@ -11,14 +11,12 @@ void main() {
await tester.pumpWidget(materialApp(
MeasurementList(
settings: Settings(),
- records: [
- mockRecord(time: DateTime(2020), sys: 2020),
- mockRecord(time: DateTime(2021), sys: 2021),
- mockRecord(time: DateTime(2022), sys: 2022),
- mockRecord(time: DateTime(2023), sys: 2023),
+ entries: [
+ mockEntry(time: DateTime(2020), sys: 2020),
+ mockEntry(time: DateTime(2021), sys: 2021),
+ mockEntry(time: DateTime(2022), sys: 2022),
+ mockEntry(time: DateTime(2023), sys: 2023),
],
- notes: [],
- intakes: [],
),
));
expect(find.byType(MeasurementListRow), findsNWidgets(4));
@@ -31,13 +29,11 @@ void main() {
await tester.pumpWidget(materialApp(
MeasurementList(
settings: Settings(),
- records: [
- mockRecord(time: DateTime.fromMillisecondsSinceEpoch(2000), sys: 2),
- mockRecord(time: DateTime.fromMillisecondsSinceEpoch(4000), sys: 1),
- mockRecord(time: DateTime.fromMillisecondsSinceEpoch(1000), sys: 3),
+ entries: [
+ mockEntry(time: DateTime.fromMillisecondsSinceEpoch(2000), sys: 2),
+ mockEntry(time: DateTime.fromMillisecondsSinceEpoch(4000), sys: 1),
+ mockEntry(time: DateTime.fromMillisecondsSinceEpoch(1000), sys: 3),
],
- notes: [],
- intakes: [],
),
));
expect(find.byType(MeasurementListRow), findsNWidgets(3));
app/test/ui/components/add_measurement_dialoge_test.dart
@@ -155,6 +155,7 @@ void main() {
await tester.pumpWidget(materialApp(
AddEntryDialoge(
settings: settings,
+ availableMeds: [],
),
),);
await tester.pumpAndSettle();
app/test/ui/components/bluetooth_input_test.dart
@@ -6,11 +6,11 @@ import 'package:blood_pressure_app/bluetooth/device_scan_cubit.dart';
import 'package:blood_pressure_app/components/bluetooth_input.dart';
import 'package:blood_pressure_app/components/bluetooth_input/closed_bluetooth_input.dart';
import 'package:blood_pressure_app/components/bluetooth_input/measurement_success.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/storage/storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart' hide BluetoothState;
import 'package:flutter_test/flutter_test.dart';
+import 'package:health_data_store/health_data_store.dart';
import 'util.dart';
@@ -60,9 +60,9 @@ void main() {
expect(reads, hasLength(1));
expect(reads, contains(isA<BloodPressureRecord>()
- .having((p) => p.systolic, 'sys', 123)
- .having((p) => p.diastolic, 'dia', 45)
- .having((p) => p.pulse, 'pul', isNull),
+ .having((p) => p.sys, 'sys', 123)
+ .having((p) => p.dia, 'dia', 45)
+ .having((p) => p.pul, 'pul', isNull),
));
});
app/windows/flutter/generated_plugin_registrant.cc
@@ -6,12 +6,9 @@
#include "generated_plugin_registrant.h"
-#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
- PermissionHandlerWindowsPluginRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
}
app/windows/flutter/generated_plugins.cmake
@@ -3,7 +3,6 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
- permission_handler_windows
url_launcher_windows
)
app/pubspec.lock
@@ -0,0 +1,1218 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _fe_analyzer_shared:
+ dependency: transitive
+ description:
+ name: _fe_analyzer_shared
+ sha256: "5aaf60d96c4cd00fe7f21594b5ad6a1b699c80a27420f8a837f4d68473ef09e3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "68.0.0"
+ _macros:
+ dependency: transitive
+ description: dart
+ source: sdk
+ version: "0.1.5"
+ analyzer:
+ dependency: transitive
+ description:
+ name: analyzer
+ sha256: "21f1d3720fd1c70316399d5e2bccaebb415c434592d778cce8acb967b8578808"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.5.0"
+ app_settings:
+ dependency: "direct main"
+ description:
+ name: app_settings
+ sha256: "09bc7fe0313a507087bec1a3baf555f0576e816a760cbb31813a88890a09d9e5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.6.1"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.11.0"
+ barcode:
+ dependency: transitive
+ description:
+ name: barcode
+ sha256: ab180ce22c6555d77d45f0178a523669db67f95856e3378259ef2ffeb43e6003
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.8"
+ bidi:
+ dependency: transitive
+ description:
+ name: bidi
+ sha256: "1a7d0c696324b2089f72e7671fd1f1f64fef44c980f3cebc84e803967c597b63"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.10"
+ bloc:
+ dependency: transitive
+ description:
+ name: bloc
+ sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.1.4"
+ bloc_test:
+ dependency: "direct dev"
+ description:
+ name: bloc_test
+ sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.1.7"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ build:
+ dependency: transitive
+ description:
+ name: build
+ sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ build_config:
+ dependency: transitive
+ description:
+ name: build_config
+ sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ build_daemon:
+ dependency: transitive
+ description:
+ name: build_daemon
+ sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.2"
+ build_resolvers:
+ dependency: transitive
+ description:
+ name: build_resolvers
+ sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.2"
+ build_runner:
+ dependency: "direct dev"
+ description:
+ name: build_runner
+ sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.11"
+ build_runner_core:
+ dependency: transitive
+ description:
+ name: build_runner_core
+ sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.3.1"
+ built_collection:
+ dependency: transitive
+ description:
+ name: built_collection
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ built_value:
+ dependency: transitive
+ description:
+ name: built_value
+ sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.9.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ charcode:
+ dependency: transitive
+ description:
+ name: charcode
+ sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.1"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ code_builder:
+ dependency: transitive
+ description:
+ name: code_builder
+ sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.10.0"
+ collection:
+ dependency: "direct main"
+ description:
+ name: collection
+ sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.18.0"
+ convert:
+ dependency: "direct main"
+ description:
+ name: convert
+ sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
+ coverage:
+ dependency: transitive
+ description:
+ name: coverage
+ sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.8.0"
+ cross_file:
+ dependency: transitive
+ description:
+ name: cross_file
+ sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.4+1"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ csv:
+ dependency: "direct main"
+ description:
+ name: csv
+ sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.0"
+ dart_style:
+ dependency: transitive
+ description:
+ name: dart_style
+ sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.6"
+ diff_match_patch:
+ dependency: transitive
+ description:
+ name: diff_match_patch
+ sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.4.1"
+ equatable:
+ dependency: transitive
+ description:
+ name: equatable
+ sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.5"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.1"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ file:
+ dependency: "direct dev"
+ description:
+ name: file
+ sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
+ file_picker:
+ dependency: "direct main"
+ description:
+ name: file_picker
+ sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.0.5"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ fl_chart:
+ dependency: "direct main"
+ description:
+ name: fl_chart
+ sha256: "2b7c1f5d867da9a054661641c8f499c55c47c39acccb97b3bc673f5fa9a39e74"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.67.0"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_bloc:
+ dependency: "direct main"
+ description:
+ name: flutter_bloc
+ sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.1.6"
+ flutter_blue_plus:
+ dependency: "direct main"
+ description:
+ name: flutter_blue_plus
+ sha256: ce8241302bf955bfa885457aa571cc215c10444e0c75c3e55d90b5fc05cc7e93
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.32.8"
+ flutter_driver:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ flutter_localizations:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_markdown:
+ dependency: "direct main"
+ description:
+ name: flutter_markdown
+ sha256: "85cc6f7daeae537844c92e2d56e2aff61b00095f8f77913b529ea4be12fc45ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.2+1"
+ flutter_plugin_android_lifecycle:
+ dependency: transitive
+ description:
+ name: flutter_plugin_android_lifecycle
+ sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.20"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ fluttertoast:
+ dependency: "direct main"
+ description:
+ name: fluttertoast
+ sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.2.6"
+ freezed_annotation:
+ dependency: transitive
+ description:
+ name: freezed_annotation
+ sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ frontend_server_client:
+ dependency: transitive
+ description:
+ name: frontend_server_client
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ fuchsia_remote_debug_protocol:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ function_tree:
+ dependency: "direct main"
+ description:
+ name: function_tree
+ sha256: "098f41f8c8d55952fd162cbeb709e8213a709065ab6fbebffe323701c785a259"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.9.1"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ graphs:
+ dependency: transitive
+ description:
+ name: graphs
+ sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.1"
+ health_data_store:
+ dependency: "direct main"
+ description:
+ path: "../health_data_store"
+ relative: true
+ source: path
+ version: "0.1.0+1"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ http_multi_server:
+ dependency: transitive
+ description:
+ name: http_multi_server
+ sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.1"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.2"
+ image:
+ dependency: transitive
+ description:
+ name: image
+ sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.0"
+ integration_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ intl:
+ dependency: "direct main"
+ description:
+ name: intl
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.0"
+ io:
+ dependency: transitive
+ description:
+ name: io
+ sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.1"
+ jsaver:
+ dependency: "direct main"
+ description:
+ name: jsaver
+ sha256: "84136add8bafdde71b30d286bd3ab2629aad0067a94aaf04665956f8e765d205"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.9.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.5"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.5"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
+ macros:
+ dependency: transitive
+ description:
+ name: macros
+ sha256: a8403c89b36483b4cbf9f1fcd24562f483cb34a5c9bf101cf2b0d8a083cf1239
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.0-main.5"
+ markdown:
+ dependency: transitive
+ description:
+ name: markdown
+ sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.2.2"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.16+1"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.1"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "25dfcaf170a0190f47ca6355bdd4552cb8924b430512ff0cafb8db9bd41fe33b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.14.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.5"
+ mockito:
+ dependency: "direct dev"
+ description:
+ name: mockito
+ sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.4.4"
+ mocktail:
+ dependency: transitive
+ description:
+ name: mocktail
+ sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ nested:
+ dependency: transitive
+ description:
+ name: nested
+ sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
+ node_preamble:
+ dependency: transitive
+ description:
+ name: node_preamble
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.0"
+ package_info_plus:
+ dependency: "direct main"
+ description:
+ name: package_info_plus
+ sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.0.0"
+ package_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: package_info_plus_platform_interface
+ sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ path:
+ dependency: "direct main"
+ description:
+ name: path
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.0"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.1"
+ path_provider_platform_interface:
+ dependency: transitive
+ description:
+ name: path_provider_platform_interface
+ sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ path_provider_windows:
+ dependency: transitive
+ description:
+ name: path_provider_windows
+ sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.1"
+ pdf:
+ dependency: "direct main"
+ description:
+ name: pdf
+ sha256: "243f05342fc0bdf140eba5b069398985cdbdd3dbb1d776cf43d5ea29cc570ba6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.10.8"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.2"
+ platform:
+ dependency: transitive
+ description:
+ name: platform
+ sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.4"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ pool:
+ dependency: transitive
+ description:
+ name: pool
+ sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.1"
+ process:
+ dependency: transitive
+ description:
+ name: process
+ sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.2"
+ provider:
+ dependency: "direct main"
+ description:
+ name: provider
+ sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.1.2"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ qr:
+ dependency: transitive
+ description:
+ name: qr
+ sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
+ shared_preferences:
+ dependency: "direct main"
+ description:
+ name: shared_preferences
+ sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.3"
+ shared_preferences_android:
+ dependency: transitive
+ description:
+ name: shared_preferences_android
+ sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.3"
+ shared_preferences_foundation:
+ dependency: transitive
+ description:
+ name: shared_preferences_foundation
+ sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.0"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ shared_preferences_platform_interface:
+ dependency: transitive
+ description:
+ name: shared_preferences_platform_interface
+ sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ shared_preferences_web:
+ dependency: transitive
+ description:
+ name: shared_preferences_web
+ sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ shared_preferences_windows:
+ dependency: transitive
+ description:
+ name: shared_preferences_windows
+ sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ shelf:
+ dependency: transitive
+ description:
+ name: shelf
+ sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ shelf_packages_handler:
+ dependency: transitive
+ description:
+ name: shelf_packages_handler
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ shelf_static:
+ dependency: transitive
+ description:
+ name: shelf_static
+ sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ shelf_web_socket:
+ dependency: transitive
+ description:
+ name: shelf_web_socket
+ sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.99"
+ source_gen:
+ dependency: transitive
+ description:
+ name: source_gen
+ sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ source_map_stack_trace:
+ dependency: transitive
+ description:
+ name: source_map_stack_trace
+ sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ source_maps:
+ dependency: transitive
+ description:
+ name: source_maps
+ sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.10.12"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.0"
+ sqflite:
+ dependency: "direct main"
+ description:
+ name: sqflite
+ sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.3+1"
+ sqflite_common:
+ dependency: transitive
+ description:
+ name: sqflite_common
+ sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ sqflite_common_ffi:
+ dependency: "direct dev"
+ description:
+ name: sqflite_common_ffi
+ sha256: "4d6137c29e930d6e4a8ff373989dd9de7bac12e3bc87bce950f6e844e8ad3bb5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.3"
+ sqlite3:
+ dependency: transitive
+ description:
+ name: sqlite3
+ sha256: "6d17989c0b06a5870b2190d391925186f944cb943e5262d0d3f778fcfca3bc6e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.4"
+ sqlparser:
+ dependency: "direct main"
+ description:
+ name: sqlparser
+ sha256: ce244c25100319b3fe1a7774c091f89faf3101adb73d75f1297e56d247f66b2b
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.35.1"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.11.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ stream_transform:
+ dependency: transitive
+ description:
+ name: stream_transform
+ sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.0"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
+ sync_http:
+ dependency: transitive
+ description:
+ name: sync_http
+ sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.1"
+ synchronized:
+ dependency: transitive
+ description:
+ name: synchronized
+ sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0+1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ test:
+ dependency: transitive
+ description:
+ name: test
+ sha256: d11b55850c68c1f6c0cf00eabded4e66c4043feaf6c0d7ce4a36785137df6331
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.25.5"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "2419f20b0c8677b2d67c8ac4d1ac7372d862dc6c460cdbb052b40155408cd794"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.1"
+ test_core:
+ dependency: transitive
+ description:
+ name: test_core
+ sha256: "4d070a6bc36c1c4e89f20d353bfd71dc30cdf2bd0e14349090af360a029ab292"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.2"
+ timing:
+ dependency: transitive
+ description:
+ name: timing
+ sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ translations_cleaner:
+ dependency: "direct dev"
+ description:
+ name: translations_cleaner
+ sha256: "060f4a8cd782e271509719741dd3540fe81ddaad49bd79e1d8fc4598299a6b84"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.5"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.2"
+ url_launcher:
+ dependency: "direct main"
+ description:
+ name: url_launcher
+ sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.0"
+ url_launcher_android:
+ dependency: transitive
+ description:
+ name: url_launcher_android
+ sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.3"
+ url_launcher_ios:
+ dependency: transitive
+ description:
+ name: url_launcher_ios
+ sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.0"
+ url_launcher_linux:
+ dependency: transitive
+ description:
+ name: url_launcher_linux
+ sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
+ url_launcher_macos:
+ dependency: transitive
+ description:
+ name: url_launcher_macos
+ sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.0"
+ url_launcher_platform_interface:
+ dependency: transitive
+ description:
+ name: url_launcher_platform_interface
+ sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ url_launcher_web:
+ dependency: transitive
+ description:
+ name: url_launcher_web
+ sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.1"
+ url_launcher_windows:
+ dependency: transitive
+ description:
+ name: url_launcher_windows
+ sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "7475cb4dd713d57b6f7464c0e13f06da0d535d8b2067e188962a59bac2cf280b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "14.2.2"
+ watcher:
+ dependency: transitive
+ description:
+ name: watcher
+ sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.5"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ webdriver:
+ dependency: transitive
+ description:
+ name: webdriver
+ sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ webkit_inspection_protocol:
+ dependency: transitive
+ description:
+ name: webkit_inspection_protocol
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.5.1"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ xml:
+ dependency: transitive
+ description:
+ name: xml
+ sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.5.0"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.2"
+sdks:
+ dart: ">=3.4.0 <4.0.0"
+ flutter: ">=3.22.0"