image shown now
This commit is contained in:
parent
0ba74ef7ec
commit
df58f3230e
@ -189,55 +189,59 @@ Future<Null> enterPasswordDialog(String id, BuildContext context) async {
|
|||||||
_hasDialog = true;
|
_hasDialog = true;
|
||||||
final controller = TextEditingController();
|
final controller = TextEditingController();
|
||||||
var remember = FFI.getByName('remember', arg: id) == 'true';
|
var remember = FFI.getByName('remember', arg: id) == 'true';
|
||||||
var dialog = AlertDialog(
|
var dialog = StatefulBuilder(builder: (context, setState) {
|
||||||
title: Text('Please enter your password'),
|
return AlertDialog(
|
||||||
contentPadding: const EdgeInsets.all(20.0),
|
title: Text('Please enter your password'),
|
||||||
content: Column(
|
contentPadding: const EdgeInsets.all(20.0),
|
||||||
mainAxisSize: MainAxisSize.min,
|
content: Column(
|
||||||
children: [
|
mainAxisSize: MainAxisSize.min,
|
||||||
TextField(
|
children: [
|
||||||
autofocus: true,
|
TextField(
|
||||||
obscureText: true,
|
autofocus: true,
|
||||||
controller: controller,
|
obscureText: true,
|
||||||
decoration: const InputDecoration(
|
controller: controller,
|
||||||
labelText: 'Password',
|
decoration: const InputDecoration(
|
||||||
|
labelText: 'Password',
|
||||||
|
),
|
||||||
),
|
),
|
||||||
|
ListTile(
|
||||||
|
title: Text(
|
||||||
|
'Remember the password',
|
||||||
|
),
|
||||||
|
leading: Checkbox(
|
||||||
|
value: remember,
|
||||||
|
onChanged: (v) {
|
||||||
|
setState(() {
|
||||||
|
remember = v;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
FlatButton(
|
||||||
|
textColor: MyTheme.accent,
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Text('Cancel'),
|
||||||
),
|
),
|
||||||
ListTile(
|
FlatButton(
|
||||||
title: Text(
|
textColor: MyTheme.accent,
|
||||||
'Remember the password',
|
onPressed: () {
|
||||||
),
|
var text = controller.text.trim();
|
||||||
leading: Checkbox(
|
if (text == '') return;
|
||||||
value: remember,
|
FFI.login(text, remember);
|
||||||
onChanged: (v) {
|
showLoading('Logging in...');
|
||||||
remember = v;
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
),
|
child: Text('OK'),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
);
|
||||||
actions: [
|
});
|
||||||
FlatButton(
|
|
||||||
textColor: MyTheme.accent,
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.pop(context);
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
child: Text('Cancel'),
|
|
||||||
),
|
|
||||||
FlatButton(
|
|
||||||
textColor: MyTheme.accent,
|
|
||||||
onPressed: () {
|
|
||||||
var text = controller.text.trim();
|
|
||||||
if (text == '') return;
|
|
||||||
FFI.login(text, remember);
|
|
||||||
showLoading('Logging in...');
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
child: Text('OK'),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
await showDialog<void>(
|
await showDialog<void>(
|
||||||
context: context,
|
context: context,
|
||||||
barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
|
@ -3,6 +3,7 @@ import 'common.dart';
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
class RemotePage extends StatefulWidget {
|
class RemotePage extends StatefulWidget {
|
||||||
@ -17,11 +18,9 @@ class RemotePage extends StatefulWidget {
|
|||||||
// https://github.com/hanxu317317/flutter_plan_demo/blob/master/lib/src/enter.dart
|
// https://github.com/hanxu317317/flutter_plan_demo/blob/master/lib/src/enter.dart
|
||||||
class _RemotePageState extends State<RemotePage> {
|
class _RemotePageState extends State<RemotePage> {
|
||||||
Timer _interval;
|
Timer _interval;
|
||||||
int x = 0;
|
ui.Image _image;
|
||||||
int y = 0;
|
PeerInfo _pi = PeerInfo();
|
||||||
int width = 0;
|
Display _display = Display();
|
||||||
int height = 0;
|
|
||||||
ui.Image image;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -44,22 +43,61 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
|
|
||||||
void interval() {
|
void interval() {
|
||||||
var evt = FFI.popEvent();
|
var evt = FFI.popEvent();
|
||||||
if (evt == null) return;
|
if (evt != null) {
|
||||||
var name = evt['name'];
|
var name = evt['name'];
|
||||||
if (name == 'msgbox') {
|
if (name == 'msgbox') {
|
||||||
handleMsgbox(evt);
|
handleMsgbox(evt);
|
||||||
|
} else if (name == 'peer_info') {
|
||||||
|
handlePeerInfo(evt);
|
||||||
|
} else if (name == 'switch_display') {
|
||||||
|
handleSwitchDisplay(evt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var rgba = FFI.getRgba();
|
var rgba = FFI.getRgba();
|
||||||
if (rgba != null) {
|
if (rgba != null) {
|
||||||
ui.decodeImageFromPixels(rgba, width, height, ui.PixelFormat.rgba8888,
|
ui.decodeImageFromPixels(
|
||||||
(_image) {
|
rgba, _display.width, _display.height, ui.PixelFormat.bgra8888,
|
||||||
|
(__image) {
|
||||||
setState(() {
|
setState(() {
|
||||||
image = _image;
|
_image = __image;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handleSwitchDisplay(Map<String, dynamic> evt) {
|
||||||
|
_pi.currentDisplay = int.parse(evt['display']);
|
||||||
|
_display.x = int.parse(evt['x']);
|
||||||
|
_display.y = int.parse(evt['y']);
|
||||||
|
_display.width = int.parse(evt['width']);
|
||||||
|
_display.height = int.parse(evt['height']);
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
void handlePeerInfo(Map<String, dynamic> evt) {
|
||||||
|
dismissLoading();
|
||||||
|
_pi.username = evt['username'];
|
||||||
|
_pi.hostname = evt['hostname'];
|
||||||
|
_pi.platform = evt['platform'];
|
||||||
|
_pi.sasEnabled = evt['sas_enabled'] == "true";
|
||||||
|
_pi.currentDisplay = int.parse(evt['current_display']);
|
||||||
|
List<dynamic> displays = json.decode(evt['displays']);
|
||||||
|
_pi.displays = List<Display>();
|
||||||
|
for (int i = 0; i < displays.length; ++i) {
|
||||||
|
Map<String, dynamic> d0 = displays[i];
|
||||||
|
var d = Display();
|
||||||
|
d.x = d0['x'];
|
||||||
|
d.y = d0['y'];
|
||||||
|
d.width = d0['width'];
|
||||||
|
d.height = d0['height'];
|
||||||
|
_pi.displays.add(d);
|
||||||
|
}
|
||||||
|
if (_pi.currentDisplay < _pi.displays.length) {
|
||||||
|
_display = _pi.displays[_pi.currentDisplay];
|
||||||
|
}
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
void handleMsgbox(Map<String, dynamic> evt) {
|
void handleMsgbox(Map<String, dynamic> evt) {
|
||||||
var type = evt['type'];
|
var type = evt['type'];
|
||||||
var title = evt['title'];
|
var title = evt['title'];
|
||||||
@ -81,9 +119,11 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
SystemChrome.setEnabledSystemUIOverlays([]);
|
SystemChrome.setEnabledSystemUIOverlays([]);
|
||||||
return FlutterEasyLoading(
|
return FlutterEasyLoading(
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
child: CustomPaint(
|
child: Container(
|
||||||
painter: new ImageEditor(image: image),
|
child: CustomPaint(
|
||||||
),
|
painter: new ImageEditor(image: _image),
|
||||||
|
),
|
||||||
|
color: MyTheme.grayBg),
|
||||||
onPanStart: (DragDownDetails) {
|
onPanStart: (DragDownDetails) {
|
||||||
print('onPanStart $DragDownDetails');
|
print('onPanStart $DragDownDetails');
|
||||||
// hero.moveTo(DragDownDetails.globalPosition.dx, DragDownDetails.globalPosition.dy);
|
// hero.moveTo(DragDownDetails.globalPosition.dx, DragDownDetails.globalPosition.dy);
|
||||||
@ -113,3 +153,19 @@ class ImageEditor extends CustomPainter {
|
|||||||
return oldDelegate != this;
|
return oldDelegate != this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Display {
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PeerInfo {
|
||||||
|
String username;
|
||||||
|
String hostname;
|
||||||
|
String platform;
|
||||||
|
bool sasEnabled;
|
||||||
|
int currentDisplay;
|
||||||
|
List<Display> displays;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user