Commit 9fbdcddb authored by Nicolas Richard Walter Boeckh's avatar Nicolas Richard Walter Boeckh 💬

Proximal points and ui

parent 802a2f34
{"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.4.3\\\\","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.4.3\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"macos":[{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-1.2.0\\\\","dependencies":[]}],"linux":[],"windows":[],"web":[]},"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":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-05-04 04:35:02.502371","version":"1.18.0-9.0.pre.58"}
\ No newline at end of file
{"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-05-15 10:37:30.582661","version":"1.19.0-2.0.pre.71"}
\ No newline at end of file
......@@ -17,21 +17,59 @@ Dates are in the sensible `DD/MM/YYYY` format.
- Pre download only on WiFi
- Prefs stored from one session to the next.
- Language switch possible (not just locale).
- Add | (UI) Leaflet (flutter_map) | just the map (6h) + (overlay data || )
- Add | (overlay data || )
- Add | (Func) Cache file for data | 2+3-4h
- Add | (BS) Location (expansion needed) | ~
- Add |
- Add | (BS) Background service framework () | 2-6h (sticky notification system + )
- allow people to set their own service / characteristic UUID
- Bluetooth (recents list.s) add to shared prefs on connect, keep max 10.
## Unreleased
## [0.0.3] - current
## [0.0.7] - current
### [0.0.7] Summary
Performance improvements on the map and acquisition of neighboring data points.
### [0.0.7] Added
### [0.0.7] Changed
### [0.0.7] Removed
## [0.0.6] - 08/05/2020
### [0.0.6] Summary
Integrated Geolocation to the app and visualization on the app.
### [0.0.6] Added
### [0.0.6] Changed
- `BTLEHandler`
### [0.0.6] Removed
## [0.0.5] - Server
## [0.0.4] - Server
## [0.0.3] - 28/04/2020
### [0.0.3] Summary
Add the data transmission to server and initial Location service.
### [0.0.3] Added
### [0.0.3] Changed
- Bluetooth Connection
### [0.0.3] Removed
## [0.0.2] - 25/02/2020
### [0.0.2] Summary
......
......@@ -11,6 +11,24 @@ The Application that handles the connection between LogAir devices and LogAir's
```bash
flutter pub get
flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/localization/localization.dart
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/localization/localization.dart lib/l10n/intl_en.arb lib/l10n/intl_fr.arb
flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/localization/l10n lib/localization/localization.dart
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/localization/l10n --no-use-deferred-loading lib/localization/localization.dart lib/localization/l10n/intl_en.arb lib/localization/l10n/intl_fr.arb
```
## File Structure
The project is divided in multiple components:
- `localization` contains the code enabling the software to transition from one locale to another:
- `l10n`: Language files.
- `logic` represents logical elements (advanced data types specific to the software's function):
- `controllers`: Fine control over a Widget even from outside of its scope ;
- `handlers`: Fine control over a logic segment from any scope.
- `services` contains code enabling the access to platform side content ;
- `ui` contains code for the Widgets ie. the Graphical components of the software ;
- `animation`: Transitions between pages ;
- `components`: Various tree end Widgets ;
- `dialog`: Dialogs for user interaction ;
- `routes`: Widget Tree root elements.
- `utils` contains decluttering code :
- `enums`: type representation ;
......@@ -5,9 +5,10 @@
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="io.flutter.app.FlutterApplication"
android:label="logair_application"
android:label="logair.io"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
......
<?xml version="1.0" encoding="utf-8"?>
<vector
android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<item android:drawable="@color/splash_bg" />
<item
android:gravity="center|bottom|center_vertical|clip_vertical"
android:drawable="@drawable/ic_splash">
</item>
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
......
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="splash_bg">#f3f3f3</color>
</resources>
\ No newline at end of file
......@@ -13,6 +13,6 @@
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowBackground">@color/splash_bg</item>
</style>
</resources>
This diff is collapsed.
......@@ -90,7 +90,6 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
......@@ -99,13 +98,6 @@
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
......
import 'package:shared_preferences/shared_preferences.dart';
class PreferencesHandler {
static final PreferencesHandler _singleton = new PreferencesHandler._internal();
SharedPreferences _sharedPreferences;
PreferencesHandler._internal();
Future<SharedPreferences> getPreferences() async {
if (_sharedPreferences == null) {
_sharedPreferences = await SharedPreferences.getInstance();
}
return _sharedPreferences;
}
factory PreferencesHandler() => _singleton;
}
\ No newline at end of file
{
"@@last_modified": "2020-02-05T17:25:56.614777",
"ok": "OK",
"@ok": {
"type": "text",
"placeholders": {}
},
"cancel": "Annuler",
"@cancel": {
"type": "text",
"placeholders": {}
},
"none": "Aucun",
"@none": {
"type": "text",
"placeholders": {}
},
"locationPromptTitle": "L'application requiert des permissions de localisation",
"@locationPromptTitle": {
"description": "Titre pour l'annonce the requête de permissions de localisations",
"type": "text",
"placeholders": {}
},
"locationPromptReason": "Afin d'augmenter la précision de la localisation et pour utiliser Bluetooth Low Energy, cette permission est nécessaire.",
"@locationPromptReason": {
"description": "Raison pour l'annonce de requête de permissions de localisation",
"type": "text",
"placeholders": {}
},
"bluetoothAvailable": "Appareils Disponibles",
"@bluetoothAvailable": {
"type": "text",
"placeholders": {}
},
"bluetoothFrequent": "Appareils Fréquemment Utilisés",
"@bluetoothFrequent": {
"type": "text",
"placeholders": {}
},
"bluetoothInactive": "Bluetooth n'est pas actif sur votre appareil.\nL'activer ?",
"@bluetoothInactive": {
"type": "text",
"placeholders": {}
},
"bluetoothScanMessage": "Recherche d'appareils Bluetooth",
"@bluetoothScanMessage": {
"type": "text",
"placeholders": {}
},
"bluetoothUnsupported": "Cette appareil n'est pas compatible avec Bluetooth Low Energy",
"@bluetoothUnsupported": {
"type": "text",
"placeholders": {}
}
{
"@@last_modified": "2020-02-05T17:25:56.614777",
"ok": "OK",
"@ok": {
"type": "text",
"placeholders": {}
},
"cancel": "Annuler",
"@cancel": {
"type": "text",
"placeholders": {}
},
"none": "Aucun",
"@none": {
"type": "text",
"placeholders": {}
},
"locationPromptTitle": "L'application requiert des permissions de localisation",
"@locationPromptTitle": {
"description": "Titre pour l'annonce the requête de permissions de localisations",
"type": "text",
"placeholders": {}
},
"locationPromptReason": "Afin d'augmenter la précision de la localisation et pour utiliser Bluetooth Low Energy, cette permission est nécessaire.",
"@locationPromptReason": {
"description": "Raison pour l'annonce de requête de permissions de localisation",
"type": "text",
"placeholders": {}
},
"bluetoothAvailable": "Appareils Disponibles",
"@bluetoothAvailable": {
"type": "text",
"placeholders": {}
},
"bluetoothFrequent": "Appareils Fréquemment Utilisés",
"@bluetoothFrequent": {
"type": "text",
"placeholders": {}
},
"bluetoothInactive": "Bluetooth n'est pas actif sur votre appareil.\nL'activer ?",
"@bluetoothInactive": {
"type": "text",
"placeholders": {}
},
"bluetoothScanMessage": "Recherche d'appareils Bluetooth",
"@bluetoothScanMessage": {
"type": "text",
"placeholders": {}
},
"bluetoothUnsupported": "Cette appareil n'est pas compatible avec Bluetooth Low Energy",
"@bluetoothUnsupported": {
"type": "text",
"placeholders": {}
}
}
\ No newline at end of file
{
"@@last_modified": "2020-02-20T07:40:18.875039",
"ok": "OK",
"@ok": {
"type": "text",
"placeholders": {}
},
"cancel": "Cancel",
"@cancel": {
"type": "text",
"placeholders": {}
},
"none": "None",
"@none": {
"type": "text",
"placeholders": {}
},
"locationPromptTitle": "This app needs to use location services",
"@locationPromptTitle": {
"description": "Title for the location permission request prompt",
"type": "text",
"placeholders": {}
},
"locationPromptReason": "To use Bluetooth Low Energy and to increase data collection accuracy, this permission is required.",
"@locationPromptReason": {
"description": "Reason for the location permission request prompt",
"type": "text",
"placeholders": {}
},
"bluetoothAvailable": "Available Devices",
"@bluetoothAvailable": {
"type": "text",
"placeholders": {}
},
"bluetoothFrequent": "Frequently Used Devices",
"@bluetoothFrequent": {
"type": "text",
"placeholders": {}
},
"bluetoothInactive": "Bluetooth is not active on this device.\nTurn it on ?",
"@bluetoothInactive": {
"type": "text",
"placeholders": {}
},
"bluetoothScanMessage": "Scan for Bluetooth Devices",
"@bluetoothScanMessage": {
"type": "text",
"placeholders": {}
},
"bluetoothUnsupported": "This device does not support Bluetooth Low Energy",
"@bluetoothUnsupported": {
"type": "text",
"placeholders": {}
}
{
"@@last_modified": "2020-02-20T07:40:18.875039",
"ok": "OK",
"@ok": {
"type": "text",
"placeholders": {}
},
"cancel": "Cancel",
"@cancel": {
"type": "text",
"placeholders": {}
},
"none": "None",
"@none": {
"type": "text",
"placeholders": {}
},
"locationPromptTitle": "This app needs to use location services",
"@locationPromptTitle": {
"description": "Title for the location permission request prompt",
"type": "text",
"placeholders": {}
},
"locationPromptReason": "To use Bluetooth Low Energy and to increase data collection accuracy, this permission is required.",
"@locationPromptReason": {
"description": "Reason for the location permission request prompt",
"type": "text",
"placeholders": {}
},
"bluetoothAvailable": "Available Devices",
"@bluetoothAvailable": {
"type": "text",
"placeholders": {}
},
"bluetoothFrequent": "Frequently Used Devices",
"@bluetoothFrequent": {
"type": "text",
"placeholders": {}
},
"bluetoothInactive": "Bluetooth is not active on this device.\nTurn it on ?",
"@bluetoothInactive": {
"type": "text",
"placeholders": {}
},
"bluetoothScanMessage": "Scan for Bluetooth Devices",
"@bluetoothScanMessage": {
"type": "text",
"placeholders": {}
},
"bluetoothUnsupported": "This device does not support Bluetooth Low Energy",
"@bluetoothUnsupported": {
"type": "text",
"placeholders": {}
}
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:logair_application/l10n/messages_all.dart' show initializeMessages;
import 'package:logair_application/localization/l10n/messages_all.dart' show initializeMessages;
/// Reference https://github.com/dart-lang/intl https://pub.dev/packages/intl
/// Adding a localization should follow the guidelines defined here : https://github.com/flutter/website/blob/master/examples/internationalization/add_language/lib/main.dart
/// The frequent locales have already been integrated (but who knows when you'll need Belarusian).
class AppLocalization {
/// The current [Locale]
final String locale;
/// Constructor
const AppLocalization(this.locale);
/// The deferred [Locale] language loader
static Future<AppLocalization> load(Locale locale) {
/// Checks whether the queried [Locale] is defined on the fly, or had been predefined.
final String name = locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
final String localeName = Intl.canonicalizedLocale(name);
/// Load the internationalized values.
return initializeMessages(localeName).then((_) => AppLocalization(localeName));
}
static AppLocalization of(BuildContext context) => Localizations.of(context, AppLocalization);
/// The following definitions are the English base values for internationalizable dialog
/// TODO Add new because UI.
/* General Values */
String get ok => Intl.message(
'OK',
name: 'ok',
......
import 'package:flutter/cupertino.dart';
import 'package:logair_application/localization/localization.dart';
/// Enables the loading and reloading of app [Locale]s
class AppLocalizationDelegate extends LocalizationsDelegate<AppLocalization> {
const AppLocalizationDelegate();
/// Returns whether the demanded locale exists in the app's localization files
@override
bool isSupported(Locale locale) => ['en', 'fr'].contains(locale.languageCode);
bool isSupported(Locale locale) => [
'en',
'fr'
].contains(locale.languageCode);
/// Delegates the loading of [Locale] to an [async] task, which enables it to be done in the background.
@override
Future<AppLocalization> load(Locale locale) => AppLocalization.load(locale);
/// Returns whether the app should reload
@override
bool shouldReload(AppLocalizationDelegate old) => false;
}
\ No newline at end of file
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/cupertino.dart';
import 'package:logair_application/ui/routes/home.dart';