From 287add396058b0cfde04a8f5504d5d4fa5d814e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Fri, 15 Apr 2022 16:03:36 +0200 Subject: [PATCH] Get API status --- android/app/src/main/AndroidManifest.xml | 1 + android/gradle.properties | 4 ++-- .../metadata/android/en-US/changelogs/6.txt | 1 + .../metadata/android/fr-FR/changelogs/6.txt | 1 + lib/provider/data.dart | 24 +++++++++++++------ lib/screens/home.dart | 13 +++++++++- lib/screens/settings.dart | 12 +++++----- lib/utils/api.dart | 22 +++++++++++++++++ pubspec.lock | 14 +++++++++++ pubspec.yaml | 1 + 10 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/6.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/6.txt create mode 100644 lib/utils/api.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index eeaf6a1..622ce00 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -38,4 +38,5 @@ android:name="flutterEmbedding" android:value="2" /> </application> + <uses-permission android:name="android.permission.INTERNET"/> </manifest> diff --git a/android/gradle.properties b/android/gradle.properties index aa51064..135006f 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.5 -app.versionCode=5 +app.versionName=0.0.6 +app.versionCode=6 diff --git a/fastlane/metadata/android/en-US/changelogs/6.txt b/fastlane/metadata/android/en-US/changelogs/6.txt new file mode 100644 index 0000000..09ecaeb --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/6.txt @@ -0,0 +1 @@ +Get and display API status diff --git a/fastlane/metadata/android/fr-FR/changelogs/6.txt b/fastlane/metadata/android/fr-FR/changelogs/6.txt new file mode 100644 index 0000000..34a5b2f --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/6.txt @@ -0,0 +1 @@ +Récupère et affiche le statut de l'API diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 18ce63c..4cc81c0 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -4,11 +4,14 @@ import 'package:shared_preferences/shared_preferences.dart'; class Data extends ChangeNotifier { // Application settings - String _apiurl = ''; + String _apiHost = ''; + String _apiStatus = ''; + + String defaultApiHost = '127.0.0.1'; getParameterValue(String parameterCode) { switch(parameterCode) { - case 'apiurl': { return _apiurl; } + case 'apiHost': { return _apiHost; } break; } } @@ -16,7 +19,7 @@ class Data extends ChangeNotifier { setParameterValue(String parameterCode, String parameterValue) async { print('set parameter "' + parameterCode + '" to value "' + parameterValue + '"'); switch(parameterCode) { - case 'apiurl': { updateApiUrl(parameterValue); } + case 'apiHost': { updateApiHost(parameterValue); } break; } final prefs = await SharedPreferences.getInstance(); @@ -25,12 +28,19 @@ class Data extends ChangeNotifier { void initParametersValues() async { final prefs = await SharedPreferences.getInstance(); - setParameterValue('apiurl', prefs.getString('apiurl') ?? 'http://127.0.0.1/plotter'); + setParameterValue('apiHost', prefs.getString('apiHost') ?? this.defaultApiHost); + } + + String get apiHost => _apiHost; + void updateApiHost(String apiHost) { + _apiHost = apiHost; + notifyListeners(); } - String get apiurl => _apiurl; - void updateApiUrl(String apiurl) { - _apiurl = apiurl; + String get apiStatus => _apiStatus; + void updateApiStatus(String apiStatus) { + print('new API status: ' + apiStatus); + _apiStatus = apiStatus; notifyListeners(); } } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 221870f..15439f7 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import '../provider/data.dart'; import '../screens/settings.dart'; +import '../utils/api.dart'; class Home extends StatefulWidget { static const String id = 'home'; @@ -49,7 +50,17 @@ class _HomeState extends State<Home> { ), body: SafeArea( child: Center( - child: Text('🤖') + child: Column( + children: [ + FlatButton( + child: Container( + child: Text('get API status'), + ), + onPressed: () => Api.updateApiStatus(myProvider), + ), + Text(myProvider.apiStatus) + ], + ) ), ) ); diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 6e5ce16..f8d3593 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -12,11 +12,11 @@ class SettingsPage extends StatefulWidget { } class _SettingsPageState extends State<SettingsPage> { - TextEditingController apiUrlFieldController = TextEditingController(); + TextEditingController apiHostFieldController = TextEditingController(); @override void dispose() { - apiUrlFieldController.dispose(); + apiHostFieldController.dispose(); super.dispose(); } @@ -24,7 +24,7 @@ class _SettingsPageState extends State<SettingsPage> { Widget build(BuildContext context) { Data myProvider = Provider.of<Data>(context); - apiUrlFieldController.text = myProvider.getParameterValue('apiurl'); + apiHostFieldController.text = myProvider.getParameterValue('apiHost'); return Scaffold( appBar: AppBar( @@ -34,7 +34,7 @@ class _SettingsPageState extends State<SettingsPage> { IconButton( icon: Icon(Icons.save), onPressed: () { - myProvider.setParameterValue('apiurl', apiUrlFieldController.text); + myProvider.setParameterValue('apiHost', apiHostFieldController.text); Navigator.pop(context); }, ) @@ -49,10 +49,10 @@ class _SettingsPageState extends State<SettingsPage> { body: Padding( padding: const EdgeInsets.all(16.0), child: TextFormField( - controller: apiUrlFieldController, + controller: apiHostFieldController, decoration: InputDecoration( border: UnderlineInputBorder(), - labelText: 'API URL', + labelText: 'API Host', ), ), ), diff --git a/lib/utils/api.dart b/lib/utils/api.dart new file mode 100644 index 0000000..043e76e --- /dev/null +++ b/lib/utils/api.dart @@ -0,0 +1,22 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; + +import '../provider/data.dart'; + +class Api { + + static Future<void> updateApiStatus(Data myProvider) async { + final response = await http.get( + Uri.http( + myProvider.apiHost, + 'status' + ) + ); + + String responseData = utf8.decode(response.bodyBytes); + Map<String, dynamic> status = json.decode(responseData); + + myProvider.updateApiStatus(status['status']); + } + +} diff --git a/pubspec.lock b/pubspec.lock index 8641dc5..9f4caa2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -79,6 +79,20 @@ packages: description: flutter source: sdk version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" js: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index db24663..131fd0d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: sdk: flutter provider: ^6.0.2 shared_preferences: ^2.0.6 + http: dev_dependencies: flutter_test: -- GitLab