feat: flutter ui integration

This commit is contained in:
levi authored and monkeyWie committed 2022-10-27 13:58:43 +08:00
1 parent 0fc133e46d
commit c4a30dc4c2
170 files changed
+7783 -1

No files matched your search

@@ -0,0 +1,22 @@
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:gopeed/core/common/libgopeed_interface.dart';
import 'package:gopeed/core/common/start_config.dart';
class LibgopeedChannel implements LibgopeedInterface {
static const _channel = MethodChannel('gopeed.com/libgopeed');
@override
Future<int> start(StartConfig cfg) async {
final port = await _channel.invokeMethod('start', {
'cfg': jsonEncode(cfg),
});
return port as int;
}
@override
Future<void> stop() async {
return await _channel.invokeMethod('stop');
}
}
@@ -0,0 +1,37 @@
import 'dart:async';
import 'dart:convert';
import 'dart:ffi';
import 'package:ffi/ffi.dart';
import 'package:gopeed/core/ffi/libgopeed_bind.dart';
import 'libgopeed_interface.dart';
import 'start_config.dart';
class LibgopeedFFi implements LibgopeedInterface {
late LibgopeedBind _libgopeed;
LibgopeedFFi(LibgopeedBind libgopeed) {
_libgopeed = libgopeed;
}
@override
Future<int> start(StartConfig cfg) {
var completer = Completer<int>();
var result = _libgopeed.Start(jsonEncode(cfg).toNativeUtf8().cast());
if (result.r1 != nullptr) {
completer.completeError(result.r1.cast<Utf8>().toDartString());
} else {
completer.complete(result.r0);
}
return completer.future;
}
@override
Future<void> stop() {
var completer = Completer<void>();
_libgopeed.Stop();
completer.complete();
return completer.future;
}
}
@@ -0,0 +1,7 @@
import 'package:gopeed/core/common/start_config.dart';
abstract class LibgopeedInterface {
Future<int> start(StartConfig cfg);
Future<void> stop();
}
@@ -0,0 +1,25 @@
import 'package:json_annotation/json_annotation.dart';
part 'start_config.g.dart';
@JsonSerializable()
class StartConfig {
String network;
String address;
String storage;
String storageDir;
int refreshInterval;
StartConfig({
required this.network,
required this.address,
required this.storage,
required this.storageDir,
required this.refreshInterval,
});
factory StartConfig.fromJson(Map<String, dynamic> json) =>
_$StartConfigFromJson(json);
Map<String, dynamic> toJson() => _$StartConfigToJson(this);
}
@@ -0,0 +1,24 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'start_config.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
StartConfig _$StartConfigFromJson(Map<String, dynamic> json) => StartConfig(
network: json['network'] as String,
address: json['address'] as String,
storage: json['storage'] as String,
storageDir: json['storageDir'] as String,
refreshInterval: json['refreshInterval'] as int,
);
Map<String, dynamic> _$StartConfigToJson(StartConfig instance) =>
<String, dynamic>{
'network': instance.network,
'address': instance.address,
'storage': instance.storage,
'storageDir': instance.storageDir,
'refreshInterval': instance.refreshInterval,
};