rustdesk/flutter_hbb/lib/common.dart

73 lines
1.8 KiB
Dart
Raw Normal View History

2020-11-15 15:04:05 +03:00
import 'package:flutter/material.dart';
import 'package:ffi/ffi.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'dart:ffi';
import 'dart:async';
class HexColor extends Color {
HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
static int _getColorFromHex(String hexColor) {
hexColor = hexColor.toUpperCase().replaceAll('#', '');
if (hexColor.length == 6) {
hexColor = 'FF' + hexColor;
}
return int.parse(hexColor, radix: 16);
}
}
2020-11-15 20:13:26 +03:00
class MyTheme {
static const Color grayBg = Color(0xFFEEEEEE);
static const Color white = Color(0xFFFFFFFF);
}
typedef F1 = void Function(Pointer<Utf8>);
2020-11-15 21:12:37 +03:00
typedef F2 = Pointer<Utf8> Function();
2020-11-15 20:13:26 +03:00
2020-11-15 15:04:05 +03:00
// https://juejin.im/post/6844903864852807694
class FfiModel with ChangeNotifier {
2020-11-15 20:13:26 +03:00
F1 _connectRemote;
2020-11-15 21:12:37 +03:00
F2 _getPeers;
F1 _freeCString;
2020-11-15 15:04:05 +03:00
FfiModel() {
initialzeFFI();
}
void addRemote() {
notifyListeners();
}
void connect(String id) {
_connectRemote(Utf8.toUtf8(id));
}
2020-11-15 21:12:37 +03:00
String getId() {
return "";
}
void peers() {
var p = _getPeers();
var x = Utf8.fromUtf8(p);
// https://github.com/brickpop/flutter-rust-ffi
_freeCString(p);
}
2020-11-15 15:04:05 +03:00
Future<Null> initialzeFFI() async {
final dylib = Platform.isAndroid
? DynamicLibrary.open('librustdesk.so')
: DynamicLibrary.process();
final initialize = dylib.lookupFunction<Void Function(Pointer<Utf8>),
void Function(Pointer<Utf8>)>('initialize');
2020-11-15 20:13:26 +03:00
_connectRemote = dylib
.lookupFunction<Void Function(Pointer<Utf8>), F1>('connect_remote');
2020-11-15 21:12:37 +03:00
_getPeers = dylib.lookupFunction<F2, F2>('get_peers');
_freeCString = dylib
.lookupFunction<Void Function(Pointer<Utf8>), F1>('rust_cstr_free');
2020-11-15 15:04:05 +03:00
final dir = (await getApplicationDocumentsDirectory()).path;
initialize(Utf8.toUtf8(dir));
notifyListeners();
}
}