MultiTapGestureRecognizer draft
This commit is contained in:
parent
49760b4ad5
commit
25b2f52462
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
@ -102,7 +103,7 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() => _showBar = !_showBar);
|
setState(() => _showBar = !_showBar);
|
||||||
}),
|
}),
|
||||||
bottomNavigationBar: _showBar && _bottom < 100
|
bottomNavigationBar: _showBar
|
||||||
? BottomAppBar(
|
? BottomAppBar(
|
||||||
elevation: 10,
|
elevation: 10,
|
||||||
color: MyTheme.accent,
|
color: MyTheme.accent,
|
||||||
@ -122,6 +123,8 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
icon: Icon(Icons.keyboard),
|
icon: Icon(Icons.keyboard),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
SystemChrome.setEnabledSystemUIOverlays(
|
||||||
|
SystemUiOverlay.values);
|
||||||
SystemChannels.textInput
|
SystemChannels.textInput
|
||||||
.invokeMethod('TextInput.show');
|
.invokeMethod('TextInput.show');
|
||||||
_focusNode.requestFocus();
|
_focusNode.requestFocus();
|
||||||
@ -165,33 +168,48 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
body: FlutterEasyLoading(
|
body: FlutterEasyLoading(
|
||||||
child: Container(
|
child: Container(
|
||||||
color: MyTheme.canvasColor,
|
color: MyTheme.canvasColor,
|
||||||
child: GestureDetector(
|
child: RawGestureDetector(
|
||||||
onTap: () {
|
gestures: {
|
||||||
if (_pan) return;
|
MultiTouchGestureRecognizer:
|
||||||
},
|
GestureRecognizerFactoryWithHandlers<
|
||||||
onDoubleTap: () {
|
MultiTouchGestureRecognizer>(
|
||||||
if (_pan) return;
|
() => MultiTouchGestureRecognizer(),
|
||||||
},
|
(MultiTouchGestureRecognizer instance) {
|
||||||
onLongPress: () {
|
instance.onMultiTap = (
|
||||||
if (_pan) return;
|
touchCount,
|
||||||
},
|
addOrRemove,
|
||||||
child: InteractiveViewer(
|
) =>
|
||||||
constrained: false,
|
print('$touchCount, $addOrRemove');
|
||||||
panEnabled: _pan,
|
},
|
||||||
onInteractionUpdate: (details) {
|
),
|
||||||
// print('$details');
|
},
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
if (_pan) return;
|
||||||
},
|
},
|
||||||
onInteractionStart: (s) {
|
onDoubleTap: () {
|
||||||
print('$s');
|
if (_pan) return;
|
||||||
},
|
},
|
||||||
onInteractionEnd: (x) {
|
onLongPress: () {
|
||||||
print('$x');
|
if (_pan) return;
|
||||||
},
|
},
|
||||||
child: Stack(children: [
|
child: InteractiveViewer(
|
||||||
ImagePaint(),
|
constrained: false,
|
||||||
CursorPaint(),
|
panEnabled: _pan,
|
||||||
])),
|
onInteractionUpdate: (details) {
|
||||||
),
|
// print('$details');
|
||||||
|
},
|
||||||
|
onInteractionStart: (s) {
|
||||||
|
print('$s');
|
||||||
|
},
|
||||||
|
onInteractionEnd: (x) {
|
||||||
|
print('$x');
|
||||||
|
},
|
||||||
|
child: Stack(children: [
|
||||||
|
ImagePaint(),
|
||||||
|
CursorPaint(),
|
||||||
|
])),
|
||||||
|
)),
|
||||||
)))));
|
)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,3 +429,34 @@ void showActions(BuildContext context) {
|
|||||||
true,
|
true,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MultiTouchGestureRecognizer extends MultiTapGestureRecognizer {
|
||||||
|
MultiTouchGestureRecognizerCallback onMultiTap;
|
||||||
|
var numberOfTouches = 0;
|
||||||
|
|
||||||
|
MultiTouchGestureRecognizer() {
|
||||||
|
super.onTapDown = (pointer, details) => addTouch(pointer, details);
|
||||||
|
super.onTapUp = (pointer, details) => removeTouch(pointer, details);
|
||||||
|
super.onTapCancel = (pointer) => cancelTouch(pointer);
|
||||||
|
super.onTap = (pointer) => captureDefaultTap(pointer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void addTouch(int pointer, TapDownDetails details) {
|
||||||
|
numberOfTouches++;
|
||||||
|
onMultiTap(numberOfTouches, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeTouch(int pointer, TapUpDetails details) {
|
||||||
|
numberOfTouches--;
|
||||||
|
onMultiTap(numberOfTouches, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cancelTouch(int pointer) {
|
||||||
|
numberOfTouches = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void captureDefaultTap(int pointer) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef MultiTouchGestureRecognizerCallback = void Function(
|
||||||
|
int touchCount, bool addOrRemove);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user