From fa041950c520064763719c50072044b047cbd61a Mon Sep 17 00:00:00 2001 From: Syaroful Date: Wed, 23 Oct 2024 08:18:30 +0700 Subject: [PATCH] fix: bug fixing on API response --- agrilink_vocpro/android/app/build.gradle | 5 +- .../android/app/google-services.json | 29 ++++ agrilink_vocpro/android/settings.gradle | 3 + ...f9-firebase-adminsdk-a4f6g-e6565344e3.json | 13 ++ agrilink_vocpro/firebase.json | 1 + .../lib/core/widgets/password_textfield.dart | 51 +++++++ .../lib/data/model/latest_data_response.dart | 143 ++++++------------ .../lib/data/model/npk1_graphic_response.dart | 6 +- .../lib/data/model/npk2_graphic_response.dart | 6 +- .../lib/domain/service/app_service.dart | 10 +- .../lib/domain/service/firebase_api.dart | 20 +++ .../features/auth/provider/auth_provider.dart | 32 ++++ .../lib/features/auth/view/login_screen.dart | 10 +- .../provider/conductivity_provider.dart | 4 +- .../view/conductivity_screen.dart | 6 +- .../pages/humidity/view/humidity_screen.dart | 2 +- .../pages/luminosity/view/light_screen.dart | 2 +- .../nitrogen/provider/nitrogen_provider.dart | 4 +- .../pages/nitrogen/view/nitrogen_screen.dart | 4 +- .../home/pages/ph/provider/ph_provider.dart | 4 +- .../home/pages/ph/view/ph_screen.dart | 4 +- .../provider/phosporus_provider.dart | 4 +- .../phosphorus/view/phosphorus_screen.dart | 5 +- .../provider/potassium_provider.dart | 4 +- .../potassium/view/potassium_screen.dart | 4 +- .../provider/soil_moisture_provider.dart | 4 +- .../view/soil_moisture_screen.dart | 4 +- .../provider/soil_temp_provider.dart | 4 +- .../view/soil_temperature_screen.dart | 6 +- .../temperature/view/temperature_screen.dart | 3 +- .../features/home/provider/home_provider.dart | 34 ++--- .../features/splash/view/splash_screen.dart | 2 + agrilink_vocpro/lib/firebase_options.dart | 68 +++++++++ agrilink_vocpro/lib/main.dart | 7 +- .../Flutter/GeneratedPluginRegistrant.swift | 4 + agrilink_vocpro/pubspec.lock | 82 +++++++++- agrilink_vocpro/pubspec.yaml | 5 + .../flutter/generated_plugin_registrant.cc | 3 + .../windows/flutter/generated_plugins.cmake | 1 + 39 files changed, 443 insertions(+), 160 deletions(-) create mode 100644 agrilink_vocpro/android/app/google-services.json create mode 100644 agrilink_vocpro/assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json create mode 100644 agrilink_vocpro/firebase.json create mode 100644 agrilink_vocpro/lib/core/widgets/password_textfield.dart create mode 100644 agrilink_vocpro/lib/domain/service/firebase_api.dart create mode 100644 agrilink_vocpro/lib/firebase_options.dart diff --git a/agrilink_vocpro/android/app/build.gradle b/agrilink_vocpro/android/app/build.gradle index 3beee2f..cfbe6a0 100644 --- a/agrilink_vocpro/android/app/build.gradle +++ b/agrilink_vocpro/android/app/build.gradle @@ -1,5 +1,8 @@ plugins { id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration id "kotlin-android" // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" @@ -24,7 +27,7 @@ android { applicationId = "com.pis.agrilink_vocpro" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion + minSdk = 21 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName diff --git a/agrilink_vocpro/android/app/google-services.json b/agrilink_vocpro/android/app/google-services.json new file mode 100644 index 0000000..ed5550f --- /dev/null +++ b/agrilink_vocpro/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "445047869982", + "project_id": "agrilink-vocpro-b37f9", + "storage_bucket": "agrilink-vocpro-b37f9.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:445047869982:android:d40dc2fd624f86a315540f", + "android_client_info": { + "package_name": "com.pis.agrilink_vocpro" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyCB8i2dE3Oc0kTNtVPw_qSz-T8gPYNjxFk" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/agrilink_vocpro/android/settings.gradle b/agrilink_vocpro/android/settings.gradle index 536165d..7fb86d7 100644 --- a/agrilink_vocpro/android/settings.gradle +++ b/agrilink_vocpro/android/settings.gradle @@ -19,6 +19,9 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "7.3.0" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration id "org.jetbrains.kotlin.android" version "1.7.10" apply false } diff --git a/agrilink_vocpro/assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json b/agrilink_vocpro/assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json new file mode 100644 index 0000000..dcd9876 --- /dev/null +++ b/agrilink_vocpro/assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "agrilink-vocpro-b37f9", + "private_key_id": "e6565344e36c0aaf355068ad83cb904b8c0b7f5f", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8o5OUuUconoKe\nASbkganjcX7aByEIai3O5XSC5PxKkEzXGgefaHHtNawJO/nhOmsM1Wqd6sBUy8iT\nbH1LI4hKeIS8k/U0n84VgFUnDdScmsgAbC+06BGEncvqElXI6F9LDqdV21qzu7ZC\n4YpkZuTZsoxImaocUIUE0kfIqq4BZc7kkJqaXqYSOSs2wHLUrQT10jezJmw2EXsx\n+cPD2iwjxasP6IaYCylQr+WU+3e5B2+GKjaXPm7p3pLtSNb+rntvBD212R1VDwuT\nZu+Z2t82Hdsm/r+z1RSKqu1pa2hWYFvSiIl1eV+vqCs4MHdGFinhkNZA9o4NCLBV\nixJxiPDtAgMBAAECggEALu9rR7Ce1Cw2Vx51wRrC/MCPPavS6/9RNP6R8gSMAnhr\nagTDu0W3PPxi+Ow3lPLeUlPigna3kpGerxGqDhFB9reMXUhaFRUi52YmKcCu8yUu\n2K4SY6pvO2Ywp6WWuxWYKjpz57CbnYc5xuPLtYYFcGYUsfar5P4izquMaVEQWO/A\nsABd8gnh0oxwigkk1J9c+qtc6ZKwxgSNOeLld4GFw2z9YBqN70QbEvkrB7JA+QdM\nUFL3edSjEazonGdrySbTh/A7l5E31Oft7qS/VpnFyerhGd3AGFU/FVNpohWiSurD\n9O25xt/YIwpMIOxo0/b4jBv2KMLdOr75MV+2tR8iwQKBgQDj9zSMwO6fm3ZfDrkB\nNw2Qba7Tpn5hW5MshyyPVcpiXMuOyZrjsv19IbVHNZ4Hfl6CRQrGWWDs2rNR6+pW\n+zK82HMzrcwl8A7Dn6GCYQt+EHXiPNXlqJy6v83nFD0TU0BgJn4U21KreLyHxriu\nXnJr062bE9k2MRbp3V/HCiwnrQKBgQDT1krQHdHJyVMNDPbU+EHJVQbuJa4HveE+\n4uDW3srH3dzmlbRgji35EA8WOYJQWc2tiDiwuAFwHB0RoI/EGunCgkVT7qDXcbCm\n3MfHJqrlRGamfAmqT+ZrmDN+izrszVJjaUqiv8/4zbUVfiMF7UZkmeVImIa870t4\nrkdnOdIWQQKBgA30mDb1qKYEsl5nXFQCtsXcsRMr4hi7rmrPa57qtZUH8T4wgVbn\nIjWC1sIhOidjSQ3YhCxYVGKrkMa3FoV0o0qERakoPpMj+wNmxlBg+H8jKtRKvR1u\nEQotq8E1r/d65Tn9oUJNmuX8Yi49sBicl4yaTMptkKKMpsZyUuawbLuRAoGALYOw\nZVDS31krR/WOHyoL8HcdWxOrdaxddgaHKoOJ7DGGIeDudYR26jmCFFNc5Wi2IV/Q\nVl/ipzTTJhNqcEccDJeyz5rI4iFiRCfRoL91Hnd42rJx3S73ogx8m+bMTU68MfHQ\ngHFX/OwtySVl3wMhCcJrGhLzeCqt+4rueoZY1kECgYAuN5gouN8YiqtzvrJ+UtUb\n+BqIu0m+DWMBzrJV4391jpnberxTaMVoQIwCMbHYYJ3u8Ur7smFwyrk5zWvTiszx\nNnPfUD4D6BcNbP8+zwNkzEWnfmtQmh5C5V+DrRjxHSgDu/tirzC7WxPnCJlny3eO\nethubLDwgibzNGemftmqXQ==\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-a4f6g@agrilink-vocpro-b37f9.iam.gserviceaccount.com", + "client_id": "109510416441723731803", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-a4f6g%40agrilink-vocpro-b37f9.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/agrilink_vocpro/firebase.json b/agrilink_vocpro/firebase.json new file mode 100644 index 0000000..e3d5b31 --- /dev/null +++ b/agrilink_vocpro/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"agrilink-vocpro-b37f9","appId":"1:445047869982:android:d40dc2fd624f86a315540f","fileOutput":"android/app/google-services.json"}},"dart":{"lib/firebase_options.dart":{"projectId":"agrilink-vocpro-b37f9","configurations":{"android":"1:445047869982:android:d40dc2fd624f86a315540f","ios":"1:445047869982:ios:9350ac31c363c40415540f"}}}}}} \ No newline at end of file diff --git a/agrilink_vocpro/lib/core/widgets/password_textfield.dart b/agrilink_vocpro/lib/core/widgets/password_textfield.dart new file mode 100644 index 0000000..4189c4c --- /dev/null +++ b/agrilink_vocpro/lib/core/widgets/password_textfield.dart @@ -0,0 +1,51 @@ +import 'package:agrilink_vocpro/core/constant/app_color.dart'; +import 'package:agrilink_vocpro/core/constant/app_theme.dart'; +import 'package:flutter/material.dart'; + +class PasswordTextfield extends StatefulWidget { + const PasswordTextfield({ + super.key, + required this.controller, + this.hintText = 'Enter Here', + }); + + final TextEditingController controller; + final String hintText; + + @override + State createState() => _PasswordTextfieldState(); +} + +class _PasswordTextfieldState extends State { + bool obscureText = true; + @override + Widget build(BuildContext context) { + return TextField( + controller: widget.controller, + decoration: InputDecoration( + enabledBorder: OutlineInputBorder( + borderSide: const BorderSide(color: AppColor.textDisable, width: 1), + borderRadius: BorderRadius.circular(8), + ), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide(color: AppColor.primary, width: 1), + borderRadius: BorderRadius.circular(8), + ), + hintText: widget.hintText, + hintStyle: AppTheme.hintStyle, + suffixIconColor: AppColor.textDisable, + suffixIcon: IconButton( + onPressed: () { + setState(() { + obscureText = !obscureText; + }); + }, + icon: obscureText + ? const Icon(Icons.visibility_off) + : const Icon(Icons.visibility)), + ), + obscureText: obscureText, + onTapOutside: (event) => FocusScope.of(context).unfocus(), + ); + } +} diff --git a/agrilink_vocpro/lib/data/model/latest_data_response.dart b/agrilink_vocpro/lib/data/model/latest_data_response.dart index 270e8b6..b151eff 100644 --- a/agrilink_vocpro/lib/data/model/latest_data_response.dart +++ b/agrilink_vocpro/lib/data/model/latest_data_response.dart @@ -24,8 +24,8 @@ class LatestDataResponse { class Data { List? dht; - List? npk1; - List? npk2; + List? npk1; + List? npk2; Data({this.dht, this.npk1, this.npk2}); @@ -37,15 +37,15 @@ class Data { }); } if (json['npk1'] != null) { - npk1 = []; + npk1 = []; json['npk1'].forEach((v) { - npk1!.add(Npk1.fromJson(v)); + npk1!.add(Npk.fromJson(v)); }); } if (json['npk2'] != null) { - npk2 = []; + npk2 = []; json['npk2'].forEach((v) { - npk2!.add(Npk2.fromJson(v)); + npk2!.add(Npk.fromJson(v)); }); } } @@ -67,119 +67,74 @@ class Data { class Dht { int? hour; - num? vicitemperatureAvg; - num? vicihumidityAvg; - num? viciluminosityAvg; + num? vicitemperature; + num? vicihumidity; + num? viciluminosity; Dht( {this.hour, - this.vicitemperatureAvg, - this.vicihumidityAvg, - this.viciluminosityAvg}); + this.vicitemperature, + this.vicihumidity, + this.viciluminosity}); Dht.fromJson(Map json) { hour = json['hour']; - vicitemperatureAvg = json['vicitemperature_avg']; - vicihumidityAvg = json['vicihumidity_avg']; - viciluminosityAvg = json['viciluminosity_avg']; + vicitemperature = json['vicitemperature']; + vicihumidity = json['vicihumidity']; + viciluminosity = json['viciluminosity']; } Map toJson() { final Map data = {}; data['hour'] = hour; - data['vicitemperature_avg'] = vicitemperatureAvg; - data['vicihumidity_avg'] = vicihumidityAvg; - data['viciluminosity_avg'] = viciluminosityAvg; + data['vicitemperature'] = vicitemperature; + data['vicihumidity'] = vicihumidity; + data['viciluminosity'] = viciluminosity; return data; } } -class Npk1 { +class Npk { int? hour; - num? soiltemperatureAvg; - num? soilhumidityAvg; - num? soilconductivityAvg; - num? soilphAvg; - num? soilnitrogenAvg; - num? soilphosphorusAvg; - num? soilpotassiumAvg; + num? soiltemperature; + num? soilhumidity; + num? soilconductivity; + num? soilph; + num? soilnitrogen; + num? soilphosphorus; + num? soilpotassium; - Npk1( + Npk( {this.hour, - this.soiltemperatureAvg, - this.soilhumidityAvg, - this.soilconductivityAvg, - this.soilphAvg, - this.soilnitrogenAvg, - this.soilphosphorusAvg, - this.soilpotassiumAvg}); + this.soiltemperature, + this.soilhumidity, + this.soilconductivity, + this.soilph, + this.soilnitrogen, + this.soilphosphorus, + this.soilpotassium}); - Npk1.fromJson(Map json) { + Npk.fromJson(Map json) { hour = json['hour']; - soiltemperatureAvg = json['soiltemperature_avg']; - soilhumidityAvg = json['soilhumidity_avg']; - soilconductivityAvg = json['soilconductivity_avg']; - soilphAvg = json['soilph_avg']; - soilnitrogenAvg = json['soilnitrogen_avg']; - soilphosphorusAvg = json['soilphosphorus_avg']; - soilpotassiumAvg = json['soilpotassium_avg']; + soiltemperature = json['soiltemperature']; + soilhumidity = json['soilhumidity']; + soilconductivity = json['soilconductivity']; + soilph = json['soilph']; + soilnitrogen = json['soilnitrogen']; + soilphosphorus = json['soilphosphorus']; + soilpotassium = json['soilpotassium']; } Map toJson() { final Map data = {}; data['hour'] = hour; - data['soiltemperature_avg'] = soiltemperatureAvg; - data['soilhumidity_avg'] = soilhumidityAvg; - data['soilconductivity_avg'] = soilconductivityAvg; - data['soilph_avg'] = soilphAvg; - data['soilnitrogen_avg'] = soilnitrogenAvg; - data['soilphosphorus_avg'] = soilphosphorusAvg; - data['soilpotassium_avg'] = soilpotassiumAvg; - return data; - } -} - -class Npk2 { - int? hour; - num? soiltemperatureAvg; - num? soilhumidityAvg; - num? soilconductivityAvg; - num? soilphAvg; - num? soilnitrogenAvg; - num? soilphosphorusAvg; - num? soilpotassiumAvg; - - Npk2( - {this.hour, - this.soiltemperatureAvg, - this.soilhumidityAvg, - this.soilconductivityAvg, - this.soilphAvg, - this.soilnitrogenAvg, - this.soilphosphorusAvg, - this.soilpotassiumAvg}); - - Npk2.fromJson(Map json) { - hour = json['hour']; - soiltemperatureAvg = json['soiltemperature_avg']; - soilhumidityAvg = json['soilhumidity_avg']; - soilconductivityAvg = json['soilconductivity_avg']; - soilphAvg = json['soilph_avg']; - soilnitrogenAvg = json['soilnitrogen_avg']; - soilphosphorusAvg = json['soilphosphorus_avg']; - soilpotassiumAvg = json['soilpotassium_avg']; - } - - Map toJson() { - final Map data = {}; - data['hour'] = hour; - data['soiltemperature_avg'] = soiltemperatureAvg; - data['soilhumidity_avg'] = soilhumidityAvg; - data['soilconductivity_avg'] = soilconductivityAvg; - data['soilph_avg'] = soilphAvg; - data['soilnitrogen_avg'] = soilnitrogenAvg; - data['soilphosphorus_avg'] = soilphosphorusAvg; - data['soilpotassium_avg'] = soilpotassiumAvg; + data['soiltemperature'] = soiltemperature; + data['soilhumidity'] = soilhumidity; + data['soilconductivity'] = soilconductivity; + data['soilph'] = soilph; + data['soilnitrogen'] = soilnitrogen; + data['soilphosphorus'] = soilphosphorus; + data['soilpotassium'] = soilpotassium; return data; } } diff --git a/agrilink_vocpro/lib/data/model/npk1_graphic_response.dart b/agrilink_vocpro/lib/data/model/npk1_graphic_response.dart index ed931c3..a38b8bb 100644 --- a/agrilink_vocpro/lib/data/model/npk1_graphic_response.dart +++ b/agrilink_vocpro/lib/data/model/npk1_graphic_response.dart @@ -25,15 +25,15 @@ class Npk1GraphicResponse { } class DataNpk1 { - List? npk1; + List? npk1; DataNpk1({this.npk1}); DataNpk1.fromJson(Map json) { if (json['npk1'] != null) { - npk1 = []; + npk1 = []; json['npk1'].forEach((v) { - npk1!.add(Npk1.fromJson(v)); + npk1!.add(Npk.fromJson(v)); }); } } diff --git a/agrilink_vocpro/lib/data/model/npk2_graphic_response.dart b/agrilink_vocpro/lib/data/model/npk2_graphic_response.dart index f23f481..ed909bb 100644 --- a/agrilink_vocpro/lib/data/model/npk2_graphic_response.dart +++ b/agrilink_vocpro/lib/data/model/npk2_graphic_response.dart @@ -25,15 +25,15 @@ class Npk2GraphicResponse { } class DataNpk2 { - List? npk2; + List? npk2; DataNpk2({this.npk2}); DataNpk2.fromJson(Map json) { if (json['npk2'] != null) { - npk2 = []; + npk2 = []; json['npk2'].forEach((v) { - npk2!.add(Npk2.fromJson(v)); + npk2!.add(Npk.fromJson(v)); }); } } diff --git a/agrilink_vocpro/lib/domain/service/app_service.dart b/agrilink_vocpro/lib/domain/service/app_service.dart index b582605..1f17a61 100644 --- a/agrilink_vocpro/lib/domain/service/app_service.dart +++ b/agrilink_vocpro/lib/domain/service/app_service.dart @@ -18,6 +18,8 @@ class AppService { final Dio _dioWithoutInterceptor = Dio( BaseOptions( baseUrl: AppConstant.baseUrl, + connectTimeout: Duration(seconds: 5), + receiveTimeout: Duration(seconds: 5), ), ); @@ -33,6 +35,7 @@ class AppService { FormData formData = FormData.fromMap({ 'remember_me': rememberMe, }); + try { final response = await _dioWithoutInterceptor.post( '/auth/login', @@ -59,7 +62,12 @@ class AppService { throw Exception('Failed to load data'); } } on DioException catch (e) { - final String errorMessage = e.response?.data['message']; + final String errorMessage; + if (e.response?.data != null) { + errorMessage = e.response?.data['message'] ?? 'Something went wrong'; + } else { + errorMessage = 'Something went wrong'; + } throw (errorMessage); } } diff --git a/agrilink_vocpro/lib/domain/service/firebase_api.dart b/agrilink_vocpro/lib/domain/service/firebase_api.dart new file mode 100644 index 0000000..024e72b --- /dev/null +++ b/agrilink_vocpro/lib/domain/service/firebase_api.dart @@ -0,0 +1,20 @@ +import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:flutter/foundation.dart'; + +class FirebaseApi { + final _firebaseMessaging = FirebaseMessaging.instance; + + Future initNotification() async { + await _firebaseMessaging.requestPermission( + alert: true, + badge: true, + provisional: false, + sound: true, + ); + + final fCMToken = await _firebaseMessaging.getToken(); + if (kDebugMode) { + print('FCM Token: $fCMToken'); + } + } +} diff --git a/agrilink_vocpro/lib/features/auth/provider/auth_provider.dart b/agrilink_vocpro/lib/features/auth/provider/auth_provider.dart index fa97d50..0126368 100644 --- a/agrilink_vocpro/lib/features/auth/provider/auth_provider.dart +++ b/agrilink_vocpro/lib/features/auth/provider/auth_provider.dart @@ -1,6 +1,11 @@ +import 'dart:convert'; + import 'package:agrilink_vocpro/core/state/result_state.dart'; import 'package:agrilink_vocpro/domain/service/app_service.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:googleapis_auth/auth_io.dart'; +import 'package:http/http.dart' as http; class AuthProvider extends ChangeNotifier { TextEditingController emailController = TextEditingController(); @@ -74,4 +79,31 @@ class AuthProvider extends ChangeNotifier { } return true; } + + Future getAccessToken() async { + try { + final serviceAccountJson = await rootBundle.loadString( + 'assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json', + ); + + final accountCredentials = ServiceAccountCredentials.fromJson( + json.decode(serviceAccountJson), + ); + + const scope = ['https://www.googleapis.com/auth/firebase.messaging']; + + final client = http.Client(); + + try { + final accessCredential = await obtainAccessCredentialsViaServiceAccount( + accountCredentials, scope, client); + final accessToken = accessCredential.accessToken.data; + print('Access Token: $accessToken'); + } catch (e) { + print('Error: $e'); + } + } catch (e) { + print('Error 2: $e'); + } + } } diff --git a/agrilink_vocpro/lib/features/auth/view/login_screen.dart b/agrilink_vocpro/lib/features/auth/view/login_screen.dart index b120235..3272067 100644 --- a/agrilink_vocpro/lib/features/auth/view/login_screen.dart +++ b/agrilink_vocpro/lib/features/auth/view/login_screen.dart @@ -3,6 +3,7 @@ import 'package:agrilink_vocpro/core/route/app_route.dart'; import 'package:agrilink_vocpro/core/state/result_state.dart'; import 'package:agrilink_vocpro/core/widgets/app_button.dart'; import 'package:agrilink_vocpro/core/widgets/app_textfield.dart'; +import 'package:agrilink_vocpro/core/widgets/password_textfield.dart'; import 'package:agrilink_vocpro/features/auth/provider/auth_provider.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; @@ -39,10 +40,9 @@ class LoginScreen extends StatelessWidget { const SizedBox(height: 24), Text('Password', style: AppTheme.labelLarge), const SizedBox(height: 4), - AppTextfield( + PasswordTextfield( controller: authP.passwordController, hintText: 'Masukkan password', - obscureText: true, ), const SizedBox(height: 24), Row( @@ -76,6 +76,12 @@ class LoginScreen extends StatelessWidget { }, text: 'Login', ), + SizedBox(height: 24), + AppButton( + onPressed: () { + authP.getAccessToken(); + }, + text: 'Get Access Token'), ], ); }, diff --git a/agrilink_vocpro/lib/features/home/pages/conductivity/provider/conductivity_provider.dart b/agrilink_vocpro/lib/features/home/pages/conductivity/provider/conductivity_provider.dart index 97665d9..50c6969 100644 --- a/agrilink_vocpro/lib/features/home/pages/conductivity/provider/conductivity_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/conductivity/provider/conductivity_provider.dart @@ -10,8 +10,8 @@ class ConductivityProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilConductivityNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/conductivity/view/conductivity_screen.dart b/agrilink_vocpro/lib/features/home/pages/conductivity/view/conductivity_screen.dart index c54f0a0..cc9eec7 100644 --- a/agrilink_vocpro/lib/features/home/pages/conductivity/view/conductivity_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/conductivity/view/conductivity_screen.dart @@ -140,10 +140,8 @@ class ConductivityScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilconductivityAvg ?? - 0 - : provider.dataFetchedNpk2[index].soilconductivityAvg ?? - 0, + ? provider.dataFetchedNpk1[index].soilconductivity ?? 0 + : provider.dataFetchedNpk2[index].soilconductivity ?? 0, ), maxValue: 1, ); diff --git a/agrilink_vocpro/lib/features/home/pages/humidity/view/humidity_screen.dart b/agrilink_vocpro/lib/features/home/pages/humidity/view/humidity_screen.dart index 6e812b8..a97297f 100644 --- a/agrilink_vocpro/lib/features/home/pages/humidity/view/humidity_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/humidity/view/humidity_screen.dart @@ -140,7 +140,7 @@ class HumidityScreen extends StatelessWidget { data: List.generate( provider.dataFetched.length, (index) => - provider.dataFetched[index].vicihumidityAvg + provider.dataFetched[index].vicihumidity ?.toDouble() ?? 0), ); diff --git a/agrilink_vocpro/lib/features/home/pages/luminosity/view/light_screen.dart b/agrilink_vocpro/lib/features/home/pages/luminosity/view/light_screen.dart index 7c93dcd..0a589fb 100644 --- a/agrilink_vocpro/lib/features/home/pages/luminosity/view/light_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/luminosity/view/light_screen.dart @@ -134,7 +134,7 @@ class LightScreen extends StatelessWidget { data: List.generate( provider.dataFetched.length, (index) => - provider.dataFetched[index].vicihumidityAvg + provider.dataFetched[index].vicihumidity ?.toDouble() ?? 0), ); diff --git a/agrilink_vocpro/lib/features/home/pages/nitrogen/provider/nitrogen_provider.dart b/agrilink_vocpro/lib/features/home/pages/nitrogen/provider/nitrogen_provider.dart index 3f638f8..7b1da62 100644 --- a/agrilink_vocpro/lib/features/home/pages/nitrogen/provider/nitrogen_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/nitrogen/provider/nitrogen_provider.dart @@ -10,8 +10,8 @@ class NitrogenProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilNitrogenNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/nitrogen/view/nitrogen_screen.dart b/agrilink_vocpro/lib/features/home/pages/nitrogen/view/nitrogen_screen.dart index fb7493a..3676520 100644 --- a/agrilink_vocpro/lib/features/home/pages/nitrogen/view/nitrogen_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/nitrogen/view/nitrogen_screen.dart @@ -140,8 +140,8 @@ class NitrogenScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilnitrogenAvg ?? 0 - : provider.dataFetchedNpk2[index].soilnitrogenAvg ?? 0, + ? provider.dataFetchedNpk1[index].soilnitrogen ?? 0 + : provider.dataFetchedNpk2[index].soilnitrogen ?? 0, ), maxValue: 1, ); diff --git a/agrilink_vocpro/lib/features/home/pages/ph/provider/ph_provider.dart b/agrilink_vocpro/lib/features/home/pages/ph/provider/ph_provider.dart index 0bcc6b0..8b8c66b 100644 --- a/agrilink_vocpro/lib/features/home/pages/ph/provider/ph_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/ph/provider/ph_provider.dart @@ -10,8 +10,8 @@ class PhProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilPhNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/ph/view/ph_screen.dart b/agrilink_vocpro/lib/features/home/pages/ph/view/ph_screen.dart index 7d2ab0e..ebc33d8 100644 --- a/agrilink_vocpro/lib/features/home/pages/ph/view/ph_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/ph/view/ph_screen.dart @@ -131,8 +131,8 @@ class PhScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilphAvg ?? 0 - : provider.dataFetchedNpk2[index].soilphAvg ?? 0, + ? provider.dataFetchedNpk1[index].soilph ?? 0 + : provider.dataFetchedNpk2[index].soilph ?? 0, ), maxValue: 14, ); diff --git a/agrilink_vocpro/lib/features/home/pages/phosphorus/provider/phosporus_provider.dart b/agrilink_vocpro/lib/features/home/pages/phosphorus/provider/phosporus_provider.dart index 0e6b343..158db16 100644 --- a/agrilink_vocpro/lib/features/home/pages/phosphorus/provider/phosporus_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/phosphorus/provider/phosporus_provider.dart @@ -10,8 +10,8 @@ class PhosporusProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilPhosporNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/phosphorus/view/phosphorus_screen.dart b/agrilink_vocpro/lib/features/home/pages/phosphorus/view/phosphorus_screen.dart index e76f14e..85bb910 100644 --- a/agrilink_vocpro/lib/features/home/pages/phosphorus/view/phosphorus_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/phosphorus/view/phosphorus_screen.dart @@ -140,9 +140,8 @@ class PhosphorusScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilphosphorusAvg ?? 0 - : provider.dataFetchedNpk2[index].soilphosphorusAvg ?? - 0, + ? provider.dataFetchedNpk1[index].soilphosphorus ?? 0 + : provider.dataFetchedNpk2[index].soilphosphorus ?? 0, ), maxValue: 10, ); diff --git a/agrilink_vocpro/lib/features/home/pages/potassium/provider/potassium_provider.dart b/agrilink_vocpro/lib/features/home/pages/potassium/provider/potassium_provider.dart index 7c3abbf..a771937 100644 --- a/agrilink_vocpro/lib/features/home/pages/potassium/provider/potassium_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/potassium/provider/potassium_provider.dart @@ -10,8 +10,8 @@ class PotassiumProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilPotassiumNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/potassium/view/potassium_screen.dart b/agrilink_vocpro/lib/features/home/pages/potassium/view/potassium_screen.dart index 31deb97..b650dd2 100644 --- a/agrilink_vocpro/lib/features/home/pages/potassium/view/potassium_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/potassium/view/potassium_screen.dart @@ -140,8 +140,8 @@ class PotassiumScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilpotassiumAvg ?? 0 - : provider.dataFetchedNpk2[index].soilpotassiumAvg ?? 0, + ? provider.dataFetchedNpk1[index].soilpotassium ?? 0 + : provider.dataFetchedNpk2[index].soilpotassium ?? 0, ), maxValue: 1, ); diff --git a/agrilink_vocpro/lib/features/home/pages/soil_moisture/provider/soil_moisture_provider.dart b/agrilink_vocpro/lib/features/home/pages/soil_moisture/provider/soil_moisture_provider.dart index 780dde8..f0ecba4 100644 --- a/agrilink_vocpro/lib/features/home/pages/soil_moisture/provider/soil_moisture_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/soil_moisture/provider/soil_moisture_provider.dart @@ -10,8 +10,8 @@ class SoilMoistureProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilMosNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/soil_moisture/view/soil_moisture_screen.dart b/agrilink_vocpro/lib/features/home/pages/soil_moisture/view/soil_moisture_screen.dart index f5efe78..efe21f4 100644 --- a/agrilink_vocpro/lib/features/home/pages/soil_moisture/view/soil_moisture_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/soil_moisture/view/soil_moisture_screen.dart @@ -170,8 +170,8 @@ class SoilMoistureScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soilhumidityAvg ?? 0 - : provider.dataFetchedNpk2[index].soilhumidityAvg ?? 0, + ? provider.dataFetchedNpk1[index].soilhumidity ?? 0 + : provider.dataFetchedNpk2[index].soilhumidity ?? 0, ), maxValue: 1, ); diff --git a/agrilink_vocpro/lib/features/home/pages/soil_temperature/provider/soil_temp_provider.dart b/agrilink_vocpro/lib/features/home/pages/soil_temperature/provider/soil_temp_provider.dart index f681e7f..5c95391 100644 --- a/agrilink_vocpro/lib/features/home/pages/soil_temperature/provider/soil_temp_provider.dart +++ b/agrilink_vocpro/lib/features/home/pages/soil_temperature/provider/soil_temp_provider.dart @@ -10,8 +10,8 @@ class SoilTempProvider extends ChangeNotifier { } ResultState dataState = ResultState.initial; - List dataFetchedNpk1 = []; - List dataFetchedNpk2 = []; + List dataFetchedNpk1 = []; + List dataFetchedNpk2 = []; Future getSoilTempNpk1Data() async { dataState = ResultState.loading; diff --git a/agrilink_vocpro/lib/features/home/pages/soil_temperature/view/soil_temperature_screen.dart b/agrilink_vocpro/lib/features/home/pages/soil_temperature/view/soil_temperature_screen.dart index a0ebe80..7870eec 100644 --- a/agrilink_vocpro/lib/features/home/pages/soil_temperature/view/soil_temperature_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/soil_temperature/view/soil_temperature_screen.dart @@ -220,10 +220,8 @@ class SoilTemperatureScreen extends StatelessWidget { ? provider.dataFetchedNpk1.length : provider.dataFetchedNpk2.length, (index) => isNpk1 - ? provider.dataFetchedNpk1[index].soiltemperatureAvg ?? - 0 - : provider.dataFetchedNpk2[index].soiltemperatureAvg ?? - 0, + ? provider.dataFetchedNpk1[index].soiltemperature ?? 0 + : provider.dataFetchedNpk2[index].soiltemperature ?? 0, ), maxValue: 70, ); diff --git a/agrilink_vocpro/lib/features/home/pages/temperature/view/temperature_screen.dart b/agrilink_vocpro/lib/features/home/pages/temperature/view/temperature_screen.dart index 7146dbe..5654709 100644 --- a/agrilink_vocpro/lib/features/home/pages/temperature/view/temperature_screen.dart +++ b/agrilink_vocpro/lib/features/home/pages/temperature/view/temperature_screen.dart @@ -223,8 +223,7 @@ class TemperatureScreen extends StatelessWidget { data: List.generate( provider.dataFetched.length, (index) => - provider - .dataFetched[index].vicitemperatureAvg + provider.dataFetched[index].vicitemperature ?.toDouble() ?? 0), ); diff --git a/agrilink_vocpro/lib/features/home/provider/home_provider.dart b/agrilink_vocpro/lib/features/home/provider/home_provider.dart index 546ae60..e7785fb 100644 --- a/agrilink_vocpro/lib/features/home/provider/home_provider.dart +++ b/agrilink_vocpro/lib/features/home/provider/home_provider.dart @@ -72,25 +72,25 @@ class HomeProvider extends ChangeNotifier { notifyListeners(); } else { final data = result.data!; - _dhtHumidity = data.dht?[0].vicihumidityAvg ?? 0; - _dhtTemperature = data.dht?[0].vicitemperatureAvg ?? 0; - _dhtLuminosity = data.dht?[0].viciluminosityAvg ?? 0; + _dhtHumidity = data.dht?[0].vicihumidity ?? 0; + _dhtTemperature = data.dht?[0].vicitemperature ?? 0; + _dhtLuminosity = data.dht?[0].viciluminosity ?? 0; - _npk1SoilMoisture = data.npk1?[0].soilhumidityAvg ?? 0; - _npk1Temperature = data.npk1?[0].soiltemperatureAvg ?? 0; - _npk1SoilPh = data.npk1?[0].soilphAvg ?? 0; - _npk1SoilEc = data.npk1?[0].soilconductivityAvg ?? 0; - _npk1SoilNitrogen = data.npk1?[0].soilnitrogenAvg ?? 0; - _npk1SoilPhosphorus = data.npk1?[0].soilphosphorusAvg ?? 0; - _npk1SoilPotassium = data.npk1?[0].soilpotassiumAvg ?? 0; + _npk1SoilMoisture = data.npk1?[0].soilhumidity ?? 0; + _npk1Temperature = data.npk1?[0].soiltemperature ?? 0; + _npk1SoilPh = data.npk1?[0].soilph ?? 0; + _npk1SoilEc = data.npk1?[0].soilconductivity ?? 0; + _npk1SoilNitrogen = data.npk1?[0].soilnitrogen ?? 0; + _npk1SoilPhosphorus = data.npk1?[0].soilphosphorus ?? 0; + _npk1SoilPotassium = data.npk1?[0].soilpotassium ?? 0; - _npk2SoilMoisture = data.npk2?[0].soilhumidityAvg ?? 0; - _npk2Temperature = data.npk2?[0].soiltemperatureAvg ?? 0; - _npk2SoilPh = data.npk2?[0].soilphAvg ?? 0; - _npk2SoilEc = data.npk2?[0].soilconductivityAvg ?? 0; - _npk2SoilNitrogen = data.npk2?[0].soilnitrogenAvg ?? 0; - _npk2SoilPhosphorus = data.npk2?[0].soilphosphorusAvg ?? 0; - _npk2SoilPotassium = data.npk2?[0].soilpotassiumAvg ?? 0; + _npk2SoilMoisture = data.npk2?[0].soilhumidity ?? 0; + _npk2Temperature = data.npk2?[0].soiltemperature ?? 0; + _npk2SoilPh = data.npk2?[0].soilph ?? 0; + _npk2SoilEc = data.npk2?[0].soilconductivity ?? 0; + _npk2SoilNitrogen = data.npk2?[0].soilnitrogen ?? 0; + _npk2SoilPhosphorus = data.npk2?[0].soilphosphorus ?? 0; + _npk2SoilPotassium = data.npk2?[0].soilpotassium ?? 0; dataState = ResultState.hasData; notifyListeners(); } diff --git a/agrilink_vocpro/lib/features/splash/view/splash_screen.dart b/agrilink_vocpro/lib/features/splash/view/splash_screen.dart index 828d917..e0e9dbd 100644 --- a/agrilink_vocpro/lib/features/splash/view/splash_screen.dart +++ b/agrilink_vocpro/lib/features/splash/view/splash_screen.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:agrilink_vocpro/core/route/app_route.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; @@ -20,6 +21,7 @@ class _SplashScreenState extends State { @override void initState() { super.initState(); + FirebaseMessaging.instance.subscribeToTopic('smartfarm'); _initialize(); } diff --git a/agrilink_vocpro/lib/firebase_options.dart b/agrilink_vocpro/lib/firebase_options.dart new file mode 100644 index 0000000..7fef1fb --- /dev/null +++ b/agrilink_vocpro/lib/firebase_options.dart @@ -0,0 +1,68 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCB8i2dE3Oc0kTNtVPw_qSz-T8gPYNjxFk', + appId: '1:445047869982:android:d40dc2fd624f86a315540f', + messagingSenderId: '445047869982', + projectId: 'agrilink-vocpro-b37f9', + storageBucket: 'agrilink-vocpro-b37f9.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDZO8tEZFcQrJMwJG_viJTbITWNVqxJo8E', + appId: '1:445047869982:ios:9350ac31c363c40415540f', + messagingSenderId: '445047869982', + projectId: 'agrilink-vocpro-b37f9', + storageBucket: 'agrilink-vocpro-b37f9.appspot.com', + iosBundleId: 'com.pis.agrilinkVocpro', + ); +} diff --git a/agrilink_vocpro/lib/main.dart b/agrilink_vocpro/lib/main.dart index 6cfef83..ca6b29a 100644 --- a/agrilink_vocpro/lib/main.dart +++ b/agrilink_vocpro/lib/main.dart @@ -1,16 +1,21 @@ import 'package:agrilink_vocpro/core/route/app_route.dart'; +import 'package:agrilink_vocpro/domain/service/firebase_api.dart'; import 'package:agrilink_vocpro/features/auth/provider/auth_provider.dart'; import 'package:agrilink_vocpro/features/control/provider/control_provider.dart'; import 'package:agrilink_vocpro/features/dashboard/provider/dashboard_provider.dart'; import 'package:agrilink_vocpro/features/home/provider/home_provider.dart'; import 'package:agrilink_vocpro/features/setting/provider/setting_provider.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:provider/provider.dart'; -void main() { +void main() async { WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + final firebaseApi = FirebaseApi(); + await firebaseApi.initNotification(); SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, // Locks the app in portrait mode ]).then((_) { diff --git a/agrilink_vocpro/macos/Flutter/GeneratedPluginRegistrant.swift b/agrilink_vocpro/macos/Flutter/GeneratedPluginRegistrant.swift index b8e2b22..35d1dc9 100644 --- a/agrilink_vocpro/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/agrilink_vocpro/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,10 +5,14 @@ import FlutterMacOS import Foundation +import firebase_core +import firebase_messaging import path_provider_foundation import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/agrilink_vocpro/pubspec.lock b/agrilink_vocpro/pubspec.lock index a03d989..4cad5cc 100644 --- a/agrilink_vocpro/pubspec.lock +++ b/agrilink_vocpro/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "5534e701a2c505fed1f0799e652dd6ae23bd4d2c4cf797220e5ced5764a7c1c2" + url: "https://pub.dev" + source: hosted + version: "1.3.44" animated_segmented_tab_control: dependency: "direct main" description: @@ -9,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + args: + dependency: transitive + description: + name: args + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + url: "https://pub.dev" + source: hosted + version: "2.6.0" async: dependency: transitive description: @@ -145,6 +161,54 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "51dfe2fbf3a984787a2e7b8592f2f05c986bfedd6fdacea3f9e0a7beb334de96" + url: "https://pub.dev" + source: hosted + version: "3.6.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: f967a7138f5d2ffb1ce15950e2a382924239eaa521150a8f144af34e68b3b3e5 + url: "https://pub.dev" + source: hosted + version: "2.18.1" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: eb6e28a3a35deda61fe8634967c84215efc19133ba58d8e0fc6c9a2af2cba05e + url: "https://pub.dev" + source: hosted + version: "15.1.3" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: b316c4ee10d93d32c033644207afc282d9b2b4372f3cf9c6022f3558b3873d2d + url: "https://pub.dev" + source: hosted + version: "4.5.46" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: d7f0147a1a9fe4313168e20154a01fd5cf332898de1527d3930ff77b8c7f5387 + url: "https://pub.dev" + source: hosted + version: "3.9.2" fl_chart: dependency: "direct main" description: @@ -208,6 +272,22 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.1" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5be191523702ba8d7a01ca97c17fca096822ccf246b0a9f11923a6ded06199b6" + url: "https://pub.dev" + source: hosted + version: "0.3.1+4" + googleapis_auth: + dependency: "direct main" + description: + name: googleapis_auth + sha256: befd71383a955535060acde8792e7efc11d2fccd03dd1d3ec434e85b68775938 + url: "https://pub.dev" + source: hosted + version: "1.6.0" html: dependency: transitive description: @@ -217,7 +297,7 @@ packages: source: hosted version: "0.15.4" http: - dependency: transitive + dependency: "direct main" description: name: http sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 diff --git a/agrilink_vocpro/pubspec.yaml b/agrilink_vocpro/pubspec.yaml index d5cd44b..a1f8d1f 100644 --- a/agrilink_vocpro/pubspec.yaml +++ b/agrilink_vocpro/pubspec.yaml @@ -48,6 +48,10 @@ dependencies: mqtt_client: ^10.5.1 shimmer: ^3.0.0 jwt_decoder: ^2.0.1 + firebase_core: ^3.6.0 + firebase_messaging: ^15.1.3 + googleapis_auth: ^1.6.0 + http: ^1.2.2 dev_dependencies: flutter_test: @@ -74,6 +78,7 @@ flutter: assets: - assets/images/ - assets/icons/ + - assets/json/ # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see diff --git a/agrilink_vocpro/windows/flutter/generated_plugin_registrant.cc b/agrilink_vocpro/windows/flutter/generated_plugin_registrant.cc index 8b6d468..1a82e7d 100644 --- a/agrilink_vocpro/windows/flutter/generated_plugin_registrant.cc +++ b/agrilink_vocpro/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); } diff --git a/agrilink_vocpro/windows/flutter/generated_plugins.cmake b/agrilink_vocpro/windows/flutter/generated_plugins.cmake index b93c4c3..fa8a39b 100644 --- a/agrilink_vocpro/windows/flutter/generated_plugins.cmake +++ b/agrilink_vocpro/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + firebase_core ) list(APPEND FLUTTER_FFI_PLUGIN_LIST