Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
E
esc_pos_print_plus
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dio Maulana
esc_pos_print_plus
Commits
20a729f4
Commit
20a729f4
authored
Jan 15, 2020
by
Andrey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
print function moved to manager class
parent
b412622d
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
131 additions
and
59 deletions
+131
-59
main.dart
example/blue/lib/main.dart
+2
-1
printer_bluetooth_manager.dart
lib/src/printer_bluetooth_manager.dart
+129
-58
No files found.
example/blue/lib/main.dart
View file @
20a729f4
...
...
@@ -63,7 +63,8 @@ class _MyHomePageState extends State<MyHomePage> {
void
_testPrint
(
PrinterBluetooth
printer
)
async
{
try
{
printer
.
printLine
(
'hello'
);
printerManager
.
selectPrinter
(
printer
);
printerManager
.
printLine
(
'hello'
);
}
catch
(
e
)
{
print
(
e
.
toString
());
}
...
...
lib/src/printer_bluetooth_manager.dart
View file @
20a729f4
...
...
@@ -27,24 +27,136 @@ class PrinterBluetooth {
PrinterBluetooth
(
this
.
_device
);
final
BluetoothDevice
_device
;
// final BluetoothManager _bluetoothManager = BluetoothManager.instance;
final
PrinterBluetoothManager
_manager
=
PrinterBluetoothManager
();
bool
_isPrinting
=
false
;
//
final PrinterBluetoothManager _manager = PrinterBluetoothManager();
//
bool _isPrinting = false;
String
get
name
=>
_device
.
name
;
String
get
address
=>
_device
.
address
;
int
get
type
=>
_device
.
type
;
// Future _runDelayed(int seconds) {
// return Future<dynamic>.delayed(Duration(seconds: seconds));
// }
// void printLine(String text) async {
// const int timeout = 5;
// print('============ ${_manager._isScanning}');
// // if (_bluetoothManager.is) {
// // showToast('Print failed (scanning in progress)');
// // return;
// // }
// if (_isPrinting) {
// throw Exception('Print failed (another printing in progress)');
// }
// _isPrinting = true;
// // We have to rescan before connecting, otherwise we can connect only once
// await _manager._bluetoothManager.startScan(timeout: Duration(seconds: 1));
// await _manager._bluetoothManager.stopScan();
// // Connect
// await _manager._bluetoothManager.connect(_device);
// // Subscribe to the events
// _manager._bluetoothManager.state.listen((state) async {
// switch (state) {
// case BluetoothManager.CONNECTED:
// print('********************* CONNECTED');
// // to avoid double call
// // if (!_connected) {
// if (_device.connected == null || !_device.connected) {
// print('@@@@SEND DATA......');
// final List<int> bytes = latin1.encode('test!\n\n\n').toList();
// await _manager._bluetoothManager.writeData(bytes);
// // showToast('Data sent'); TODO
// // return 0;
// }
// // TODO sending disconnect signal should be event-based
// _runDelayed(3).then((dynamic v) async {
// print('@@@@DISCONNECTING......');
// await _manager._bluetoothManager.disconnect();
// _isPrinting = false;
// });
// // _connected = true;
// break;
// case BluetoothManager.DISCONNECTED:
// print('********************* DISCONNECTED');
// // _connected = false;
// break;
// default:
// break;
// }
// // return 0;
// });
// // Printing timeout
// _runDelayed(timeout).then((dynamic v) async {
// if (_isPrinting) {
// _isPrinting = false;
// throw Exception('Print failed (timeout)');
// }
// });
// }
}
/// Printer Bluetooth Manager
class
PrinterBluetoothManager
{
final
BluetoothManager
_bluetoothManager
=
BluetoothManager
.
instance
;
// bool _connected = false;
bool
_isScanning
=
false
;
bool
_isPrinting
=
false
;
StreamSubscription
_scanResultsSubscription
;
StreamSubscription
_isScanningSubscription
;
PrinterBluetooth
_selectedPrinter
;
Stream
<
bool
>
get
isScanningStream
=>
_bluetoothManager
.
isScanning
;
BehaviorSubject
<
List
<
PrinterBluetooth
>>
_scanResults
=
BehaviorSubject
.
seeded
([]);
Stream
<
List
<
PrinterBluetooth
>>
get
scanResults
=>
_scanResults
.
stream
;
Future
_runDelayed
(
int
seconds
)
{
return
Future
<
dynamic
>.
delayed
(
Duration
(
seconds:
seconds
));
}
void
startScan
(
Duration
timeout
)
async
{
_scanResults
.
add
(<
PrinterBluetooth
>[]);
_bluetoothManager
.
startScan
(
timeout:
Duration
(
seconds:
4
));
_scanResultsSubscription
=
_bluetoothManager
.
scanResults
.
listen
((
devices
)
{
_scanResults
.
add
(
devices
.
map
((
d
)
=>
PrinterBluetooth
(
d
)).
toList
());
});
// TODO move listener to constructor
_isScanningSubscription
=
_bluetoothManager
.
isScanning
.
listen
((
isScanningCurrent
)
async
{
// If isScanning value changed (scan just stopped)
if
(
_isScanning
&&
!
isScanningCurrent
)
{
_scanResultsSubscription
.
cancel
();
_isScanningSubscription
.
cancel
();
}
_isScanning
=
isScanningCurrent
;
});
}
void
stopScan
()
async
{
await
_bluetoothManager
.
stopScan
();
}
void
selectPrinter
(
PrinterBluetooth
printer
)
{
_selectedPrinter
=
printer
;
}
void
printLine
(
String
text
)
async
{
const
int
timeout
=
5
;
print
(
'============
${_manager._isScanning}
'
);
// if (_bluetoothManager.is) {
// showToast('Print failed (scanning in progress)');
// return;
// }
print
(
'============
$_isScanning
'
);
if
(
_selectedPrinter
==
null
)
{
throw
Exception
(
'Print failed (Select a printer first)'
);
}
if
(
_isScanning
)
{
throw
Exception
(
'Print failed (scanning in progress)'
);
}
if
(
_isPrinting
)
{
throw
Exception
(
'Print failed (another printing in progress)'
);
}
...
...
@@ -52,30 +164,30 @@ class PrinterBluetooth {
_isPrinting
=
true
;
// We have to rescan before connecting, otherwise we can connect only once
await
_
manager
.
_
bluetoothManager
.
startScan
(
timeout:
Duration
(
seconds:
1
));
await
_
manager
.
_
bluetoothManager
.
stopScan
();
await
_bluetoothManager
.
startScan
(
timeout:
Duration
(
seconds:
1
));
await
_bluetoothManager
.
stopScan
();
// Connect
await
_
manager
.
_bluetoothManager
.
connect
(
_device
);
await
_
bluetoothManager
.
connect
(
_selectedPrinter
.
_device
);
// Subscribe to the events
_
manager
.
_
bluetoothManager
.
state
.
listen
((
state
)
async
{
_bluetoothManager
.
state
.
listen
((
state
)
async
{
switch
(
state
)
{
case
BluetoothManager
.
CONNECTED
:
print
(
'********************* CONNECTED'
);
// to avoid double call
// if (!_connected) {
if
(
_device
.
connected
==
null
||
!
_device
.
connected
)
{
if
(
_selectedPrinter
.
_device
.
connected
==
null
||
!
_selectedPrinter
.
_device
.
connected
)
{
print
(
'@@@@SEND DATA......'
);
final
List
<
int
>
bytes
=
latin1
.
encode
(
'test!
\n\n\n
'
).
toList
();
await
_manager
.
_bluetoothManager
.
writeData
(
bytes
);
// showToast('Data sent'); TODO
// return 0;
await
_bluetoothManager
.
writeData
(
bytes
);
// TODO data sent
}
// TODO sending disconnect signal should be event-based
_runDelayed
(
3
).
then
((
dynamic
v
)
async
{
print
(
'@@@@DISCONNECTING......'
);
await
_
manager
.
_
bluetoothManager
.
disconnect
();
await
_bluetoothManager
.
disconnect
();
_isPrinting
=
false
;
});
// _connected = true;
...
...
@@ -89,6 +201,7 @@ class PrinterBluetooth {
}
// return 0;
});
// Printing timeout
_runDelayed
(
timeout
).
then
((
dynamic
v
)
async
{
if
(
_isPrinting
)
{
...
...
@@ -98,45 +211,3 @@ class PrinterBluetooth {
});
}
}
/// Bluetooth printer
/// // TODO rename to BluetoothScanner
class
PrinterBluetoothManager
{
final
BluetoothManager
_bluetoothManager
=
BluetoothManager
.
instance
;
// bool _connected = false;
bool
_isScanning
=
false
;
// bool _isPrinting = false;
StreamSubscription
_scanResultsSubscription
;
StreamSubscription
_isScanningSubscription
;
Stream
<
bool
>
get
isScanningStream
=>
_bluetoothManager
.
isScanning
;
BehaviorSubject
<
List
<
PrinterBluetooth
>>
_scanResults
=
BehaviorSubject
.
seeded
([]);
Stream
<
List
<
PrinterBluetooth
>>
get
scanResults
=>
_scanResults
.
stream
;
void
startScan
(
Duration
timeout
)
async
{
_scanResults
.
add
(<
PrinterBluetooth
>[]);
_bluetoothManager
.
startScan
(
timeout:
Duration
(
seconds:
4
));
_scanResultsSubscription
=
_bluetoothManager
.
scanResults
.
listen
((
devices
)
{
_scanResults
.
add
(
devices
.
map
((
d
)
=>
PrinterBluetooth
(
d
)).
toList
());
});
// TODO move listener to constructor
_isScanningSubscription
=
_bluetoothManager
.
isScanning
.
listen
((
isScanningCurrent
)
async
{
// If isScanning value changed (scan just stopped)
if
(
_isScanning
&&
!
isScanningCurrent
)
{
_scanResultsSubscription
.
cancel
();
_isScanningSubscription
.
cancel
();
}
_isScanning
=
isScanningCurrent
;
});
}
void
stopScan
()
async
{
await
_bluetoothManager
.
stopScan
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment