1
1
import 'dart:io' ;
2
2
import 'package:badgemagic/bademagic_module/bluetooth/base_ble_state.dart' ;
3
3
import 'package:badgemagic/bademagic_module/bluetooth/datagenerator.dart' ;
4
- import 'package:badgemagic/bademagic_module/utils/converters.dart' ;
5
- import 'package:badgemagic/bademagic_module/utils/file_helper.dart' ;
6
- import 'package:badgemagic/bademagic_module/utils/toast_utils.dart' ;
7
4
import 'package:badgemagic/bademagic_module/bluetooth/scan_state.dart' ;
8
5
import 'package:badgemagic/bademagic_module/models/data.dart' ;
9
6
import 'package:badgemagic/bademagic_module/models/messages.dart' ;
10
7
import 'package:badgemagic/bademagic_module/models/mode.dart' ;
11
8
import 'package:badgemagic/bademagic_module/models/speed.dart' ;
9
+ import 'package:badgemagic/bademagic_module/utils/converters.dart' ;
10
+ import 'package:badgemagic/bademagic_module/utils/file_helper.dart' ;
11
+ import 'package:badgemagic/bademagic_module/utils/toast_utils.dart' ;
12
+ import 'package:badgemagic/providers/BadgeScanProvider.dart' ;
12
13
import 'package:badgemagic/providers/imageprovider.dart' ;
14
+ import 'package:flutter/widgets.dart' ;
13
15
import 'package:flutter_blue_plus/flutter_blue_plus.dart' ;
14
16
import 'package:get_it/get_it.dart' ;
15
17
import 'package:logger/logger.dart' ;
18
+ import 'package:provider/provider.dart' ;
16
19
17
- Map <int , Mode > modeValueMap = {
20
+ /// Maps for speed and mode enums.
21
+ final Map <int , Mode > modeValueMap = {
18
22
0 : Mode .left,
19
23
1 : Mode .right,
20
24
2 : Mode .up,
@@ -26,7 +30,7 @@ Map<int, Mode> modeValueMap = {
26
30
8 : Mode .laser
27
31
};
28
32
29
- Map <int , Speed > speedMap = {
33
+ final Map <int , Speed > speedMap = {
30
34
1 : Speed .one,
31
35
2 : Speed .two,
32
36
3 : Speed .three,
@@ -39,84 +43,120 @@ Map<int, Speed> speedMap = {
39
43
40
44
class BadgeMessageProvider {
41
45
static final Logger logger = Logger ();
42
- InlineImageProvider controllerData =
46
+ final InlineImageProvider controllerData =
43
47
GetIt .instance.get <InlineImageProvider >();
44
- FileHelper fileHelper = FileHelper ();
45
- Converters converters = Converters ();
48
+ final FileHelper fileHelper = FileHelper ();
49
+ final Converters converters = Converters ();
46
50
47
- Future <Data > getBadgeData (String text, bool flash, bool marq, Speed speed,
48
- Mode mode, bool isInverted) async {
49
- List <String > message = await converters.messageTohex (text, isInverted);
50
- Data data = Data (messages: [
51
+ /// Generates badge data from text and config.
52
+ Future <Data > getBadgeData (
53
+ String text,
54
+ bool flash,
55
+ bool marq,
56
+ Speed speed,
57
+ Mode mode,
58
+ bool isInverted,
59
+ ) async {
60
+ final hexMessage = await converters.messageTohex (text, isInverted);
61
+ return Data (messages: [
51
62
Message (
52
- text: message ,
63
+ text: hexMessage ,
53
64
flash: flash,
54
65
marquee: marq,
55
66
speed: speed,
56
67
mode: mode,
57
68
)
58
69
]);
59
- return data;
60
70
}
61
71
72
+ /// Returns badge data from json or input fields.
62
73
Future <Data > generateData (
63
- String ? text,
64
- bool ? flash,
65
- bool ? marq,
66
- bool ? inverted,
67
- Speed ? speed,
68
- Mode ? mode,
69
- Map <String , dynamic >? jsonData) async {
74
+ String ? text,
75
+ bool ? flash,
76
+ bool ? marq,
77
+ bool ? inverted,
78
+ Speed ? speed,
79
+ Mode ? mode,
80
+ Map <String , dynamic >? jsonData,
81
+ ) async {
70
82
if (jsonData != null ) {
71
83
return fileHelper.jsonToData (jsonData);
72
84
} else {
73
- return getBadgeData (text ?? '' , flash ?? false , marq ?? false ,
74
- speed ?? Speed .one, mode ?? Mode .left, inverted ?? false );
85
+ return getBadgeData (
86
+ text ?? '' ,
87
+ flash ?? false ,
88
+ marq ?? false ,
89
+ speed ?? Speed .one,
90
+ mode ?? Mode .left,
91
+ inverted ?? false ,
92
+ );
75
93
}
76
94
}
77
95
78
- Future <void > transferData (DataTransferManager manager) async {
96
+ /// Transfers data to the badge via BLE using current scan settings.
97
+ Future <void > transferData (
98
+ DataTransferManager manager,
99
+ BuildContext context,
100
+ ) async {
101
+ final scanProvider = Provider .of <BadgeScanProvider >(context, listen: false );
102
+
103
+ final BleState ? initialState = ScanState (
104
+ manager: manager,
105
+ mode: scanProvider.mode,
106
+ allowedNames: scanProvider.badgeNames,
107
+ );
108
+
109
+ BleState ? state = initialState;
79
110
DateTime now = DateTime .now ();
80
- BleState ? state = ScanState (manager : manager);
111
+
81
112
while (state != null ) {
82
113
state = await state.process ();
83
114
}
84
115
85
- logger.d ("Time to transfer data is = ${DateTime .now ().difference (now )}" );
116
+ logger.d ("Time to transfer data: ${DateTime .now ().difference (now )}" );
86
117
logger.d (".......Data transfer completed......." );
87
118
}
88
119
120
+ /// Public method to initiate check and transfer sequence.
89
121
Future <void > checkAndTransfer (
90
- String ? text,
91
- bool ? flash,
92
- bool ? marq,
93
- bool ? isInverted,
94
- int ? speed,
95
- Mode ? mode,
96
- Map <String , dynamic >? jsonData,
97
- bool isSavedBadge) async {
122
+ String ? text,
123
+ bool ? flash,
124
+ bool ? marq,
125
+ bool ? isInverted,
126
+ int ? speed,
127
+ Mode ? mode,
128
+ Map <String , dynamic >? jsonData,
129
+ bool isSavedBadge,
130
+ BuildContext context,
131
+ ) async {
132
+ // Check for Bluetooth support
98
133
if (await FlutterBluePlus .isSupported == false ) {
99
134
ToastUtils ().showErrorToast ('Bluetooth is not supported by the device' );
100
135
return ;
101
136
}
102
137
103
- if (controllerData.getController ().text.isEmpty && isSavedBadge == false ) {
138
+ // Skip if no message typed and not saved
139
+ if (controllerData.getController ().text.isEmpty && ! isSavedBadge) {
104
140
ToastUtils ().showErrorToast ("Please enter a message" );
105
141
return ;
106
142
}
107
143
108
144
final adapterState = await FlutterBluePlus .adapterState.first;
145
+
109
146
if (adapterState == BluetoothAdapterState .on ) {
110
- Data data;
111
- if (jsonData != null ) {
112
- data = fileHelper.jsonToData (jsonData);
113
- } else {
114
- data = await generateData (
115
- text, flash, marq, isInverted, speedMap[speed], mode, jsonData);
116
- }
117
- DataTransferManager manager = DataTransferManager (data);
118
- await transferData (manager);
147
+ final data = await generateData (
148
+ text,
149
+ flash,
150
+ marq,
151
+ isInverted,
152
+ speedMap[speed],
153
+ mode,
154
+ jsonData,
155
+ );
156
+ final manager = DataTransferManager (data);
157
+ await transferData (manager, context);
119
158
} else {
159
+ // Try enabling Bluetooth
120
160
if (Platform .isAndroid) {
121
161
ToastUtils ().showToast ('Turning on Bluetooth...' );
122
162
await FlutterBluePlus .turnOn ();
0 commit comments