btlib 0.1.1 copy "btlib: ^0.1.1" to clipboard
btlib: ^0.1.1 copied to clipboard

A bluetooth driver plugin project, using a easy event-driven way. Support both platforms (iOS and Android).

example/lib/main.dart

import 'dart:async';
import 'dart:collection';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:btlib/btlib.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const String TAG = "iTAG";
  static const String ALARM_SERV = "1802";
  static const String ALARM_CHAR = "2A06";
  static const String BATTERY_SERV = "180F";
  static const String BATTERY_CHAR = "2A19";
  static const String KEY_SERV = "FFE0";
  static const String KEY_CHAR = "FFE1";

  Btlib driver = Btlib();
  StreamSubscription subscription;
  String address;
  bool scanning = false;
  bool connected = false;
  int counter = 0;
  int battery = 0;
  int rssi = 0;

  @override
  void initState() {
    super.initState();
    subscription = driver.listen(onEvent);
  }

  @override
  void dispose() {
    subscription.cancel();
    super.dispose();
  }

  void onEvent(Object e) {
    HashMap<String, Object> map = HashMap.from(e);
    print(map);
    var event = map["event"];
    if (event == BTEvent.BLE_START_SCAN) {
      scanning = true;
    } else if (event == BTEvent.BLE_STOP_SCAN) {
      scanning = false;
    } else if (event == BTEvent.BLE_CONNECTED) {
      connected = true;
      address = map["address"];
      driver.setCharacteristicNotification(address, KEY_SERV, KEY_CHAR, true);
      driver.readCharacteristic(address, BATTERY_SERV, BATTERY_CHAR);
      driver.getRSSI(address);
    } else if (event == BTEvent.BLE_DISCONNECTED) {
      connected = false;
      counter = 0;
      battery = 0;
      rssi = 0;
    } else if (event == BTEvent.BLE_SCAN_RESULT) {
      if (map["name"].toString().startsWith(TAG))
      {
        driver.stopScan();
        driver.connect(map["address"]);
      }
    } else if (event == BTEvent.BLE_DATA_AVAILABLE) {
      if (map["characteristic"].toString() == KEY_CHAR) {
        counter++;
      }
      if (map["characteristic"].toString() == BATTERY_CHAR) {
        Uint8List data = map["data"];
        battery = data[0];
      }
    } else if (event == BTEvent.BLE_SERVICES_CHARACTERISTICS) {
    } else if (event == BTEvent.BLE_RSSI) {
      rssi = int.parse(map["rssi"]);
    }

    setState(() {});
  }

  _buildActionButtons() {
    return <Widget>[
      new IconButton(
        icon: const Icon(Icons.cancel),
        onPressed: () => driver.disconnect(address),
      )
    ];
  }

  _buildFloatingActionButton() {
    return new FloatingActionButton(
      child: new Icon(scanning ? Icons.stop : Icons.search),
      onPressed: () {
        scanning ? driver.stopScan() : driver.startScan();
      },
      backgroundColor: scanning ? Colors.red : Colors.blue,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: connected ? _buildActionButtons() : null,
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              scanning ? 'Scanning...' : connected ? '$address Connected' : 'Tap to scan',
            ),
            RaisedButton(
              onPressed: () => driver.writeCharacteristic(
                  address, ALARM_SERV, ALARM_CHAR, Uint8List.fromList([2])),
              child: Text("Alarm ON."),
            ),
            RaisedButton(
              onPressed: () => driver.writeCharacteristic(
                  address, ALARM_SERV, ALARM_CHAR, Uint8List.fromList([0])),
              child: Text("Alarm OFF"),
            ),
            Text(
              'Pushed:$counter\nBattery:$battery\nRSSI:$rssi',
              textAlign: TextAlign.left,
            ),
          ],
        ),
      ),
      floatingActionButton: _buildFloatingActionButton(),
    );
  }
}
1
likes
40
pub points
0%
popularity

Publisher

unverified uploader

A bluetooth driver plugin project, using a easy event-driven way. Support both platforms (iOS and Android).

Homepage

License

BSD-3-Clause (LICENSE)

Dependencies

flutter

More

Packages that depend on btlib