MultiTapGestureRecognizer draft

This commit is contained in:
open-trade 2020-11-22 14:47:43 +08:00
parent 49760b4ad5
commit 25b2f52462

View File

@ -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);