pivo 0.1.0+4 copy "pivo: ^0.1.0+4" to clipboard
pivo: ^0.1.0+4 copied to clipboard

outdated

A wrapper for the Pivo Pro SDK.

example/lib/main.dart

// Copyright (c) 2022, Sports Visio, Inc
// https://sportsvisio.com
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.

import 'dart:developer';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:pivo/pivo.dart';
import 'package:pivo_example/pivo_control_page.dart';
import 'package:pivo_example/pop_ups.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
      String? licenseKey;
      if (Platform.isAndroid) {
        licenseKey =
            '{"owner":"Pivo","platform":"android","plan":"pro","appIdentifier":"app.pivo.android.prosdkdemo","createdAt":1587528360,"expiredAt":2524575600,"signature":"KqyuZmlt5rOQynORymSI+o2hMRwPdWUcU/LPBqZAQQUJybEBaL7+LlWdReAcfnNyafStKjw607s2Jf79T3Nbhq/jpvTD/upGga2BqJYTOiOsUGpZe/vjDgR3iMad0IOdmEf/68hdvo70w0AObZ9xufO5rjMTXc/sXY43kQ40/KS9UQfICUzLi1zgnJNF+C08n5fKuY7vzEOFB8P6Id0UTRFrPVDTkzTpze7aUtkF0pvJ/F+8FnRMP2r004sGVsGREJYnvAAPnV76yPzy4jsBAc4qVxTY508FwL/AwtNN5n1gJAdpS9D+0HkK1bvaxwWCBZ0Kk67uqFjXSaiOBrN5vQ=="}';
      } else {
        licenseKey =
            '{"owner":"Pivo","platform":"ios","plan":"pro","appIdentifier":"app.pivo.ios.prosdkdemo","createdAt":1589928528,"expiredAt":2537535600,"signature":"QCnY1ShAHgBRnxfkeLNesDhogCj8PtFavbeqIK/hpq0+2U1vVByvJHzYYqyD9MsqWkuhorYETmB3bGLfhQzuf1C/IYVTg6STXBu5xJJxGbchGT/YcEmnyhHMXg6kkXUUNHYQGu45iuk11olX6aaxNhVY+UatMW9V4hcBjalNoVnbQiID/Mk4jVYFw/e+lB/JX0/ALhQJb1GwsATrEbnwY4F6YNLfPyQ7AAiuf9VDa0tmf0XpV6EiRNYcuqHWta9n8Wft78iG4bxKCV7zF7VmbVI9a1wlOOXrv6bGFl85NVjtSecnai+difBqNz0QXFfD6uXoJqU9orAtc9hrI4caGg=="}';
      }

      await PivoPlatform.instance.unlockWithLicenseKey(licenseKey);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Pivo Example')),
      body: StreamBuilder(
        stream: Platform.isIOS
            ? PivoPlatform.instance.scanResultsPivo
            : PivoPlatform.instance.scanResults,
        builder: (context, snapshot) {
          if (!snapshot.hasData && snapshot.data == null) {
            return const SizedBox.shrink();
          }

          if (Platform.isIOS) {
            final pivoScanResult = snapshot.data as PivoDevice?;
            if (pivoScanResult != null) {
              return Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  PivoDeviceTile(
                    scanResult: pivoScanResult,
                  ),
                ],
              );
            }
          }

          if (Platform.isAndroid) {
            final pivoScanList = snapshot.data as List<PivoDevice>?;
            return Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Expanded(
                  child: ListView.builder(
                    itemCount: pivoScanList!.length,
                    itemBuilder: (context, index) {
                      final result = pivoScanList[index];
                      return PivoDeviceTile(scanResult: result);
                    },
                  ),
                ),
              ],
            );
          }

          return const Text('Unsupported platform');
        },
      ),
      floatingActionButton: StreamBuilder<bool>(
        stream: PivoPlatform.instance.isScanningStream,
        builder: (context, snapshot) {
          if (snapshot.data ?? false) {
            log('currently scanning');
            return FloatingActionButton(
              onPressed: PivoPlatform.instance.stopScan,
              backgroundColor: Colors.red,
              child: const Icon(Icons.stop),
            );
          }

          return FloatingActionButton(
            onPressed: PivoPlatform.instance.startScan,
            child: const Icon(Icons.search),
          );
        },
      ),
    );
  }
}

class PivoDeviceTile extends StatefulWidget {
  const PivoDeviceTile({
    required this.scanResult,
    super.key,
  });

  final PivoDevice scanResult;

  @override
  State<PivoDeviceTile> createState() => _PivoDeviceTileState();
}

class _PivoDeviceTileState extends State<PivoDeviceTile> {
  String get name => widget.scanResult.name;
  String get address => widget.scanResult.address;

  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(name),
      subtitle: Text(address),
      trailing: IconButton(
        icon: const Icon(Icons.bluetooth),
        onPressed: () async {
          final result = await LoadingPopUp<PivoConnectionStatusEvent>(
            () => PivoPlatform.instance.connect(widget.scanResult),
            'Connecting to $name.\nMac Address $address...',
          ).show(context);

          if (!mounted) return;

          if (result is! PivoConnectionStatusCompleteEvent) {
            await const FailureToConnectPopUp().show(context);
            return;
          }

          await Navigator.of(context).push(
            MaterialPageRoute<void>(
              builder: (context) => PivoControlPage(result),
            ),
          );
        },
      ),
    );
  }
}
8
likes
0
points
1
downloads

Publisher

verified publisheraquiles.dev

Weekly Downloads

A wrapper for the Pivo Pro SDK.

Repository

License

unknown (license)

Dependencies

flutter, pivo_android, pivo_ios, pivo_platform_interface

More

Packages that depend on pivo