Skip to content

Commit 243fcb4

Browse files
committed
Refactoring
1 parent eb7e9d4 commit 243fcb4

File tree

14 files changed

+197
-209
lines changed

14 files changed

+197
-209
lines changed

sensors_dashboard/http-server/server.dart

Lines changed: 0 additions & 76 deletions
This file was deleted.

sensors_dashboard/lib/main.dart

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ import 'package:flutter/foundation.dart';
22
import 'package:flutter/material.dart';
33
import 'package:get_it/get_it.dart';
44
import 'package:provider/provider.dart';
5-
import 'package:sensors_dashboard/model/server_info.dart';
5+
import 'package:sensors_dashboard/model/data/server_info.dart';
6+
import 'package:sensors_dashboard/model/repository/info_repository.dart';
7+
import 'package:sensors_dashboard/model/repository/sensors_repository.dart';
8+
import 'package:sensors_dashboard/model/repository_impl/sensors_repository_impl.dart';
9+
import 'package:sensors_dashboard/view/screens/sensor_graph_screen.dart';
610
import 'package:sensors_dashboard/view/screens/sensors_screen.dart';
11+
import 'package:sensors_dashboard/view_model/sensor_graph_screen_viewmodel.dart';
712
import 'package:sensors_dashboard/view_model/sensors_screen_viewmodel.dart';
813

14+
import 'model/repository_impl/info_repository_imp.dart';
15+
916
void main() {
10-
if(kDebugMode){
11-
GetIt.instance.registerSingleton<ServerInfo>(ServerInfo());
12-
}
13-
else if(kReleaseMode){
14-
GetIt.instance.registerSingleton<ServerInfo>(ServerInfo(deployed: true));
15-
}
17+
setUpDependencies();
1618
runApp(const MyApp());
1719
}
1820

@@ -22,18 +24,57 @@ class MyApp extends StatelessWidget {
2224
@override
2325
Widget build(BuildContext context) {
2426

25-
return ChangeNotifierProvider(
26-
create: (context) => SensorsScreenViewmodel(),
27+
return MultiProvider(
28+
providers: [
29+
ChangeNotifierProvider(
30+
create: (context) => GetIt.instance.get<SensorsScreenViewmodel>(),
31+
child: const SensorsScreen(),
32+
),
33+
ChangeNotifierProvider(
34+
create: (context) => GetIt.instance.get<SensorGraphScreenViewmodel>(),
35+
child: const SensorGraphScreen(),
36+
)
37+
],
38+
2739
child: MaterialApp(
2840
debugShowCheckedModeBanner: false,
2941
title: 'Sensors Dashboard',
42+
initialRoute: SensorsScreen.routeName,
43+
routes: {
44+
SensorsScreen.routeName : (context) => const SensorsScreen(),
45+
SensorGraphScreen.routeName : (context) => const SensorGraphScreen()
46+
},
3047
theme: ThemeData(
3148
colorScheme: ColorScheme.fromSeed(
3249
seedColor: Colors.teal),
3350
useMaterial3: true,
3451
),
35-
home: const SensorsScreen()
3652
),
3753
);
3854
}
3955
}
56+
57+
void setUpDependencies(){
58+
59+
if(kDebugMode){
60+
GetIt.instance.registerSingleton<ServerInfo>(ServerInfo(testIp: "192.168.18.8", testPortNo: 8081));
61+
}
62+
else if(kReleaseMode){
63+
GetIt.instance.registerSingleton<ServerInfo>(ServerInfo(deployed: true));
64+
}
65+
66+
final serverInfo = GetIt.instance.get<ServerInfo>();
67+
GetIt.instance.registerSingleton<SensorsRepository>(SensorsRepositoryImpl(serverInfo: serverInfo));
68+
GetIt.instance.registerSingleton<InfoRepository>(InfoRepositoryImpl(serverInfo: serverInfo));
69+
70+
//viewModel dependencies
71+
GetIt.instance.registerSingleton<SensorsScreenViewmodel>(
72+
SensorsScreenViewmodel(sensorsRepository: GetIt.instance.get<SensorsRepository>())
73+
);
74+
75+
GetIt.instance.registerSingleton<SensorGraphScreenViewmodel>(
76+
SensorGraphScreenViewmodel(infoRepository: GetIt.instance.get<InfoRepository>(), serverInfo: serverInfo)
77+
);
78+
79+
80+
}
File renamed without changes.

sensors_dashboard/lib/model/server_info.dart renamed to sensors_dashboard/lib/model/data/server_info.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class ServerInfo {
2222
};
2323
}
2424

25+
String get sensorsUrl => "http://$address/sensors";
26+
String get websocketPortUrl => "http://$address/wsport";
27+
String get sensorConnectionUrl => "ws://$address/sensor/connect";
2528

2629
ServerInfo({this.deployed = false, this.testIp = "127.0.0.1", this.testPortNo = 8080});
2730

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,4 @@
1-
import 'dart:convert';
21

3-
import 'package:get_it/get_it.dart';
4-
import 'package:sensors_dashboard/model/server_info.dart';
5-
import "package:http/http.dart" as http;
6-
7-
class InfoRepository {
8-
Future<int> getWebSocketPortNo() async {
9-
try {
10-
final serverInfo = GetIt.instance.get<ServerInfo>();
11-
final url = "http://${serverInfo.address}/wsport";
12-
13-
final response = await http.get(Uri.parse(url));
14-
final json = jsonDecode(response.body);
15-
16-
return json["portNo"];
17-
} on Exception catch (_) {
18-
return Future.error(Exception("Failed to get websocket portNo"));
19-
}
20-
}
21-
}
2+
abstract class InfoRepository {
3+
Future<int> getWebSocketPortNo();
4+
}
Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,8 @@
1-
import 'dart:convert';
2-
import 'dart:developer';
31

4-
import 'package:get_it/get_it.dart';
5-
import 'package:sensors_dashboard/model/sensor.dart';
6-
import 'package:http/http.dart' as http;
7-
import 'package:sensors_dashboard/model/server_info.dart';
2+
import '../data/sensor.dart';
83

