use hidden textfield to capture input

This commit is contained in:
open-trade 2020-11-22 18:29:04 +08:00
parent 25b2f52462
commit f6f7e1ead1
2 changed files with 132 additions and 118 deletions

View File

@ -138,8 +138,8 @@ class ImageModel with ChangeNotifier {
class CursorModel with ChangeNotifier {
ui.Image _image;
final _images = Map<int, ui.Image>();
double _x = 0;
double _y = 0;
double _x = -10000;
double _y = -10000;
double _hotx = 0;
double _hoty = 0;
double _displayOriginX = 0;
@ -189,6 +189,8 @@ class CursorModel with ChangeNotifier {
}
void clear() {
_x = -10000;
_x = -10000;
_image = null;
_images.clear();
}

View File

@ -85,132 +85,144 @@ class _RemotePageState extends State<RemotePage> {
// Size size = MediaQueryData.fromWindow(ui.window).size;
// MediaQuery.of(context).size.height;
EasyLoading.instance.loadingStyle = EasyLoadingStyle.light;
return RawKeyboardListener(
focusNode: _focusNode,
onKey: _handleKeyEvent,
child: WillPopScope(
onWillPop: () async {
close();
return false;
},
child: Scaffold(
floatingActionButton: _showBar
? null
: FloatingActionButton(
mini: true,
child: Icon(Icons.expand_less),
backgroundColor: MyTheme.accent50,
onPressed: () {
setState(() => _showBar = !_showBar);
}),
bottomNavigationBar: _showBar
? BottomAppBar(
elevation: 10,
color: MyTheme.accent,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Row(children: [
IconButton(
return WillPopScope(
onWillPop: () async {
close();
return false;
},
child: Scaffold(
floatingActionButton: _showBar
? null
: FloatingActionButton(
mini: true,
child: Icon(Icons.expand_less),
backgroundColor: MyTheme.accent50,
onPressed: () {
setState(() => _showBar = !_showBar);
}),
bottomNavigationBar: _showBar
? BottomAppBar(
elevation: 10,
color: MyTheme.accent,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Row(children: [
IconButton(
color: Colors.white,
icon: Icon(Icons.clear),
onPressed: () {
close();
},
),
IconButton(
color: Colors.white,
icon: Icon(Icons.keyboard),
onPressed: () {
SystemChrome.setEnabledSystemUIOverlays(
SystemUiOverlay.values);
_focusNode.requestFocus();
SystemChannels.textInput
.invokeMethod('TextInput.show');
}),
Transform.rotate(
angle: 15 * math.pi / 180,
child: IconButton(
color: Colors.white,
icon: Icon(Icons.clear),
icon: Icon(Icons.flash_on),
onPressed: () {
close();
showActions(context);
},
),
IconButton(
color: Colors.white,
icon: Icon(Icons.keyboard),
onPressed: () {
SystemChrome.setEnabledSystemUIOverlays(
SystemUiOverlay.values);
SystemChannels.textInput
.invokeMethod('TextInput.show');
_focusNode.requestFocus();
}),
Transform.rotate(
angle: 15 * math.pi / 180,
child: IconButton(
color: Colors.white,
icon: Icon(Icons.flash_on),
onPressed: () {
showActions(context);
},
)),
IconButton(
)),
IconButton(
color: Colors.white,
icon: Icon(Icons.tv),
onPressed: () {
showOptions(context);
},
),
Container(
color: _pan ? Colors.blue[500] : null,
child: IconButton(
color: Colors.white,
icon: Icon(Icons.tv),
icon: Icon(Icons.pan_tool),
onPressed: () {
showOptions(context);
setState(() => _pan = !_pan);
},
),
Container(
color: _pan ? Colors.blue[500] : null,
child: IconButton(
color: Colors.white,
icon: Icon(Icons.pan_tool),
onPressed: () {
setState(() => _pan = !_pan);
},
))
]),
IconButton(
color: Colors.white,
icon: Icon(Icons.expand_more),
onPressed: () {
setState(() => _showBar = !_showBar);
}),
],
),
)
: null,
body: FlutterEasyLoading(
child: Container(
color: MyTheme.canvasColor,
child: RawGestureDetector(
gestures: {
MultiTouchGestureRecognizer:
GestureRecognizerFactoryWithHandlers<
MultiTouchGestureRecognizer>(
() => MultiTouchGestureRecognizer(),
(MultiTouchGestureRecognizer instance) {
instance.onMultiTap = (
touchCount,
addOrRemove,
) =>
print('$touchCount, $addOrRemove');
},
),
))
]),
IconButton(
color: Colors.white,
icon: Icon(Icons.expand_more),
onPressed: () {
setState(() => _showBar = !_showBar);
}),
],
),
)
: null,
body: FlutterEasyLoading(
child: Container(
color: MyTheme.canvasColor,
child: RawGestureDetector(
gestures: {
MultiTouchGestureRecognizer:
GestureRecognizerFactoryWithHandlers<
MultiTouchGestureRecognizer>(
() => MultiTouchGestureRecognizer(),
(MultiTouchGestureRecognizer instance) {
instance.onMultiTap = (
touchCount,
addOrRemove,
) =>
print('$touchCount, $addOrRemove');
},
child: GestureDetector(
onTap: () {
if (_pan) return;
),
},
child: GestureDetector(
onTap: () {
if (_pan) return;
},
onDoubleTap: () {
if (_pan) return;
},
onLongPress: () {
if (_pan) return;
},
child: InteractiveViewer(
constrained: false,
panEnabled: _pan,
onInteractionUpdate: (details) {
// print('$details');
},
onDoubleTap: () {
if (_pan) return;
onInteractionStart: (s) {
print('$s');
},
onLongPress: () {
if (_pan) return;
onInteractionEnd: (x) {
print('$x');
},
child: InteractiveViewer(
constrained: false,
panEnabled: _pan,
onInteractionUpdate: (details) {
// print('$details');
},
onInteractionStart: (s) {
print('$s');
},
onInteractionEnd: (x) {
print('$x');
},
child: Stack(children: [
ImagePaint(),
CursorPaint(),
])),
)),
)))));
child: Stack(children: [
ImagePaint(),
CursorPaint(),
SizedBox(
width: 0,
height: 0,
child: _bottom < 100
? Container()
: TextFormField(
textInputAction: TextInputAction.newline,
autocorrect: false,
enableSuggestions: false,
focusNode: _focusNode,
maxLines: null,
keyboardType: TextInputType.multiline,
onChanged: (x) => print('$x'),
),
),
])),
)),
))));
}
void close() {