Commit 8633933b authored by Nicolas Richard Walter Boeckh's avatar Nicolas Richard Walter Boeckh 💬
Browse files

Fixing general settings

parent e7b7149d
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_blue","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_blue-0.7.2\\\\","dependencies":[]},{"name":"geolocator","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\geolocator-5.2.1\\\\","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\google_api_availability-2.0.2\\\\","dependencies":[]},{"name":"location_permissions","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\location_permissions-2.0.4+1\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.0\\\\","dependencies":[]},{"name":"permission_handler","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-4.2.0+hotfix.3\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+2\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"android":[{"name":"flutter_blue","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_blue-0.7.2\\\\","dependencies":[]},{"name":"geolocator","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\geolocator-5.2.1\\\\","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\google_api_availability-2.0.2\\\\","dependencies":[]},{"name":"location_permissions","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\location_permissions-2.0.4+1\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.0\\\\","dependencies":[]},{"name":"permission_handler","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-4.2.0+hotfix.3\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+2\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"macos":[{"name":"shared_preferences_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_macos-0.0.1+8\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_web-0.1.2+5\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_blue","dependencies":[]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"location_permissions","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-08-17 18:07:59.249070","version":"1.19.0-2.0.pre.49"} {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_blue","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_blue-0.7.2\\\\","dependencies":[]},{"name":"geolocator","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\geolocator-5.2.1\\\\","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\google_api_availability-2.0.2\\\\","dependencies":[]},{"name":"location_permissions","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\location_permissions-2.0.4+1\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.0\\\\","dependencies":[]},{"name":"permission_handler","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-4.2.0+hotfix.3\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+2\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"android":[{"name":"flutter_blue","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_blue-0.7.2\\\\","dependencies":[]},{"name":"geolocator","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\geolocator-5.2.1\\\\","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\google_api_availability-2.0.2\\\\","dependencies":[]},{"name":"location_permissions","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\location_permissions-2.0.4+1\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-1.6.0\\\\","dependencies":[]},{"name":"permission_handler","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-4.2.0+hotfix.3\\\\","dependencies":[]},{"name":"shared_preferences","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences-0.5.7+2\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"macos":[{"name":"shared_preferences_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_macos-0.0.1+8\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_web-0.1.2+5\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_blue","dependencies":[]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"location_permissions","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-08-18 17:56:19.621785","version":"1.21.0-10.0.pre.139"}
\ No newline at end of file \ No newline at end of file
...@@ -12,7 +12,6 @@ import 'package:logair_application/logic/handlers/database_handler.dart'; ...@@ -12,7 +12,6 @@ import 'package:logair_application/logic/handlers/database_handler.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
/// Singleton data structure that contains services enabling the application to send data to a webserver. /// Singleton data structure that contains services enabling the application to send data to a webserver.
/// TODO Make URL user configurable.
class NetworkHandler { class NetworkHandler {
factory NetworkHandler() => _singleton; factory NetworkHandler() => _singleton;
...@@ -29,7 +28,6 @@ class NetworkHandler { ...@@ -29,7 +28,6 @@ class NetworkHandler {
/// Method to send acquired data packets by using a POST requests. /// Method to send acquired data packets by using a POST requests.
void _sendDataToServer() async { void _sendDataToServer() async {
// TODO Preferences
/// The default endpoint. /// The default endpoint.
String url = 'https://api.logair.unige.ch/v1/service'; String url = 'https://api.logair.unige.ch/v1/service';
......
...@@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; ...@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:logair_application/logic/handlers/database_handler.dart'; import 'package:logair_application/logic/handlers/database_handler.dart';
import 'package:logair_application/logic/handlers/preference_handler.dart'; import 'package:logair_application/logic/handlers/preference_handler.dart';
import 'package:logair_application/ui/base_widget.dart';
/// This [Widget] is a [Form] that enables users to change settings. /// This [Widget] is a [Form] that enables users to change settings.
/// It interacts with the [PreferencesHandler] to affect changes that will be maintained on app restart. /// It interacts with the [PreferencesHandler] to affect changes that will be maintained on app restart.
...@@ -52,145 +53,147 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -52,145 +53,147 @@ class _SettingsFormState extends State<SettingsForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
/// The [Form] is comprised of multiple [ExpansionTile]s that represent settings subsections from general app management to more advanced settings. /// The [Form] is comprised of multiple [ExpansionTile]s that represent settings subsections from general app management to more advanced settings.
return Form( return BaseWidget(
key: _formKey, builder: (context, sizingInfo) => Form(
child: Column( key: _formKey,
children: [ child: Column(
Expanded( children: [
// TODO Fix renderFlex overflow SizedBox(
child: SingleChildScrollView( height: sizingInfo.screenSize.height * 0.8,
child: Column( child: SingleChildScrollView(
children: [ child: Column(
// NETWORKING children: [
ExpansionTile( // NETWORKING
title: Text('Network'), ExpansionTile(
initiallyExpanded: true, title: Text('Network'),
leading: Icon(Icons.network_check), initiallyExpanded: true,
children: [ leading: Icon(Icons.network_check),
ListTile(title: Text('TODO: Max number of items per push (def 100)')), children: [
ListTile(title: Text('TODO: Push Frequency')), ListTile(title: Text('TODO: Max number of items per push (def 100)')),
ListTile(title: Text('TODO: Push on 3G/4G')), ListTile(title: Text('TODO: Push Frequency')),
], ListTile(title: Text('TODO: Push on 3G/4G')),
), ],
Divider(color: Colors.black,), ),
// CACHING Divider(color: Colors.black,),
ExpansionTile( // CACHING
title: Text('Local Data'), ExpansionTile(
initiallyExpanded: true, title: Text('Local Data'),
leading: Icon(Icons.storage), initiallyExpanded: true,
children: [ leading: Icon(Icons.storage),
_buildActionTile('Delete local data\nOperation is final', () => DatabaseHandler().recreateDB()) children: [
], _buildActionTile('Delete local data\nOperation is final', () => DatabaseHandler().recreateDB())
), ],
Divider(color: Colors.black,), ),
// BLUETOOTH Divider(color: Colors.black,),
ExpansionTile( // BLUETOOTH
title: Text('Bluetooth'), ExpansionTile(
subtitle: Text('(Advanced)'), title: Text('Bluetooth'),
leading: Icon(Icons.bluetooth), subtitle: Text('(Advanced)'),
children: [ leading: Icon(Icons.bluetooth),
CheckboxListTile( children: [
title: Text('Modify advanced bluetooth settings'), CheckboxListTile(
value: _advancedBTOptions ?? false, title: Text('Modify advanced bluetooth settings'),
onChanged: (newValue) => setState(() { value: _advancedBTOptions ?? false,
_advancedBTOptions = newValue; onChanged: (newValue) => setState(() {
}), _advancedBTOptions = newValue;
controlAffinity: ListTileControlAffinity.leading, }),
), controlAffinity: ListTileControlAffinity.leading,
Visibility( ),
visible: _advancedBTOptions ?? false, Visibility(
child: Container( visible: _advancedBTOptions ?? false,
padding: EdgeInsets.symmetric(horizontal: 10), child: Container(
child: Text( padding: EdgeInsets.symmetric(horizontal: 10),
'Changing these settings can break device data acquisition', child: Text(
style: TextStyle( 'Changing these settings can break device data acquisition',
color: Colors.red[600], style: TextStyle(
fontSize: 12 color: Colors.red[600],
fontSize: 12
),
textAlign: TextAlign.center,
), ),
textAlign: TextAlign.center,
), ),
), ),
), // TODO Service / Characteristic Explorer ?
// TODO Service / Characteristic Explorer ? _buildInputTile(_bleServiceController, 'BLE Service UUID', 'BT.SERVICE_UUID', _advancedBTOptions, TextInputType.text, <TextInputFormatter>[ ], RegExp('[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}')),
_buildInputTile(_bleServiceController, 'BLE Service UUID', 'BT.SERVICE_UUID', _advancedBTOptions, TextInputType.text, <TextInputFormatter>[ ], RegExp('[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}')), //_buildInputTile(_bleCharacteristicController, 'BLE Characteristic UUID', 'BT.CHARACTERISTIC_UUID', _advancedBTOptions, TextInputType.text, <TextInputFormatter>[ ], RegExp('[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}')),
_buildInputTile(_bleCharacteristicController, 'BLE Characteristic UUID', 'BT.CHARACTERISTIC_UUID', _advancedBTOptions, TextInputType.text, <TextInputFormatter>[ ], RegExp('[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}')), ],
], ),
), Divider(color: Colors.black,),
Divider(color: Colors.black,), // MAP
// MAP ExpansionTile(
ExpansionTile( title: Text('Map'),
title: Text('Map'), subtitle: Text('(Advanced)'),
subtitle: Text('(Advanced)'), leading: Icon(Icons.map),
leading: Icon(Icons.map), children: [
children: [ CheckboxListTile(
CheckboxListTile( title: Text('Modify advanced map settings'),
title: Text('Modify advanced map settings'), value: _advancedMapOptions ?? false,
value: _advancedMapOptions ?? false, onChanged: (newValue) {
onChanged: (newValue) { Future.delayed(Duration.zero, () => {
Future.delayed(Duration.zero, () => { if (newValue != _advancedMapOptions) setState(() {
if (newValue != _advancedMapOptions) setState(() { _advancedMapOptions = newValue;
_advancedMapOptions = newValue; })
}) });
}); },
}, controlAffinity: ListTileControlAffinity.leading,
controlAffinity: ListTileControlAffinity.leading, ),
), Visibility(
Visibility( visible: _advancedMapOptions ?? false,
visible: _advancedMapOptions ?? false, child: Container(
child: Container( padding: EdgeInsets.symmetric(horizontal: 10),
padding: EdgeInsets.symmetric(horizontal: 10), child: Text(
child: Text( 'Changing these settings can have serious performance impacts on your device and battery life',
'Changing these settings can have serious performance impacts on your device and battery life', style: TextStyle(
style: TextStyle( color: Colors.red[600],
color: Colors.red[600], fontSize: 12
fontSize: 12 ),
textAlign: TextAlign.center,
), ),
textAlign: TextAlign.center,
), ),
), ),
), //_buildInputTile(_mapQueryLimitController, 'Maximum other points', 'MAP.PROX.MAX_PER_QUERY', _advancedMapOptions, TextInputType.number, <TextInputFormatter>[ FilteringTextInputFormatter.allow('0-9') ], RegExp(r'\d+')),
_buildInputTile(_mapQueryLimitController, 'Maximum other points', 'MAP.PROX.MAX_PER_QUERY', _advancedMapOptions, TextInputType.number, <TextInputFormatter>[ WhitelistingTextInputFormatter.digitsOnly ], RegExp(r'\d+')), //_buildInputTile(_mapQueryAgeController, 'Maximum age of other points (seconds)', 'MAP.PROX.MAX_AGE_SECONDS', _advancedMapOptions, TextInputType.number, <TextInputFormatter>[ FilteringTextInputFormatter.allow('0-9') ], RegExp(r'\d+')),
_buildInputTile(_mapQueryAgeController, 'Maximum age of other points (seconds)', 'MAP.PROX.MAX_AGE_SECONDS', _advancedMapOptions, TextInputType.number, <TextInputFormatter>[ WhitelistingTextInputFormatter.digitsOnly ], RegExp(r'\d+')), ],
], ),
), ],
], )
),
), ),
),
),
Spacer(flex: 1), // To force the row at the bottom of the screen Spacer(flex: 1,),
/// Action buttons (Confirm, Reset) // To force the row at the bottom of the screen
Row( /// Action buttons (Confirm, Reset)
children: [ Row(
Expanded( children: [
flex: 1, Expanded(
child: RaisedButton( flex: 1,
onPressed: () { child: RaisedButton(
print(_formKey.currentState.validate()); onPressed: () {
if (_formKey.currentState.validate()) { print(_formKey.currentState.validate());
PreferencesHandler().setPreferencesBool('BT.USING_ADVANCED', _advancedBTOptions); if (_formKey.currentState.validate()) {
PreferencesHandler().setPreferencesString('BT.SERVICE_UUID', _bleServiceController.text); PreferencesHandler().setPreferencesBool('BT.USING_ADVANCED', _advancedBTOptions);
PreferencesHandler().setPreferencesString('BT.CHARACTERISTIC_UUID', _bleCharacteristicController.text); PreferencesHandler().setPreferencesString('BT.SERVICE_UUID', _bleServiceController.text);
PreferencesHandler().setPreferencesBool('MAP.USING_ADVANCED', _advancedMapOptions); PreferencesHandler().setPreferencesString('BT.CHARACTERISTIC_UUID', _bleCharacteristicController.text);
} PreferencesHandler().setPreferencesBool('MAP.USING_ADVANCED', _advancedMapOptions);
}, }
child: Text('Confirm Changes'), },
child: Text('Confirm Changes'),
),
), ),
), Expanded(
Expanded( flex: 1,
flex: 1, child: RaisedButton(
child: RaisedButton( onPressed: () async {
onPressed: () async { PreferencesHandler().resetAllPreferences();
PreferencesHandler().resetAllPreferences(); _formKey.currentState.reset();
_formKey.currentState.reset(); },
}, child: Text('Reset values'),
child: Text('Reset values'), ),
), ),
), ],
], )
) ],
)
],
) )
); );
} }
...@@ -199,13 +202,14 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -199,13 +202,14 @@ class _SettingsFormState extends State<SettingsForm> {
/// TODO Individual field reset button key + '_DEFAULT'. /// TODO Individual field reset button key + '_DEFAULT'.
Widget _buildInputTile(TextEditingController controller, String labelText, String key, bool enabled, TextInputType inputType, List<TextInputFormatter> inputFormatters, RegExp validation) { Widget _buildInputTile(TextEditingController controller, String labelText, String key, bool enabled, TextInputType inputType, List<TextInputFormatter> inputFormatters, RegExp validation) {
PreferencesHandler().getPreferences(key).then((value) => controller.text = value.toString()); PreferencesHandler().getPreferences(key).then((value) => controller.text = value.toString());
return Container( return SizedBox(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), height: 30,
child: Row( child: Row(
children: [ children: [
TextFormField( TextFormField(
controller: controller, controller: controller,
enabled: enabled, enabled: enabled,
decoration: InputDecoration( decoration: InputDecoration(
labelText: labelText, labelText: labelText,
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
...@@ -224,6 +228,10 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -224,6 +228,10 @@ class _SettingsFormState extends State<SettingsForm> {
return null; return null;
} }
),
IconButton(
icon: Icon(Icons.restore),
onPressed: () => {}
) )
], ],
) )
......
...@@ -35,14 +35,14 @@ packages: ...@@ -35,14 +35,14 @@ packages:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.1" version: "2.5.0-nullsafety"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0-nullsafety"
cached_network_image: cached_network_image:
dependency: transitive dependency: transitive
description: description:
...@@ -63,28 +63,28 @@ packages: ...@@ -63,28 +63,28 @@ packages:
name: characters name: characters
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.1.0-nullsafety.2"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: charcode name: charcode
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.3" version: "1.2.0-nullsafety"
clock: clock:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.1" version: "1.1.0-nullsafety"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.14.13" version: "1.15.0-nullsafety.2"
console_log_handler: console_log_handler:
dependency: transitive dependency: transitive
description: description:
...@@ -147,7 +147,7 @@ packages: ...@@ -147,7 +147,7 @@ packages:
name: fake_async name: fake_async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0-nullsafety"
fixnum: fixnum:
dependency: transitive dependency: transitive
description: description:
...@@ -293,7 +293,7 @@ packages: ...@@ -293,7 +293,7 @@ packages:
name: js name: js
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.1+1" version: "0.6.3-nullsafety"
kotlin_flavor: kotlin_flavor:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -328,14 +328,14 @@ packages: ...@@ -328,14 +328,14 @@ packages:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.8" version: "0.12.10-nullsafety"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.8" version: "1.3.0-nullsafety.2"
mime: mime:
dependency: transitive dependency: transitive
description: description:
...@@ -391,7 +391,7 @@ packages: ...@@ -391,7 +391,7 @@ packages:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.8.0-nullsafety"
path_drawing: path_drawing:
dependency: transitive dependency: transitive
description: description:
...@@ -419,7 +419,7 @@ packages: ...@@ -419,7 +419,7 @@ packages:
name: pedantic name: pedantic
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0+1" version: "1.10.0-nullsafety"
permission_handler: permission_handler:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -447,7 +447,7 @@ packages: ...@@ -447,7 +447,7 @@ packages:
name: pool name: pool
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.4.0" version: "1.5.0-nullsafety"
positioned_tap_detector: positioned_tap_detector:
dependency: transitive dependency: transitive
description: description:
...@@ -557,21 +557,21 @@ packages: ...@@ -557,21 +557,21 @@ packages:
name: source_map_stack_trace name: source_map_stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0-nullsafety.1"
source_maps: source_maps:
dependency: transitive dependency: transitive
description: description:
name: source_maps name: source_maps
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.10.9" version: "0.10.10-nullsafety"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.8.0-nullsafety"
sqflite: sqflite:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -585,21 +585,21 @@ packages: ...@@ -585,21 +585,21 @@ packages:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.3" version: "1.10.0-nullsafety"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0-nullsafety"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.5" version: "1.1.0-nullsafety"
synchronized: synchronized:
dependency: transitive dependency: transitive
description: description:
...@@ -613,28 +613,28 @@ packages: ...@@ -613,28 +613,28 @@ packages:
name: term_glyph name: term_glyph
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0-nullsafety"
test: test:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: test name: test
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.15.2" version: "1.16.0-nullsafety.1"
test_api: