demo: use mobile_ffi to get id for desktop version

This commit is contained in:
Kingtous
2022-05-25 00:28:59 +08:00
parent a81e2f9859
commit a364e7f808
12 changed files with 165 additions and 32 deletions

View File

@@ -1,4 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_hbb/common.dart';
import 'package:flutter_hbb/models/model.dart';
import 'package:provider/provider.dart';
class DesktopHomePage extends StatefulWidget {
DesktopHomePage({Key? key}) : super(key: key);
@@ -10,6 +13,75 @@ class DesktopHomePage extends StatefulWidget {
class _DesktopHomePageState extends State<DesktopHomePage> {
@override
Widget build(BuildContext context) {
return Text("Hello Desktop");
return Scaffold(
body: Container(
child: Row(
children: [
Flexible(
child: buildServerInfo(context),
flex: 1,
),
Flexible(
child: buildServerBoard(context),
flex: 4,
),
],
),
),
);
}
buildServerInfo(BuildContext context) {
return ChangeNotifierProvider.value(
value: FFI.serverModel,
child: Column(
children: [buildIDBoard(context)],
),
);
}
buildServerBoard(BuildContext context) {
return Center(
child: Text("waiting implementation"),
);
}
buildIDBoard(BuildContext context) {
final model = FFI.serverModel;
return Card(
elevation: 0.5,
child: Container(
margin: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Container(
width: 4,
height: 70,
decoration: BoxDecoration(color: MyTheme.accent),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
translate("ID"),
style:
TextStyle(fontSize: 18, fontWeight: FontWeight.w500),
),
TextFormField(
controller: model.serverId,
),
],
),
),
),
],
),
),
);
}
}

View File

@@ -1,16 +1,13 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:provider/provider.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_core/firebase_core.dart';
import 'common.dart';
import 'models/model.dart';
import 'mobile/pages/home_page.dart';
import 'mobile/pages/server_page.dart';
import 'mobile/pages/settings_page.dart';
import 'models/model.dart';
Future<Null> main() async {
WidgetsFlutterBinding.ensureInitialized();
@@ -20,6 +17,10 @@ Future<Null> main() async {
toAndroidChannelInit();
}
refreshCurrentUser();
if (isDesktop) {
print("desktop mode: starting service");
FFI.serverModel.startService();
}
runApp(App());
}

View File

@@ -1,15 +1,17 @@
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ffi';
import 'package:ffi/ffi.dart';
import 'package:path_provider/path_provider.dart';
import 'package:device_info/device_info.dart';
import 'package:package_info/package_info.dart';
import 'package:external_path/external_path.dart';
import 'package:ffi/ffi.dart';
import 'package:flutter/services.dart';
import '../generated_bridge.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:path_provider/path_provider.dart';
import '../common.dart';
import '../generated_bridge.dart';
class RgbaFrame extends Struct {
@Uint32()
@@ -60,13 +62,19 @@ class PlatformFFI {
isIOS = Platform.isIOS;
isAndroid = Platform.isAndroid;
isDesktop = Platform.isWindows || Platform.isMacOS || Platform.isLinux;
if (isDesktop) {
// TODO
return;
}
// if (isDesktop) {
// // TODO
// return;
// }
final dylib = Platform.isAndroid
? DynamicLibrary.open('librustdesk.so')
: DynamicLibrary.process();
: Platform.isLinux
? DynamicLibrary.open("/usr/lib/rustdesk/librustdesk.so")
: Platform.isWindows
? DynamicLibrary.open("librustdesk.dll")
: Platform.isMacOS
? DynamicLibrary.open("librustdesk.dylib")
: DynamicLibrary.process();
print('initializing FFI');
try {
_getByName = dylib.lookupFunction<F2, F2>('get_by_name');

View File

@@ -1,7 +1,10 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:wakelock/wakelock.dart';
import '../common.dart';
import '../mobile/pages/server_page.dart';
import 'model.dart';
@@ -203,7 +206,10 @@ class ServerModel with ChangeNotifier {
FFI.setByName("start_service");
getIDPasswd();
updateClientState();
Wakelock.enable();
if (!Platform.isLinux) {
// current linux is not supported
Wakelock.enable();
}
}
Future<Null> stopService() async {
@@ -212,7 +218,10 @@ class ServerModel with ChangeNotifier {
await FFI.invokeMethod("stop_service");
FFI.setByName("stop_service");
notifyListeners();
Wakelock.disable();
if (!Platform.isLinux) {
// current linux is not supported
Wakelock.disable();
}
}
Future<Null> initInput() async {