You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.3 KiB
Dart
172 lines
6.3 KiB
Dart
// import 'dart:async';
|
|
// import 'dart:io';
|
|
// import 'package:flutter/material.dart';
|
|
//
|
|
// class DraggableCam extends StatefulWidget {
|
|
// //final Size availableScreenSize;
|
|
// final Widget child;
|
|
// final double scaleFactor;
|
|
// // final Stream<bool> onButtonBarVisible;
|
|
// // final Stream<double> onButtonBarHeight;
|
|
//
|
|
// const DraggableCam({
|
|
// Key? key,
|
|
// //@required this.availableScreenSize,
|
|
// required this.child,
|
|
// // @required this.onButtonBarVisible,
|
|
// // @required this.onButtonBarHeight,
|
|
//
|
|
// /// The portion of the screen the DraggableWidget should use.
|
|
// this.scaleFactor = .25,
|
|
// }) : assert(scaleFactor != null && scaleFactor > 0 && scaleFactor <= .4),
|
|
// // assert(availableScreenSize != null),
|
|
// // assert(onButtonBarVisible != null),
|
|
// // assert(onButtonBarHeight != null),
|
|
// super(key: key);
|
|
//
|
|
// @override
|
|
// _DraggablePublisherState createState() => _DraggablePublisherState();
|
|
// }
|
|
//
|
|
// class _DraggablePublisherState extends State<DraggableCam> {
|
|
// bool _isButtonBarVisible = true;
|
|
// double _buttonBarHeight = 0;
|
|
// late double _width;
|
|
// late double _height;
|
|
// late double _top;
|
|
// late double _left;
|
|
// late double _viewPaddingTop;
|
|
// late double _viewPaddingBottom;
|
|
// final double _padding = 8.0;
|
|
// final Duration _duration300ms = const Duration(milliseconds: 300);
|
|
// final Duration _duration0ms = const Duration(milliseconds: 0);
|
|
// late Duration _duration;
|
|
// late StreamSubscription _streamSubscription;
|
|
// late StreamSubscription _streamHeightSubscription;
|
|
//
|
|
// @override
|
|
// void initState() {
|
|
// super.initState();
|
|
// _duration = _duration300ms;
|
|
// _width = widget.availableScreenSize.width * widget.scaleFactor;
|
|
// _height = _width * (widget.availableScreenSize.height / widget.availableScreenSize.width);
|
|
// _top = widget.availableScreenSize.height - (_buttonBarHeight + _padding) - _height;
|
|
// _left = widget.availableScreenSize.width - _padding - _width;
|
|
//
|
|
// _streamSubscription = widget.onButtonBarVisible.listen(_buttonBarVisible);
|
|
// _streamHeightSubscription = widget.onButtonBarHeight.listen(_getButtonBarHeight);
|
|
// }
|
|
//
|
|
// @override
|
|
// void didChangeDependencies() {
|
|
// var mediaQuery = MediaQuery.of(context);
|
|
// _viewPaddingTop = mediaQuery.viewPadding.top;
|
|
// _viewPaddingBottom = mediaQuery.viewPadding.bottom;
|
|
// super.didChangeDependencies();
|
|
// }
|
|
//
|
|
// @override
|
|
// void dispose() {
|
|
// _streamSubscription.cancel();
|
|
// _streamHeightSubscription.cancel();
|
|
// super.dispose();
|
|
// }
|
|
//
|
|
// void _getButtonBarHeight(double height) {
|
|
// setState(() {
|
|
// _buttonBarHeight = height;
|
|
// _positionWidget();
|
|
// });
|
|
// }
|
|
//
|
|
// void _buttonBarVisible(bool visible) {
|
|
// if (!mounted) {
|
|
// return;
|
|
// }
|
|
// setState(() {
|
|
// _isButtonBarVisible = visible;
|
|
// if (_duration == _duration300ms) {
|
|
// // only position the widget when we are not currently dragging it around
|
|
// _positionWidget();
|
|
// }
|
|
// });
|
|
// }
|
|
//
|
|
// @override
|
|
// Widget build(BuildContext context) {
|
|
// return AnimatedPositioned(
|
|
// top: _top,
|
|
// left: _left,
|
|
// width: _width,
|
|
// height: _height,
|
|
// duration: _duration,
|
|
// child: Listener(
|
|
// onPointerDown: (_) => _duration = _duration0ms,
|
|
// onPointerMove: (PointerMoveEvent event) {
|
|
// setState(() {
|
|
// _left = (_left + event.delta.dx).roundToDouble();
|
|
// _top = (_top + event.delta.dy).roundToDouble();
|
|
// });
|
|
// },
|
|
// onPointerUp: (_) => _positionWidget(),
|
|
// onPointerCancel: (_) => _positionWidget(),
|
|
// child: ClippedVideo(
|
|
// height: _height,
|
|
// width: _width,
|
|
// child: widget.child,
|
|
// ),
|
|
// ),
|
|
// );
|
|
// }
|
|
//
|
|
// double _getCurrentStatusBarHeight() {
|
|
// if (_isButtonBarVisible) {
|
|
// return _viewPaddingTop;
|
|
// }
|
|
// final _defaultViewPaddingTop = Platform.isIOS ? 20.0 : Platform.isAndroid ? 24.0 : 0.0;
|
|
// if (_viewPaddingTop > _defaultViewPaddingTop) {
|
|
// // There must be a hardware notch in the display.
|
|
// return _viewPaddingTop;
|
|
// }
|
|
// return 0.0;
|
|
// }
|
|
//
|
|
// double _getCurrentButtonBarHeight() {
|
|
// if (_isButtonBarVisible) {
|
|
// return _buttonBarHeight + _viewPaddingBottom;
|
|
// }
|
|
// return _viewPaddingBottom;
|
|
// }
|
|
//
|
|
// void _positionWidget() {
|
|
// // Determine the center of the object being dragged so we can decide
|
|
// // in which corner the object should be placed.
|
|
// var dx = (_width / 2) + _left;
|
|
// dx = dx < 0 ? 0 : dx >= widget.availableScreenSize.width ? widget.availableScreenSize.width - 1 : dx;
|
|
// var dy = (_height / 2) + _top;
|
|
// dy = dy < 0 ? 0 : dy >= widget.availableScreenSize.height ? widget.availableScreenSize.height - 1 : dy;
|
|
// final draggableCenter = Offset(dx, dy);
|
|
//
|
|
// setState(() {
|
|
// _duration = _duration300ms;
|
|
// if (Rect.fromLTRB(0, 0, widget.availableScreenSize.width / 2, widget.availableScreenSize.height / 2).contains(draggableCenter)) {
|
|
// // Top-left
|
|
// _top = _getCurrentStatusBarHeight() + _padding;
|
|
// _left = _padding;
|
|
// } else if (Rect.fromLTRB(widget.availableScreenSize.width / 2, 0, widget.availableScreenSize.width, widget.availableScreenSize.height / 2).contains(draggableCenter)) {
|
|
// // Top-right
|
|
// _top = _getCurrentStatusBarHeight() + _padding;
|
|
// _left = widget.availableScreenSize.width - _padding - _width;
|
|
// } else if (Rect.fromLTRB(0, widget.availableScreenSize.height / 2, widget.availableScreenSize.width / 2, widget.availableScreenSize.height).contains(draggableCenter)) {
|
|
// // Bottom-left
|
|
// _top = widget.availableScreenSize.height - (_getCurrentButtonBarHeight() + _padding) - _height;
|
|
// _left = _padding;
|
|
// } else if (Rect.fromLTRB(widget.availableScreenSize.width / 2, widget.availableScreenSize.height / 2, widget.availableScreenSize.width, widget.availableScreenSize.height).contains(draggableCenter)) {
|
|
// // Bottom-right
|
|
// _top = widget.availableScreenSize.height - (_getCurrentButtonBarHeight() + _padding) - _height;
|
|
// _left = widget.availableScreenSize.width - _padding - _width;
|
|
// }
|
|
// });
|
|
// }
|
|
// }
|