core_bluetooth 1.0.1 copy "core_bluetooth: ^1.0.1" to clipboard
core_bluetooth: ^1.0.1 copied to clipboard

CoreBluetooth wrapper for Dart on iOS and macOS.

example/lib/main.dart

import 'dart:async';

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

import 'screens/bluetooth_off_screen.dart';
import 'screens/scan_screen.dart';
import 'central_manager_controller.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  CentralManagerController.instance;
  runApp(const CoreBluetoothApp());
}

class CoreBluetoothApp extends StatefulWidget {
  const CoreBluetoothApp({super.key});

  @override
  State<CoreBluetoothApp> createState() => _CoreBluetoothAppState();
}

class _CoreBluetoothAppState extends State<CoreBluetoothApp> {
  CBManagerState _adapterState = CBManagerState.unknown;

  late StreamSubscription<CBManagerState> _adapterStateSubscription;

  @override
  void initState() {
    super.initState();
    _adapterStateSubscription = CentralManagerController.instance.adapterState.stream.listen((state) {
      _adapterState = state;
      if (mounted) {
        setState(() {});
      }
    });
  }

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

  @override
  Widget build(BuildContext context) {
    final screen = _adapterState == CBManagerState.poweredOn
        ? const ScanScreen()
        : BluetoothOffScreen(adapterState: _adapterState);

    return MaterialApp(
      color: Colors.lightBlue,
      debugShowCheckedModeBanner: false,
      home: screen,
      navigatorObservers: [BluetoothAdapterStateObserver()],
    );
  }
}

class BluetoothAdapterStateObserver extends NavigatorObserver {
  StreamSubscription<CBManagerState>? _adapterStateSubscription;

  @override
  void didPush(Route route, Route<dynamic>? previousRoute) {
    super.didPush(route, previousRoute);
    if (route.settings.name == '/DeviceScreen') {
      _adapterStateSubscription ??= CentralManagerController.instance.adapterState.stream.listen((state) {
        if (state != CBManagerState.poweredOn) {
          navigator?.pop();
        }
      });
    }
  }

  @override
  void didPop(Route route, Route<dynamic>? previousRoute) {
    super.didPop(route, previousRoute);
    _adapterStateSubscription?.cancel();
    _adapterStateSubscription = null;
  }
}
1
likes
0
points
11
downloads

Publisher

verified publisherjamcorder.com

Weekly Downloads

CoreBluetooth wrapper for Dart on iOS and macOS.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on core_bluetooth

Packages that implement core_bluetooth