diff --git a/lib/config.dart b/lib/config.dart index c6a4fdc..f1d0d8f 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -2,35 +2,25 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL } + const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"]; class Config { - static Config _instance = Config( - flavor: Flavor.UNSET, - apiURL: "", - bucketName: "", - reportProjectID: "", - reportURL: ""); + static Config _instance = Config(flavor: Flavor.UNSET, apiURL: ""); final Flavor flavor; final String name; final Color color; final String apiURL; - final String reportURL; final Level level; - final String reportProjectID; - final String bucketName; factory Config( {required Flavor flavor, required String apiURL, - required String reportURL, - required String reportProjectID, - required String bucketName, - Color color= Colors.blue, - Level level= Level.SEVERE}) { - _instance = Config._internal(flavor, FlavorNames[flavor.index], color, - apiURL, reportURL, level, reportProjectID, bucketName); + Color color = Colors.blue, + Level level = Level.SEVERE}) { + _instance = Config._internal( + flavor, FlavorNames[flavor.index], color, apiURL, level); Logger.root.level = level; Logger.root.onRecord.listen((record) { @@ -41,8 +31,7 @@ class Config { return _instance; } - Config._internal(this.flavor, this.name, this.color, this.apiURL, - this.reportURL, this.level, this.reportProjectID, this.bucketName); + Config._internal(this.flavor, this.name, this.color, this.apiURL, this.level); static Config get instance { return _instance; diff --git a/lib/data/provider/package_data_provider.dart b/lib/data/provider/package_data_provider.dart index fe05e67..a8fbc75 100644 --- a/lib/data/provider/package_data_provider.dart +++ b/lib/data/provider/package_data_provider.dart @@ -1,12 +1,13 @@ import 'dart:convert'; -import 'package:fcs/config.dart'; import 'package:fcs/constants.dart'; import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart'; import 'package:logging/logging.dart'; +import '../services/services.dart'; + class PackageDataProvider { final log = Logger('PackageDataProvider'); @@ -70,7 +71,7 @@ class PackageDataProvider { try { var data = await requestAPI( "/api/fts/$packages_collection/$escapePackage/$limit", "GET", - url: Config.instance.reportURL, token: await getToken()); + url: Services.setting.reportURL, token: await getToken()); if (data == null) return []; @@ -105,7 +106,7 @@ class PackageDataProvider { }; var result = await requestAPI("/api/data/packages", "POST", token: await getToken(), - url: Config.instance.reportURL, + url: Services.setting.reportURL, payload: jsonEncode(data)); if (result == null) return packages; result.forEach((d) { diff --git a/lib/data/provider/pickup_data_provider.dart b/lib/data/provider/pickup_data_provider.dart index bd5ef56..4b64572 100644 --- a/lib/data/provider/pickup_data_provider.dart +++ b/lib/data/provider/pickup_data_provider.dart @@ -4,8 +4,7 @@ import 'package:fcs/domain/entities/pickup.dart'; import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart'; import 'package:logging/logging.dart'; - -import '../../config.dart'; +import '../services/services.dart'; class PickupDataProvider { final log = Logger('PickupDataProvider'); @@ -34,7 +33,7 @@ class PickupDataProvider { }; var result = await requestAPI("/api/data/pickups", "POST", token: await getToken(), - url: Config.instance.reportURL, + url: Services.setting.reportURL, payload: jsonEncode(data)); if (result == null) return pickups; result.forEach((d) { diff --git a/lib/data/provider/user_data_provider.dart b/lib/data/provider/user_data_provider.dart index f2077e7..f7bacdb 100644 --- a/lib/data/provider/user_data_provider.dart +++ b/lib/data/provider/user_data_provider.dart @@ -1,13 +1,14 @@ import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:fcs/config.dart'; import 'package:fcs/constants.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart'; import 'package:logging/logging.dart'; +import '../services/services.dart'; + class UserDataProvider { final log = Logger('UserDataProvider'); @@ -66,7 +67,7 @@ class UserDataProvider { try { var data = await requestAPI( "/api/fts/$user_collection/$escapeBuyer/$limit", "GET", - url: Config.instance.reportURL, token: await getToken()); + url: Services.setting.reportURL, token: await getToken()); if (data == null) return []; diff --git a/lib/data/services/services.dart b/lib/data/services/services.dart index 9781363..6310578 100644 --- a/lib/data/services/services.dart +++ b/lib/data/services/services.dart @@ -24,6 +24,7 @@ import 'package:fcs/data/services/rate_service.dart'; import 'package:fcs/data/services/shipment_imp.dart'; import 'package:fcs/data/services/shipment_service.dart'; +import '../../domain/entities/setting.dart'; import 'auth_imp.dart'; import 'auth_service.dart'; import 'common_imp.dart'; @@ -37,6 +38,8 @@ import 'user_service.dart'; class Services { static final Services instance = Services._(); + static Setting setting = Setting(); + late AuthService _authService; late UserService _userService; diff --git a/lib/domain/entities/setting.dart b/lib/domain/entities/setting.dart index 1c553d3..3a4ddaf 100644 --- a/lib/domain/entities/setting.dart +++ b/lib/domain/entities/setting.dart @@ -10,6 +10,9 @@ List dayLists = [ class Setting { final int supportBuildNum; + final String reportURL; + final String reportProjectID; + final String bucketName; // contact page String? usaAddress; String? mmAddress; @@ -24,7 +27,7 @@ class Setting { String? about; String? courierWebsite; String? deactivateTextEn; - String? deactivateTextMm; + String? deactivateTextMm; List shipmentTypes; @@ -44,27 +47,32 @@ class Setting { this.shipmentTypes = const [], this.courierWebsite, this.deactivateTextEn, - this.deactivateTextMm}); + this.deactivateTextMm, + this.bucketName = '', + this.reportProjectID = '', + this.reportURL = ''}); factory Setting.fromMap(Map map) { return Setting( - supportBuildNum: map['support_build_number'], - inviteRequired: map['invite_required'], - appUrl: map['app_url'], - usaAddress: map['usa_address'], - mmAddress: map['mm_address'], - usaContactNumber: map['usa_contact_number'], - mmContactNumber: map['mm_contact_number'], - emailAddress: map['email_address'], - facebookLink: map['facebook_link'], - about: map['about'], - termsEng: map['terms_eng_markdown'], - termsMm: map['terms_mm_markdown'], - shipmentTypes: List.from(map['shipment_types']), - courierWebsite: map['courier_website'], - deactivateTextEn: map['deactivate_text_en']??"", - deactivateTextMm: map['deactivate_text_mm']??"" - ); + supportBuildNum: map['support_build_number'], + inviteRequired: map['invite_required'], + appUrl: map['app_url'], + usaAddress: map['usa_address'], + mmAddress: map['mm_address'], + usaContactNumber: map['usa_contact_number'], + mmContactNumber: map['mm_contact_number'], + emailAddress: map['email_address'], + facebookLink: map['facebook_link'], + about: map['about'], + termsEng: map['terms_eng_markdown'], + termsMm: map['terms_mm_markdown'], + shipmentTypes: List.from(map['shipment_types']), + courierWebsite: map['courier_website'], + deactivateTextEn: map['deactivate_text_en'] ?? "", + deactivateTextMm: map['deactivate_text_mm'] ?? "", + reportProjectID: map['report_project_id'] ?? "", + reportURL: map['report_url'] ?? "", + bucketName: map['bucket_name'] ?? ''); } @override diff --git a/lib/helpers/api_helper.dart b/lib/helpers/api_helper.dart index 81fa7e5..64330fe 100644 --- a/lib/helpers/api_helper.dart +++ b/lib/helpers/api_helper.dart @@ -37,7 +37,7 @@ Future requestAPI(String path, method, if (devInfo.deviceID != null) { headers["Device"] = devInfo.deviceID ?? "" + ":" + deviceName; } - headers["Project-ID"] = Config.instance.reportProjectID; + headers["Project-ID"] = Services.setting.reportProjectID; BaseOptions options = new BaseOptions( method: method, @@ -99,7 +99,7 @@ Future requestDownloadAPI(String path, method, var _downloadData = StringBuffer(); var fileSave = new File(filePath!); var request = await client.getUrl(Uri.parse("$baseUrl$path")); - request.headers.set("Project-ID", Config.instance.reportProjectID); + request.headers.set("Project-ID", Services.setting.reportProjectID); request.headers .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8"); if (token != null) { @@ -140,7 +140,7 @@ Future requestDownloadPDFAPI(String path, method, // var _downloadData = StringBuffer(); var fileSave = new File(filePath!); var request = await client.getUrl(Uri.parse("$baseUrl$path")); - request.headers.set("Project-ID", Config.instance.reportProjectID); + request.headers.set("Project-ID", Services.setting.reportProjectID); if (token != null) { request.headers.set("Token", token); } @@ -188,7 +188,7 @@ Future requestDownload(String path, method, HttpClient client = new HttpClient(); // var _downloadData = StringBuffer(); var request = await client.postUrl(Uri.parse("$baseUrl$path")); - request.headers.set("Project-ID", Config.instance.reportProjectID); + request.headers.set("Project-ID", Services.setting.reportProjectID); if (token != null) { request.headers.set("Token", token); } @@ -244,7 +244,7 @@ Future downloadPDF( await requestDownload("/api/pdf", "POST", filePath: path, - url: Config.instance.reportURL, + url: Services.setting.reportURL, token: await getToken(), payload: jsonEncode(data), onDownloadDone: (f) async { completer.complete(f); diff --git a/lib/main-dev.dart b/lib/main-dev.dart index def8841..382aeb2 100644 --- a/lib/main-dev.dart +++ b/lib/main-dev.dart @@ -21,9 +21,9 @@ Future main() async { color: Colors.blue, apiURL: "http://192.168.100.150:9090", // apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13", - reportURL: "http://petrok.mokkon.com:7071", - reportProjectID: "fcs-dev", - bucketName: "gs://fcs-dev1-us", + // reportURL: "http://petrok.mokkon.com:7071", + // reportProjectID: "fcs-dev", + // bucketName: "gs://fcs-dev1-us", level: Level.ALL); runApp(App(title: "FCS - Dev")); } diff --git a/lib/main-local.dart b/lib/main-local.dart index b52b95f..8d85745 100644 --- a/lib/main-local.dart +++ b/lib/main-local.dart @@ -9,10 +9,12 @@ void main() { Config( flavor: Flavor.DEV, color: Colors.blue, - reportURL: "http://petrok.mokkon.com:8091", - reportProjectID: "fcs-dev", apiURL: "http://192.168.1.155:7777", - bucketName: "gs://fcs-dev1-us", + // reportURL: "http://petrok.mokkon.com:8091", + // reportProjectID: "fcs-dev", + // bucketName: "gs://fcs-dev1-us", level: Level.ALL); - runApp(App(title: "FCS - Dev local",)); + runApp(App( + title: "FCS - Dev local", + )); } diff --git a/lib/main-prod.dart b/lib/main-prod.dart index 9b67e7c..800690c 100644 --- a/lib/main-prod.dart +++ b/lib/main-prod.dart @@ -16,9 +16,9 @@ Future main() async { flavor: Flavor.PRODUCTION, color: Colors.blue, apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13", - reportURL: "http://petrok.mokkon.com:8092", - reportProjectID: "fcs-prod", - bucketName: "gs://fcs-prod1", + // reportURL: "http://petrok.mokkon.com:8092", + // reportProjectID: "fcs-prod", + // bucketName: "gs://fcs-prod1", level: Level.ALL); runApp(App(title: "FCS")); } diff --git a/lib/pages/carton/model/consignee_selection_model.dart b/lib/pages/carton/model/consignee_selection_model.dart index 7377de4..44e1545 100644 --- a/lib/pages/carton/model/consignee_selection_model.dart +++ b/lib/pages/carton/model/consignee_selection_model.dart @@ -2,10 +2,10 @@ import 'dart:async'; import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:fcs/config.dart'; import 'package:logging/logging.dart'; import '../../../constants.dart'; +import '../../../data/services/services.dart'; import '../../../domain/entities/user.dart'; import '../../../helpers/api_helper.dart'; import '../../../helpers/firebase_helper.dart'; @@ -56,7 +56,7 @@ class ConsigneeSelectionModel extends BaseModel { var result = await requestAPI( "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", - url: Config.instance.reportURL, token: await getToken()); + url: Services.setting.reportURL, token: await getToken()); if (result != null) { for (var row in result) { diff --git a/lib/pages/carton/model/sender_selection_model.dart b/lib/pages/carton/model/sender_selection_model.dart index 8179099..f69fa30 100644 --- a/lib/pages/carton/model/sender_selection_model.dart +++ b/lib/pages/carton/model/sender_selection_model.dart @@ -3,9 +3,8 @@ import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:logging/logging.dart'; - -import '../../../config.dart'; import '../../../constants.dart'; +import '../../../data/services/services.dart'; import '../../../domain/entities/user.dart'; import '../../../helpers/api_helper.dart'; import '../../../helpers/firebase_helper.dart'; @@ -57,7 +56,7 @@ class SenderSelectionModel extends BaseModel { var result = await requestAPI( "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", - url: Config.instance.reportURL, token: await getToken()); + url: Services.setting.reportURL, token: await getToken()); if (result != null) { for (var row in result) { diff --git a/lib/pages/fcs_shipment/model/fcs_shipment_model.dart b/lib/pages/fcs_shipment/model/fcs_shipment_model.dart index fe2863c..de1c285 100644 --- a/lib/pages/fcs_shipment/model/fcs_shipment_model.dart +++ b/lib/pages/fcs_shipment/model/fcs_shipment_model.dart @@ -157,9 +157,12 @@ class FcsShipmentModel extends BaseModel { void initUser(user) { super.initUser(user); - _loadShipmentTypes(); - _loadShipmentConsignees(); - _loadShipmentPorts(); + + if (user != null && user.hasFcsShipments()) { + _loadShipmentTypes(); + _loadShipmentConsignees(); + _loadShipmentPorts(); + } } @override diff --git a/lib/pages/main/model/main_model.dart b/lib/pages/main/model/main_model.dart index 781241f..6952650 100644 --- a/lib/pages/main/model/main_model.dart +++ b/lib/pages/main/model/main_model.dart @@ -141,6 +141,7 @@ class MainModel extends ChangeNotifier { try { Services.instance.authService.getSetting().listen((event) { this.setting = event; + Services.setting = event; models.forEach((m) => m.initSetting(setting)); notifyListeners(); }); diff --git a/lib/pages/package/package_info.dart b/lib/pages/package/package_info.dart index c6285c9..421526c 100644 --- a/lib/pages/package/package_info.dart +++ b/lib/pages/package/package_info.dart @@ -133,7 +133,7 @@ class _PackageInfoState extends State { if (d == null) return; _changeDeliverayAddress(d); } - : () {}, + : null, ); return LocalProgress(