mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
update ui
This commit is contained in:
@@ -219,10 +219,10 @@ toAndroidChannelInit() {
|
||||
switch (call.method) {
|
||||
case "try_start_without_auth":
|
||||
{
|
||||
var peerID = call.arguments["peerID"] as String;
|
||||
var name = call.arguments["name"] as String;
|
||||
ServerPage.serverModel.setPeer(false, name: name, id: peerID);
|
||||
showLoginReqAlert(nowCtx, peerID, name);
|
||||
// 可以不需要传递 通过FFI直接去获取 serverModel里面直接封装一个update通过FFI从rust端获取
|
||||
ServerPage.serverModel.updateClientState();
|
||||
debugPrint("pre show loginAlert:${ServerPage.serverModel.isFileTransfer.toString()}");
|
||||
showLoginReqAlert(nowCtx, ServerPage.serverModel.peerID, ServerPage.serverModel.peerName);
|
||||
debugPrint("from jvm:try_start_without_auth done");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter/gestures.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:device_info/device_info.dart';
|
||||
import 'package:external_path/external_path.dart';
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
import 'dart:ffi';
|
||||
@@ -518,11 +519,37 @@ class CursorModel with ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
class ClientState {
|
||||
bool isStart;
|
||||
bool isFileTransfer;
|
||||
String name;
|
||||
String peerId;
|
||||
|
||||
ClientState({this.isStart, this.isFileTransfer, this.name, this.peerId});
|
||||
|
||||
ClientState.fromJson(Map<String, dynamic> json) {
|
||||
isStart = json['is_start'];
|
||||
isFileTransfer = json['is_file_transfer'];
|
||||
name = json['name'];
|
||||
peerId = json['peer_id'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['is_start'] = this.isStart;
|
||||
data['is_file_transfer'] = this.isFileTransfer;
|
||||
data['name'] = this.name;
|
||||
data['peer_id'] = this.peerId;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ServerModel with ChangeNotifier {
|
||||
bool _mediaOk;
|
||||
bool _inputOk;
|
||||
|
||||
bool _peerEnabled;
|
||||
bool _isStart;
|
||||
bool _isFileTransfer;
|
||||
String _peerName;
|
||||
String _peerID;
|
||||
|
||||
@@ -530,7 +557,9 @@ class ServerModel with ChangeNotifier {
|
||||
|
||||
bool get inputOk => _inputOk;
|
||||
|
||||
bool get peerEnabled => _peerEnabled;
|
||||
bool get isStart => _isStart;
|
||||
|
||||
bool get isFileTransfer => _isFileTransfer;
|
||||
|
||||
String get peerName => _peerName;
|
||||
|
||||
@@ -539,7 +568,7 @@ class ServerModel with ChangeNotifier {
|
||||
ServerModel() {
|
||||
_mediaOk = false;
|
||||
_inputOk = false;
|
||||
_peerEnabled = false;
|
||||
_isStart = false;
|
||||
_peerName = "";
|
||||
_peerID = "";
|
||||
}
|
||||
@@ -559,14 +588,28 @@ class ServerModel with ChangeNotifier {
|
||||
}
|
||||
|
||||
setPeer(bool enabled, {String name = "", String id = ""}) {
|
||||
_peerEnabled = enabled;
|
||||
_isStart = enabled;
|
||||
if (name != "") _peerName = name;
|
||||
if (id != "") _peerID = id;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
updateClientState() {
|
||||
var res = FFI.getByName("client_state");
|
||||
debugPrint("getByName client_state string:$res");
|
||||
try {
|
||||
var clientState = ClientState.fromJson(jsonDecode(res));
|
||||
_isStart = clientState.isStart;
|
||||
_isFileTransfer = clientState.isFileTransfer;
|
||||
_peerName = clientState.name;
|
||||
_peerID = clientState.peerId;
|
||||
debugPrint("updateClientState:${clientState.toJson()}");
|
||||
} catch (e) {}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
clearPeer() {
|
||||
_peerEnabled = false;
|
||||
_isStart = false;
|
||||
_peerName = "";
|
||||
_peerID = "";
|
||||
notifyListeners();
|
||||
@@ -575,7 +618,8 @@ class ServerModel with ChangeNotifier {
|
||||
|
||||
class FFI {
|
||||
static String id = "";
|
||||
static String _dir = '';
|
||||
static String _dir = "";
|
||||
static String _homeDir = "";
|
||||
static F2 _getByName;
|
||||
static F3 _setByName;
|
||||
static F4 _freeRgba;
|
||||
@@ -742,6 +786,7 @@ class FFI {
|
||||
.lookupFunction<Void Function(Pointer<RgbaFrame>), F4>('free_rgba');
|
||||
_getRgba = dylib.lookupFunction<F5, F5>('get_rgba');
|
||||
_dir = (await getApplicationDocumentsDirectory()).path;
|
||||
_homeDir = (await ExternalPath.getExternalStorageDirectories())[0];
|
||||
String id = 'NA';
|
||||
String name = 'Flutter';
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
@@ -754,8 +799,10 @@ class FFI {
|
||||
name = iosInfo.utsname.machine;
|
||||
id = iosInfo.identifierForVendor.hashCode.toString();
|
||||
}
|
||||
debugPrint("info1-id:$id,info2-name:$name,dir:$_dir,homeDir:$_homeDir");
|
||||
setByName('info1', id);
|
||||
setByName('info2', name);
|
||||
setByName('home_dir',_homeDir);
|
||||
setByName('init', _dir);
|
||||
} catch (e) {
|
||||
print(e);
|
||||
|
||||
@@ -11,7 +11,7 @@ class ServerPage extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// TODO: implement build
|
||||
checkService();
|
||||
return ChangeNotifierProvider.value(
|
||||
value: serverModel,
|
||||
child: Scaffold(
|
||||
@@ -55,13 +55,24 @@ class ServerPage extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
void checkService() {
|
||||
// 检测当前服务状态,若已存在服务则异步更新数据回来
|
||||
toAndroidChannel.invokeMethod("check_service"); // jvm
|
||||
ServerPage.serverModel.updateClientState();
|
||||
// var state = FFI.getByName("client_state").split(":"); // rust
|
||||
// var isStart = FFI.getByName("client_is_start") !="";// 使用JSON
|
||||
// if(state.length == 2){
|
||||
// ServerPage.serverModel.setPeer(isStart,name:state[0],id:state[1]);
|
||||
// }
|
||||
}
|
||||
|
||||
class ServerInfo extends StatefulWidget {
|
||||
@override
|
||||
_ServerInfoState createState() => _ServerInfoState();
|
||||
}
|
||||
|
||||
class _ServerInfoState extends State<ServerInfo> {
|
||||
var _passwdShow = true;
|
||||
var _passwdShow = false;
|
||||
|
||||
// TODO set ID / PASSWORD
|
||||
var _serverId = "";
|
||||
@@ -96,7 +107,7 @@ class _ServerInfoState extends State<ServerInfo> {
|
||||
),
|
||||
TextFormField(
|
||||
readOnly: true,
|
||||
obscureText: _passwdShow,
|
||||
obscureText: !_passwdShow,
|
||||
style: TextStyle(
|
||||
fontSize: 25.0,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -144,7 +155,7 @@ class _PermissionCheckerState extends State<PermissionChecker> {
|
||||
cardTitle("权限列表"),
|
||||
PermissionRow("媒体权限", serverModel.mediaOk, _toAndroidInitService),
|
||||
const Divider(height: 0),
|
||||
PermissionRow("输入权限", serverModel.inputOk, _toAndroidCheckInput),
|
||||
PermissionRow("输入权限", serverModel.inputOk, _toAndroidInitInput),
|
||||
const Divider(),
|
||||
serverModel.mediaOk
|
||||
? ElevatedButton.icon(
|
||||
@@ -172,7 +183,9 @@ void showLoginReqAlert(BuildContext context, String peerID, String name) {
|
||||
child: Text("接受"),
|
||||
onPressed: () {
|
||||
FFI.setByName("login_res", "true");
|
||||
_toAndroidStartCapture();
|
||||
if(!ServerPage.serverModel.isFileTransfer){
|
||||
_toAndroidStartCapture();
|
||||
}
|
||||
ServerPage.serverModel.setPeer(true);
|
||||
Navigator.of(context).pop();
|
||||
}),
|
||||
@@ -224,7 +237,7 @@ class ConnectionManager extends StatelessWidget {
|
||||
final serverModel = Provider.of<ServerModel>(context);
|
||||
var info =
|
||||
"${serverModel.peerName != "" ? serverModel.peerName : "NA"}-${serverModel.peerID != "" ? serverModel.peerID : "NA"}";
|
||||
return serverModel.peerEnabled
|
||||
return serverModel.isStart
|
||||
? myCard(Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@@ -239,7 +252,7 @@ class ConnectionManager extends StatelessWidget {
|
||||
icon: Icon(Icons.close),
|
||||
onPressed: () {
|
||||
FFI.setByName("close_conn");
|
||||
_toAndroidStopCapture();
|
||||
// _toAndroidStopCapture();
|
||||
serverModel.setPeer(false);
|
||||
},
|
||||
label: Text("断开连接"))
|
||||
@@ -286,10 +299,10 @@ Future<Null> _toAndroidStartCapture() async {
|
||||
debugPrint("_toAndroidStartCapture:$res");
|
||||
}
|
||||
|
||||
Future<Null> _toAndroidStopCapture() async {
|
||||
bool res = await toAndroidChannel.invokeMethod("stop_capture");
|
||||
debugPrint("_toAndroidStopCapture:$res");
|
||||
}
|
||||
// Future<Null> _toAndroidStopCapture() async {
|
||||
// bool res = await toAndroidChannel.invokeMethod("stop_capture");
|
||||
// debugPrint("_toAndroidStopCapture:$res");
|
||||
// }
|
||||
|
||||
Future<Null> _toAndroidStopService() async {
|
||||
FFI.setByName("stop_service");
|
||||
@@ -297,7 +310,7 @@ Future<Null> _toAndroidStopService() async {
|
||||
debugPrint("_toAndroidStopSer:$res");
|
||||
}
|
||||
|
||||
Future<Null> _toAndroidCheckInput() async {
|
||||
bool res = await toAndroidChannel.invokeMethod("check_input");
|
||||
debugPrint("_toAndroidStopSer:$res");
|
||||
Future<Null> _toAndroidInitInput() async {
|
||||
bool res = await toAndroidChannel.invokeMethod("init_input");
|
||||
debugPrint("_toAndroidInitInput:$res");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user