diff options
author | Aakash Solanki <tech2aks@gmail.com> | 2022-08-31 15:23:53 +0200 |
---|---|---|
committer | Aakash Solanki <tech2aks@gmail.com> | 2022-09-14 11:50:03 +0200 |
commit | e39f2a69fde316b4e260c151757fb739494fbd56 (patch) | |
tree | 3ea8a65eee101457264d0000b5bcf122d428b0b8 /lib/cluster_config.dart | |
parent | 5957cfa0609ff57adfafa4538fb151d00f3c72e3 (diff) |
Upload Flutter Instrument Cluster app
Instrument Cluster demo app which shows speedometer
tachometer guages, temperature and fuel bars and some
indicators like turn indicators, engine malfunction,
lights, cruise control, lane assist. KUKSA.VAL is the
data source for the widgets.
This app depends on several plugins and all the plugins
have an OSI-approved license.
Bug-AGL: SPEC-4543
Change-Id: I2698c66f9d8d824690ae7e567ca7c93ceeb17e08
Signed-off-by: Aakash Solanki <tech2aks@gmail.com>
Diffstat (limited to 'lib/cluster_config.dart')
-rw-r--r-- | lib/cluster_config.dart | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/lib/cluster_config.dart b/lib/cluster_config.dart new file mode 100644 index 0000000..10e152d --- /dev/null +++ b/lib/cluster_config.dart @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: Apache-2.0 + +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter_cluster_dashboard/vehicle_signal/initial_socket_connection.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:yaml/yaml.dart'; + +class GetConfig extends ConsumerStatefulWidget { + const GetConfig({Key? key, required this.client}) : super(key: key); + final HttpClient client; + + @override + ConsumerState<GetConfig> createState() => _GetConfigState(); +} + +class _GetConfigState extends ConsumerState<GetConfig> { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + final configStateProvider = ref.read(clusterConfigStateprovider.notifier); + + String configFilePath = '/etc/xdg/AGL/flutter-cluster-dashboard.yaml'; + String orsKeyFilePath = '/etc/default/openroutekey'; + + String keyContent = ""; + + final configFile = File(configFilePath); + final orsKeyFile = File(orsKeyFilePath); + + configFile.readAsString().then((content) { + final dynamic yamlMap = loadYaml(content); + configStateProvider.update( + hostname: yamlMap['hostname'], + port: yamlMap['port'], + homeLat: yamlMap['homeLat'], + homeLng: yamlMap['homeLng'], + orsPathParam: yamlMap['orsPathParam'], + kuksaAuthToken: yamlMap['kuskaAuthToken'], + ); + }); + + orsKeyFile.readAsString().then((content) { + keyContent = content.split(':')[1].trim(); + if (keyContent.isNotEmpty && keyContent != 'YOU_NEED_TO_SET_IT_IN_LOCAL_CONF') { + configStateProvider.update(orsApiKey: keyContent); + } else { + print("WARNING: openrouteservice API Key not found !"); + } + }); + }); + } + + @override + Widget build(BuildContext context) { + final config = ref.watch(clusterConfigStateprovider); + if (config.hostname == "" || + config.port == 0 || + config.kuksaAuthToken == "" || + config.homeLat == 0 || + config.homeLng == 0 || + config.orsPathParam == "") { + return Scaffold( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: const [ + Text("ERROR", + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), + Text( + "Something Wrong with config file! Check config.yaml file and restart"), + ], + )), + ); + } + return InitialScreen(client: widget.client); + } +} + +class ClusterConfig { + ClusterConfig({ + required this.hostname, + required this.port, + required this.kuksaAuthToken, + required this.orsApiKey, + required this.orsPathParam, + required this.homeLat, + required this.homeLng, + }); + final String hostname; + final int port; + final String kuksaAuthToken; + final double homeLat; + final double homeLng; + final String orsApiKey; + final String orsPathParam; + + ClusterConfig copywith({ + String? hostname, + int? port, + String? kuksaAuthToken, + double? homeLat, + double? homeLng, + String? orsApiKey, + String? orsPathParam, + }) => + ClusterConfig( + hostname: hostname ?? this.hostname, + port: port ?? this.port, + kuksaAuthToken: kuksaAuthToken ?? this.kuksaAuthToken, + orsApiKey: orsApiKey ?? this.orsApiKey, + orsPathParam: orsPathParam ?? this.orsPathParam, + homeLat: homeLat ?? this.homeLat, + homeLng: homeLng ?? this.homeLng, + ); +} + +class ClusterConfigStateNotifier extends StateNotifier<ClusterConfig> { + ClusterConfigStateNotifier() : super(_initialValue); + static final ClusterConfig _initialValue = ClusterConfig( + hostname: "", + port: 0, + kuksaAuthToken: "", + orsApiKey: "", + orsPathParam: "", + homeLat: 0, + homeLng: 0, + ); + void update({ + String? hostname, + int? port, + String? kuksaAuthToken, + double? homeLat, + double? homeLng, + String? orsApiKey, + String? orsPathParam, + }) { + state = state.copywith( + hostname: hostname, + port: port, + kuksaAuthToken: kuksaAuthToken, + homeLat: homeLat, + homeLng: homeLng, + orsApiKey: orsApiKey, + orsPathParam: orsPathParam, + ); + } +} + +final clusterConfigStateprovider = + StateNotifierProvider<ClusterConfigStateNotifier, ClusterConfig>( + (ref) => ClusterConfigStateNotifier()); |