aidlab_sdk 0.0.3 copy "aidlab_sdk: ^0.0.3" to clipboard
aidlab_sdk: ^0.0.3 copied to clipboard

outdated

Aidlab sdk for Flutter

example/lib/main.dart

import 'package:aidlab_sdk/aidlab_sdk.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';

import 'line_chart.dart';
import 'dart:io' show Platform;

void startService() {
  MethodChannel("com.aidlab.flutter_sdk_example/service")
      .invokeMethod("startService");
}

void stopService() {
  MethodChannel("com.aidlab.flutter_sdk_example/service")
      .invokeMethod("stopService");
}


void main() {
  runApp(MaterialApp(
    home: MyApp()
  ));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> implements AidlabSdkDelegate, AidlabDelegate, AidlabSynchronizationDelegate {
  String _aidlabState = "Disconnected";
  String _aidlabInfo = "";
  String _aidlabWearState = "";
  String _heartRate = "";
  String _batteryLevel = "";
  String _skinTemperature = "";
  String _unsynchronizedSize = "";
  String _syncState = "";
  List<double> _ecg = [];
  List<String> _aidlabs = List<String>();

  Aidlab currentAidlab;

  @override
  void initState() {
    super.initState();
    AidlabSdk.instance.aidlabSdkDelegate = this;
  }

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

  void _setAidlabState(String state) {
    setState(() {
      _aidlabState = state;
    });
  }

  Future<void> scanForAidlab() async {
    if (Platform.isAndroid) {
      _scanForAidlabAndroid();
    } else {
      _scanForAidlabiOS();
    }
  }

  void _scanForAidlabAndroid() async {
    if (await Permission.location.request().isGranted) {
      _setAidlabState("Scanning");
      AidlabSdk.instance.scanForDevices();
    } else {
      _setAidlabState("Bluetooth not granted");
    }
  }

  void _scanForAidlabiOS() {
    _setAidlabState("Scanning");
    AidlabSdk.instance.scanForDevices();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Padding(
          padding: EdgeInsets.all(10),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              TextButton(
                onPressed: startService,
                child: Text("Start service")
              ),
              TextButton(
                  onPressed: stopService,
                  child: Text("Stop service")
              ),
              Column(
                children: createAidlabs(),
              ),
              Text("Aidlab state: $_aidlabState"),
              Text("Aidlab info - $_aidlabInfo"),
              Text("Sync state: $_syncState"),
              Text("Unsynchronized size: $_unsynchronizedSize"),
              Text("Wear state: $_aidlabWearState"),
              Text("Heart rate: $_heartRate"),
              Text("Battery level: $_batteryLevel"),
              Text("Skin temperature: $_skinTemperature"),
              TextButton(
                  onPressed: () {
                    scanForAidlab();
                  },
                  child: Text('Start scan')),
              Expanded(
                child: LineChart(_ecg),
              ),
            ],
          ),
        )
    );
  }

  List<Widget> createAidlabs() {
    return _aidlabs
        .map((aidlab) => TextButton(
              style: TextButton.styleFrom(
                  padding: EdgeInsets.all(0),
                  tapTargetSize: MaterialTapTargetSize.shrinkWrap),
              onPressed: () => _onAidlabPressed(aidlab),
              child: Text(aidlab),
            ))
        .toList();
  }

  void _onAidlabPressed(String aidlab) {
    AidlabSdk.instance.stopDeviceScan();
    setState(() {
      _aidlabs.clear();
    });

    currentAidlab?.disconnect();
    currentAidlab = null;
    final signals = [
      Signal.Ecg,
      Signal.Respiration,
      Signal.Temperature,
      Signal.Motion,
      Signal.Battery,
      Signal.Activity,
      Signal.Orientation,
      Signal.Steps,
      Signal.HeartRate,
      Signal.CMD,
    ];
    AidlabSdk.instance.connect(aidlab, signals, this);
  }

  // --------- Aidlab SDK delegate -------------

  @override
  void onAidlabDetected(String address, int rssi) {
    setState(() {
      if(!_aidlabs.contains(address)) {
        _aidlabs.add(address);
      }
    });
  }

  @override
  void onBluetoothStarted() { }

  @override
  void onDeviceScanStarted() { }

  @override
  void onDeviceScanStopped() { }

  @override
  void onScanFailed(int errorCode) { }

  // --------- Aidlab delegate -------------

  final commands = [
    "sync enable ecg", "sync enable respiration",
    "sync enable activity", "sync enable steps",
    "sync enable heartRate", "sync enable temperature"
  ];

  void _sendCommands(Aidlab aidlab) {
    if(commands.isNotEmpty) {
      aidlab.send(commands.first);
      commands.removeAt(0);
    }
    else {
      aidlab.startSynchronization();
    }
  }

  @override
  void didConnectAidlab(Aidlab aidlab) {
    currentAidlab = aidlab;
    aidlab.aidlabSynchronizationDelegate = this;
    setState(() {
      _aidlabState = "Connected";
      _aidlabInfo = "serial number: ${aidlab.serialNumber}\n"
          "hardware: ${aidlab.hardwareRevision}\n"
          "firmware: ${aidlab.firmwareRevision}";
    });
    _sendCommands(aidlab);
  }

  @override
  void didDetectExercise(Aidlab aidlab, Exercise exercise) {
  }

  @override
  void didDisconnectAidlab(Aidlab aidlab) {
    setState(() {
      _aidlabState = "Disconnected";
      _aidlabInfo = "-";
    });
  }

  @override
  void didReceiveAccelerometer(Aidlab aidlab, int timestamp, double ax, double ay, double az) { }

  @override
  void didReceiveActivity(Aidlab aidlab, int timestamp, ActivityType activity) { }

  @override
  void didReceiveBatteryLevel(Aidlab aidlab, int stateOfCharge) {
    setState(() {
      _batteryLevel = "$stateOfCharge";
    });
  }

  @override
  void didReceiveCommand(Aidlab aidlab) {
    _sendCommands(aidlab);
  }

  @override
  void didReceiveECG(Aidlab aidlab, int timestamp, List<double> values) {
    setState(() {
      _ecg.add(values[0]);
      while(_ecg.length > 100) {
        _ecg.removeAt(0);
      }
    });
  }

  @override
  void didReceiveError(String error) { }

  @override
  void didReceiveGyroscope(Aidlab aidlab, int timestamp, double qx, double qy, double qz) { }

  @override
  void didReceiveHeartRate(Aidlab aidlab, int timestamp, List<int> hrv, int heartRate) {
    setState(() {
      _heartRate = "$heartRate";
    });
  }

  @override
  void didReceiveMagnetometer(Aidlab aidlab, int timestamp, double mx, double my, double mz) { }

  @override
  void didReceiveMessage(Aidlab aidlab, String process, String message) { }

  @override
  void didReceiveOrientation(Aidlab aidlab, int timestamp,
      double roll, double pitch, double yaw, BodyPosition bodyPosition) { }

  @override
  void didReceiveQuaternion(Aidlab aidlab, int timestamp, double qw, double qx, double qy, double qz) { }

  @override
  void didReceiveRespiration(Aidlab aidlab, int timestamp, List<double> values) {}

  @override
  void didReceiveRespirationRate(Aidlab aidlab, int timestamp, int value) { }

  @override
  void didReceiveSkinTemperature(Aidlab aidlab, int timestamp, double value) {
    setState(() {
      _skinTemperature = "${value.toInt()}";
    });
  }

  @override
  void didReceiveSoundVolume(Aidlab aidlab, int timestamp, int value) { }

  @override
  void didReceiveSteps(Aidlab aidlab, int timestamp, int steps) { }

  @override
  void wearStateDidChange(Aidlab aidlab, WearState wearState) {
    setState(() {
      _aidlabWearState = "${wearState.toString()}";
    });
  }


  // --------- Aidlab synchronization delegate -------------

  @override
  void didReceivePastActivity(Aidlab aidlab, int timestamp, ActivityType activity) { }

  @override
  void didReceivePastECG(Aidlab aidlab, int timestamp, List<double> values) { }

  @override
  void didReceivePastHeartRate(Aidlab aidlab, int timestamp, List<int> hrv, int heartRate) { }

  @override
  void didReceivePastRespiration(Aidlab aidlab, int timestamp, List<double> values) { }

  @override
  void didReceivePastRespirationRate(Aidlab aidlab, int timestamp, int value) { }

  @override
  void didReceivePastSkinTemperature(Aidlab aidlab, int timestamp, double value) { }

  @override
  void didReceivePastSteps(Aidlab aidlab, int timestamp, int value) { }

  @override
  void didReceiveUnsynchronizedSize(Aidlab aidlab, int unsynchronizedSize) {
    setState(() {
      _unsynchronizedSize = "$unsynchronizedSize";
    });
  }

  @override
  void syncStateDidChange(Aidlab aidlab, SyncState state) {
    setState(() {
      _syncState = "${state.toString()}";
    });
  }
}
4
likes
0
pub points
22%
popularity

Publisher

unverified uploader

Aidlab sdk for Flutter

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on aidlab_sdk