input key ffi

This commit is contained in:
open-trade 2020-11-20 16:37:48 +08:00
parent ae79afaf0d
commit 83622cffc6
3 changed files with 127 additions and 76 deletions

View File

@ -16,6 +16,7 @@ class HexColor extends Color {
} }
class MyTheme { class MyTheme {
MyTheme._();
static const Color grayBg = Color(0xFFEEEEEE); static const Color grayBg = Color(0xFFEEEEEE);
static const Color white = Color(0xFFFFFFFF); static const Color white = Color(0xFFFFFFFF);
static const Color accent = Color(0xFF0071FF); static const Color accent = Color(0xFF0071FF);
@ -46,7 +47,7 @@ typedef BuildAlertDailog = Tuple3<Widget, Widget, List<Widget>> Function(
// https://material.io/develop/flutter/components/dialogs // https://material.io/develop/flutter/components/dialogs
Future<T> showAlertDialog<T>(BuildContext context, BuildAlertDailog build, Future<T> showAlertDialog<T>(BuildContext context, BuildAlertDailog build,
[WillPopCallback onWillPop, [WillPopCallback onWillPop,
bool barrierDismissible, bool barrierDismissible = false,
double contentPadding = 20]) async { double contentPadding = 20]) async {
dismissLoading(); dismissLoading();
if (_hasDialog) { if (_hasDialog) {
@ -73,10 +74,20 @@ Future<T> showAlertDialog<T>(BuildContext context, BuildAlertDailog build,
return res; return res;
} }
void msgbox(String type, String title, String text, BuildContext context) { void msgbox(String type, String title, String text, BuildContext context,
[hasCancel = false]) {
showAlertDialog( showAlertDialog(
context, context,
(_) => Tuple3(Text(title), Text(text), [ (_) => Tuple3(Text(title), Text(text), [
hasCancel
? Spacer()
: FlatButton(
textColor: MyTheme.accent,
onPressed: () {
Navigator.pop(context);
},
child: Text('Cancel'),
),
FlatButton( FlatButton(
textColor: MyTheme.accent, textColor: MyTheme.accent,
onPressed: () { onPressed: () {

View File

@ -267,7 +267,7 @@ class FFI {
FFI.ffiModel.clear(); FFI.ffiModel.clear();
} }
static void setByName(String name, String value) { static void setByName(String name, [String value = '']) {
_setByName(Utf8.toUtf8(name), Utf8.toUtf8(value)); _setByName(Utf8.toUtf8(name), Utf8.toUtf8(value));
} }

View File

@ -67,79 +67,92 @@ class _RemotePageState extends State<RemotePage> {
// Size size = MediaQueryData.fromWindow(ui.window).size; // Size size = MediaQueryData.fromWindow(ui.window).size;
// MediaQuery.of(context).size.height; // MediaQuery.of(context).size.height;
EasyLoading.instance.loadingStyle = EasyLoadingStyle.light; EasyLoading.instance.loadingStyle = EasyLoadingStyle.light;
return Scaffold( return WillPopScope(
floatingActionButton: _showBar onWillPop: () async {
? null close();
: FloatingActionButton( return false;
mini: true, },
child: Icon(Icons.expand_less), child: Scaffold(
backgroundColor: MyTheme.accent50, floatingActionButton: _showBar
onPressed: () { ? null
setState(() => _showBar = !_showBar); : FloatingActionButton(
}), mini: true,
bottomNavigationBar: _showBar child: Icon(Icons.expand_less),
? BottomAppBar( backgroundColor: MyTheme.accent50,
color: MyTheme.accent, onPressed: () {
child: Row( setState(() => _showBar = !_showBar);
mainAxisSize: MainAxisSize.max, }),
mainAxisAlignment: MainAxisAlignment.spaceBetween, bottomNavigationBar: _showBar
children: <Widget>[ ? BottomAppBar(
Row(children: [ color: MyTheme.accent,
IconButton( child: Row(
color: Colors.white, mainAxisSize: MainAxisSize.max,
icon: Icon(Icons.clear), mainAxisAlignment: MainAxisAlignment.spaceBetween,
onPressed: () {}, children: <Widget>[
), Row(children: [
IconButton( IconButton(
color: Colors.white,
icon: Icon(Icons.keyboard),
onPressed: () {},
),
Transform.rotate(
angle: 15 * math.pi / 180,
child: IconButton(
color: Colors.white, color: Colors.white,
icon: Icon(Icons.flash_on), icon: Icon(Icons.clear),
onPressed: () {
close();
},
),
IconButton(
color: Colors.white,
icon: Icon(Icons.keyboard),
onPressed: () {}, onPressed: () {},
)), ),
IconButton( Transform.rotate(
color: Colors.white, angle: 15 * math.pi / 180,
icon: Icon(Icons.tv), child: IconButton(
onPressed: () { color: Colors.white,
showOptions(widget.id, context); icon: Icon(Icons.flash_on),
}, onPressed: () {
), showActions(context);
IconButton( },
color: Colors.white, )),
icon: Icon(Icons.settings), IconButton(
onPressed: () {}, color: Colors.white,
) icon: Icon(Icons.tv),
]), onPressed: () {
IconButton( showOptions(context);
color: Colors.white, },
icon: Icon(Icons.expand_more), ),
onPressed: () { IconButton(
setState(() => _showBar = !_showBar); color: Colors.white,
}), icon: Icon(Icons.settings),
], onPressed: () {},
), )
) ]),
: null, IconButton(
body: FlutterEasyLoading( color: Colors.white,
child: Container( icon: Icon(Icons.expand_more),
color: MyTheme.canvasColor, onPressed: () {
child: InteractiveViewer( setState(() => _showBar = !_showBar);
constrained: false, }),
panEnabled: true, ],
onInteractionUpdate: (details) { ),
print('$details'); )
}, : null,
child: Stack(children: [ body: FlutterEasyLoading(
ImagePaint(), child: Container(
CursorPaint(), color: MyTheme.canvasColor,
]), child: InteractiveViewer(
), constrained: false,
))); panEnabled: true,
onInteractionUpdate: (details) {
print('$details');
},
child: Stack(children: [
ImagePaint(),
CursorPaint(),
]),
),
))));
}
void close() {
msgbox('', 'Close', 'Are you sure to close the connection?', context);
} }
} }
@ -261,7 +274,7 @@ void wrongPasswordDialog(String id, BuildContext context) {
])); ]));
} }
void showOptions(String id, BuildContext context) { void showOptions(BuildContext context) {
var showRemoteCursor = var showRemoteCursor =
FFI.getByName('toggle_option', 'show-remote-cursor') == 'true'; FFI.getByName('toggle_option', 'show-remote-cursor') == 'true';
var lockAfterSessionEnd = var lockAfterSessionEnd =
@ -332,5 +345,32 @@ void showOptions(String id, BuildContext context) {
null), null),
() async => true, () async => true,
true, true,
10); 0);
}
void showActions(BuildContext context) {
showAlertDialog(
context,
(setState) => Tuple3(
null,
Column(mainAxisSize: MainAxisSize.min, children: [
ListTile(
onTap: () {
Navigator.pop(context);
FFI.setByName('ctrl_alt_del');
},
title: Text('Insert Ctrl + Alt + Del'),
),
ListTile(
onTap: () {
Navigator.pop(context);
FFI.setByName('lock_screen');
},
title: Text('Insert Lock'),
),
]),
null),
() async => true,
true,
0);
} }