9-
class SensorsRepository {
10-
4+
abstract class SensorsRepository {
115

12-
Future<List<Sensor>> getSensors() async {
13-
try {
6+
Future<List<Sensor>> getSensors();
147

15-
final serverInfo = GetIt.instance.get<ServerInfo>();
16-
final url = "http://${serverInfo.address}/sensors";
17-
log("fetching sensors from $url");
18-
19-
20-
final response = await http.get(Uri.parse(url));
21-
final sensorsJson = jsonDecode(response.body);
22-
23-
final sensors = <Sensor>[];
24-
25-
for(dynamic sensor in sensorsJson){
26-
sensors.add(Sensor.fromJson(sensor));
27-
}
28-
29-
return sensors;
30-
31-
32-
} on Exception catch (_) {
33-
log("Failed to load sensors");
34-
return Future.error(Exception("Unable to load sensors"));
35-
36-
}
37-
}
38-
}
8+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'dart:convert';
2+
import 'dart:developer';
3+
4+
import "package:http/http.dart" as http;
5+
import 'package:sensors_dashboard/model/data/server_info.dart';
6+
import 'package:sensors_dashboard/model/repository/info_repository.dart';
7+
8+
class InfoRepositoryImpl extends InfoRepository{
9+
10+
final ServerInfo serverInfo;
11+
InfoRepositoryImpl({required this.serverInfo});
12+
13+
@override
14+
Future<int> getWebSocketPortNo() async {
15+
try {
16+
17+
final url = serverInfo.websocketPortUrl;
18+
log("Fetching websocket port from $url");
19+
20+
final response = await http.get(Uri.parse(url));
21+
final json = jsonDecode(response.body);
22+
23+
return json["portNo"];
24+
} on Exception catch (_) {
25+
return Future.error(Exception("Failed to get websocket portNo"));
26+
}
27+
}
28+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import 'dart:convert';
2+
import 'dart:developer';
3+
4+
import 'package:flutter/foundation.dart';
5+
import 'package:http/http.dart' as http;
6+
import 'package:sensors_dashboard/model/data/sensor.dart';
7+
import 'package:sensors_dashboard/model/data/server_info.dart';
8+
import 'package:sensors_dashboard/model/repository/sensors_repository.dart';
9+
10+
class SensorsRepositoryImpl extends SensorsRepository{
11+
final ServerInfo serverInfo;
12+
13+
SensorsRepositoryImpl({required this.serverInfo});
14+
15+
@override
16+
Future<List<Sensor>> getSensors() async {
17+
try {
18+
19+
if(kDebugMode){
20+
if(kDebugMode){
21+
log("Loading fake list of sensors");
22+
return Future<List<Sensor>>.delayed(const Duration(seconds: 1),(){
23+
return const <Sensor>[
24+
Sensor(name: "Accelerometer", type: "android.sensor.accelerometer"),
25+
Sensor(name: "Gyroscope", type: "android.sensor.gyroscope"),
26+
Sensor(name: "Light", type: "android.sensor.light"),
27+
Sensor(name: "Gravity", type: "android.sensor.gravity"),
28+
];
29+
});
30+
}
31+
}
32+
33+
final url = serverInfo.sensorsUrl;
34+
log("fetching sensors from $url");
35+
36+
37+
final response = await http.get(Uri.parse(url));
38+
final sensorsJson = jsonDecode(response.body);
39+
40+
final sensors = <Sensor>[];
41+
42+
for(dynamic sensor in sensorsJson){
43+
sensors.add(Sensor.fromJson(sensor));
44+
}
45+
46+
return sensors;
47+
48+
49+
} on Exception catch (_) {
50+
log("Failed to load sensors");
51+
return Future.error(Exception("Unable to load sensors"));
52+
53+
}
54+
}
55+
}

sensors_dashboard/lib/view/components/sensor_widget.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11

22
import 'package:flutter/material.dart';
33
import 'package:provider/provider.dart';
4-
import 'package:sensors_dashboard/model/sensor.dart';
5-
import 'package:sensors_dashboard/view/components/sensor_graph_widget.dart';
6-
import 'package:sensors_dashboard/view_model/sensor_graph_viewmodel.dart';
4+
import 'package:sensors_dashboard/model/data/sensor.dart';
5+
import 'package:sensors_dashboard/view/screens/sensor_graph_screen.dart';
76
import 'package:sensors_dashboard/view_model/sensor_viewmodel.dart';
87

98
/// A widget which represents sensor of Android device
@@ -50,10 +49,10 @@ class SensorWidget extends StatelessWidget {
5049
),
5150
if(sensor.type.contains("accelerometer") || sensor.type.contains("gyroscope") || sensor.type.contains("magnetic_field"))
5251
IconButton(icon: const Icon(Icons.insert_chart), onPressed: viewModel.isConnected ? null : (){
53-
Navigator.of(context).push(
54-
MaterialPageRoute(builder: (context) => ChangeNotifierProvider(
55-
create: (context) => SensorGraphViewmodel(),
56-
child: SensorGraphWidget(sensor)),));
52+
Navigator.of(context).pushNamed(
53+
SensorGraphScreen.routeName,
54+
arguments: sensor,
55+
);
5756
},)
5857
],
5958
),

sensors_dashboard/lib/view/components/sensor_graph_widget.dart renamed to sensors_dashboard/lib/view/screens/sensor_graph_screen.dart

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
import 'package:fl_chart/fl_chart.dart';
22
import 'package:flutter/material.dart';
33
import 'package:provider/provider.dart';
4-
import 'package:sensors_dashboard/view_model/sensor_graph_viewmodel.dart';
4+
import 'package:sensors_dashboard/view_model/sensor_graph_screen_viewmodel.dart';
55

6-
import '../../model/sensor.dart';
6+
import '../../model/data/sensor.dart';
77

8-
class SensorGraphWidget extends StatelessWidget {
9-
final Sensor sensor;
10-
const SensorGraphWidget(this.sensor, {super.key});
8+
class SensorGraphScreen extends StatelessWidget {
9+
10+
const SensorGraphScreen({super.key});
11+
12+
static const routeName = "/sensorsGraphScreen";
1113

1214
@override
1315
Widget build(BuildContext context) {
1416
//debugPrint("GraphScreen()");
17+
final sensor = ModalRoute.of(context)!.settings.arguments as Sensor;
1518

16-
final viewModel = Provider.of<SensorGraphViewmodel>(context);
19+
final viewModel = Provider.of<SensorGraphScreenViewmodel>(context);
1720
const xDataColor = Colors.green;
1821
const yDataColor = Colors.blue;
1922
const zDataColor = Colors.red;

0 commit comments

Comments
 (0)