laikangning_sdk 1.0.0 copy "laikangning_sdk: ^1.0.0" to clipboard
laikangning_sdk: ^1.0.0 copied to clipboard

莱康宁sdk对接

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:laikangning_sdk/laikangning_sdk.dart';
import 'package:laikangning_sdk_example/src/ble/ble_device_connector.dart';
import 'package:laikangning_sdk_example/src/ble/ble_device_interactor.dart';
import 'package:laikangning_sdk_example/src/ble/ble_scanner.dart';
import 'package:laikangning_sdk_example/src/ble/ble_status_monitor.dart';
import 'package:laikangning_sdk_example/src/ui/ble_status_screen.dart';
import 'package:laikangning_sdk_example/src/ui/device_list.dart';
import 'package:provider/provider.dart';

import 'src/ble/ble_logger.dart';

const _themeColor = Colors.lightGreen;

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  final _bleLogger = BleLogger();
  final _ble = FlutterReactiveBle();
  final _scanner = BleScanner(ble: _ble, logMessage: _bleLogger.addToLog);
  final _monitor = BleStatusMonitor(_ble);
  final _connector = BleDeviceConnector(
    ble: _ble,
    logMessage: _bleLogger.addToLog,
  );

  var laikangningSdk = LaikangningSdk();
  laikangningSdk.initialize();
  laikangningSdk.startWork();

  laikangningSdk.getFhrData().listen((event) {
    event.data.afm;
    _bleLogger.addToLog('type: ${event.type.name} - '
        'afm: ${event.data.afm} - '
        'toco: ${event.data.toco} - '
        'tocoFlag: ${event.data.tocoFlag}'
        'fhr1: ${event.data.fhr1} - '
        'fhr2: ${event.data.fhr2}'
        'devicePower: ${event.data.devicePower}'
        'afmFlag: ${event.data.afmFlag}'
        'docFlag: ${event.data.docFlag}'
        'fmFlag: ${event.data.fmFlag}');
  });

  final _serviceDiscoverer = BleDeviceInteractor(
    laikangningSdk: laikangningSdk,
    bleDiscoverServices: _ble.discoverServices,
    readCharacteristic: _ble.readCharacteristic,
    writeWithResponse: _ble.writeCharacteristicWithResponse,
    writeWithOutResponse: _ble.writeCharacteristicWithoutResponse,
    subscribeToCharacteristic: _ble.subscribeToCharacteristic,
    logMessage: _bleLogger.addToLog,
  );
  runApp(
    MultiProvider(
      providers: [
        Provider.value(value: _scanner),
        Provider.value(value: _monitor),
        Provider.value(value: _connector),
        Provider.value(value: _serviceDiscoverer),
        Provider.value(value: _bleLogger),
        StreamProvider<BleScannerState?>(
          create: (_) => _scanner.state,
          initialData: const BleScannerState(
            discoveredDevices: [],
            scanIsInProgress: false,
          ),
        ),
        StreamProvider<BleStatus?>(
          create: (_) => _monitor.state,
          initialData: BleStatus.unknown,
        ),
        StreamProvider<ConnectionStateUpdate>(
          create: (_) => _connector.state,
          initialData: const ConnectionStateUpdate(
            deviceId: 'Unknown device',
            connectionState: DeviceConnectionState.disconnected,
            failure: null,
          ),
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Reactive BLE example',
        color: _themeColor,
        theme: ThemeData(primarySwatch: _themeColor),
        home: const HomeScreen(),
      ),
    ),
  );
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) => Consumer<BleStatus?>(
        builder: (_, status, __) {
          if (status == BleStatus.ready) {
            return const DeviceListScreen();
          } else {
            return BleStatusScreen(status: status ?? BleStatus.unknown);
          }
        },
      );
}