Skip to content

Commit

Permalink
add animation control
Browse files Browse the repository at this point in the history
  • Loading branch information
iamKyun committed Dec 7, 2021
1 parent 40b4254 commit a1ca965
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 13 deletions.
29 changes: 20 additions & 9 deletions lib/app_content.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import 'package:convert/convert.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue/flutter_blue.dart';
import 'package:nineboot/tools/rive_controller.dart';

import 'bluetooth_devices_dialog.dart';
import 'generated/l10n.dart';
import 'tools/toast_message.dart';
import 'tools/local_storage.dart';
import 'tools/toast_message.dart';

class AppContent extends StatefulWidget {
const AppContent({Key? key}) : super(key: key);
Expand All @@ -35,6 +36,8 @@ class _AppContentState extends State<AppContent> {
bool _isSending = false;
final FlutterBlue _flutterBlue = FlutterBlue.instance;

StreamSubscription<List<ScanResult>>? _scanSubscription;

@override
Widget build(BuildContext context) {
return Container(
Expand Down Expand Up @@ -159,31 +162,38 @@ class _AppContentState extends State<AppContent> {
if (_device == null &&
_selectedDeviceId.text == TextEditingValue.empty.text) {
ToastMessage.error(S.of(context).searchDeviceTip);
return;
}

_updateSendingState(true);

if (_device == null) {
ToastMessage.info(S.of(context).tryToSearch);
log("start scan");
// search device by guid
await _flutterBlue.startScan(withDevices: [
Guid.fromMac(_selectedDeviceId.text)
]).timeout(const Duration(seconds: 10), onTimeout: () {
ToastMessage.error(S.of(context).deviceNotFound);
_flutterBlue.stopScan();
});

_flutterBlue.scanResults.listen((List<ScanResult> results) {
_scanSubscription =
_flutterBlue.scanResults.listen((List<ScanResult> results) {
if (results.toList().isNotEmpty) {
_flutterBlue.stopScan();
setState(() {
_device = results.toList()[0].device;
});
}
});

// search device by guid
await _flutterBlue.startScan(
withDevices: [Guid.fromMac(_selectedDeviceId.text)],
timeout: const Duration(seconds: 10));

log("stop scan");
_flutterBlue.stopScan();
_scanSubscription?.cancel();
_scanSubscription = null;
if (_device == null) {
_updateSendingState(false);
ToastMessage.error(S.of(context).deviceNotFound);
_flutterBlue.stopScan();
return;
}
}
Expand Down Expand Up @@ -223,6 +233,7 @@ class _AppContentState extends State<AppContent> {
}

void _updateSendingState(state) {
RiveController.pressed(state);
setState(() {
_isSending = state;
});
Expand Down
3 changes: 2 additions & 1 deletion lib/app_logo.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:nineboot/tools/rive_controller.dart';
import 'package:rive/rive.dart';

const assetsImagePath = "assets/images/logo.png";
Expand Down Expand Up @@ -58,6 +59,6 @@ class _AppLogoState extends State<AppLogo> {
final controller = StateMachineController.fromArtboard(artboard, 'press');
artboard.addController(controller!);
SMIBool _pressed = controller.findInput<bool>('pressed') as SMIBool;
_pressed.value = true;
RiveController.init(_pressed);
}
}
6 changes: 3 additions & 3 deletions lib/bluetooth_devices_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue/flutter_blue.dart';
import 'tools/local_storage.dart';
import 'tools/toast_message.dart';

import 'generated/l10n.dart';
import 'tools/local_storage.dart';
import 'tools/toast_message.dart';

class BluetoothDevicesDialog extends StatefulWidget {
const BluetoothDevicesDialog({Key? key}) : super(key: key);
Expand Down Expand Up @@ -49,7 +49,7 @@ class _BluetoothListState extends State<BluetoothDevicesDialog> {
_isScanning?.listen((event) {
if (event != _isLoading && mounted) {
setState(() {
log(event.toString());
log("_isScanning : " + event.toString());
_isLoading = event;
});
}
Expand Down
13 changes: 13 additions & 0 deletions lib/tools/rive_controller.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:rive/src/controllers/state_machine_controller.dart';

class RiveController {
static SMIBool? _pressed;

static void init(SMIBool pressed) {
_pressed = pressed;
}

static void pressed(bool bool) {
_pressed!.value = bool;
}
}

0 comments on commit a1ca965

Please sign in to comment.