mirror of
https://mirror.ghproxy.com/https://github.com/StarCitizenToolBox/app.git
synced 2024-12-22 23:23:43 +08:00
grpc import
This commit is contained in:
parent
9f6f9b2dc4
commit
5f4af52ef2
19
assets/cert.pem
Normal file
19
assets/cert.pem
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDEDCCAfigAwIBAgIQd60aUiCLj0uhbJ9IdhfflzANBgkqhkiG9w0BAQsFADAS
|
||||||
|
MRAwDgYDVQQKEwdBY21lIENvMB4XDTIzMTIwMTE1MjkyN1oXDTMzMTEyODE1Mjky
|
||||||
|
N1owEjEQMA4GA1UEChMHQWNtZSBDbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||||
|
AQoCggEBAKBov8KcT7N4bhf1RE5D2vKV+NVDMnHVkvij9VvixLALA0K9QHPUOPM+
|
||||||
|
ReDluJyeOk34lwXMd8S2HAWghKHB80lfFrUT0cj/BgSXQBRWL8oQNtCPMMOJmZ6A
|
||||||
|
TCKAQOXSJ86bwrEHWbuSjQtfDONPDg7qF8ysEjNfjIro/yxA9z+nxO07oHrtBLg+
|
||||||
|
C//hd3miGIyL5iwgIXH86Y6Mvp6K1/Sfc6dZhwiZwjG+8XR338Y69KL+5SPemE88
|
||||||
|
4fIa9p/QYKbkCRE2D5jjW4OCJOK/D105/DNSJu20HzdP1crZJsi4RXLLCE1OC/Mz
|
||||||
|
plzD9hdVovKtx6WfxgpFKZpNBlXs73ECAwEAAaNiMGAwDgYDVR0PAQH/BAQDAgWg
|
||||||
|
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0RBCQwIoIg
|
||||||
|
Z3JwYy5zY3Rvb2xib3guZmFrZS5iaWxpYmlsaS5jb20wDQYJKoZIhvcNAQELBQAD
|
||||||
|
ggEBAHagncLc0hFp2bcCbp+V9nq5kYkc3iZ2eWgwwq7NeQVk5nAqMajFeoyJbN6C
|
||||||
|
Aksqbz+iNsJdzqpzfo2VC70Rd3n79i0krK2puDhSU+1CkHm5F4CcuJQXA44RWLt+
|
||||||
|
iINU3Op1upl2+TAujLb2ezmh7CoxlHbMkd0+5qa6DHoRB1wZ6MF4iYzGupr63uVv
|
||||||
|
6wQzzRGZgEt5iC2nRF9moilwVIrs3w6swpWh/m/YCPUUWIZGj1J6PmOTiDyOReSQ
|
||||||
|
xG6chIPhdzAKPoBPEQzG9v/t94w3kdF010BP2JzQoKg3lecCM1QWgpGV8qvbhtoS
|
||||||
|
hFhz6sZZ/sh6NiH0Cp0t55jhKDI=
|
||||||
|
-----END CERTIFICATE-----
|
20
lib/api/grpc_api.dart
Normal file
20
lib/api/grpc_api.dart
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import 'package:starcitizen_doctor/common/grpc/grpc.dart';
|
||||||
|
import 'package:starcitizen_doctor/generated/grpc/app.pbgrpc.dart';
|
||||||
|
|
||||||
|
import '../common/utils/base_utils.dart';
|
||||||
|
|
||||||
|
class GrpcApi {
|
||||||
|
static final _pingClient = PingServiceClient(GrpcClient.channel);
|
||||||
|
|
||||||
|
static Future pingServer() async {
|
||||||
|
try {
|
||||||
|
final result = await _pingClient.pingServer(PingRequest(name: "ping"));
|
||||||
|
if (result.pong == "pong") {
|
||||||
|
dPrint("[GrpcApi] gRPC service Connected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
dPrint("[GrpcApi] pingServer Error: $e");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,14 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_acrylic/flutter_acrylic.dart';
|
import 'package:flutter_acrylic/flutter_acrylic.dart';
|
||||||
import 'package:hexcolor/hexcolor.dart';
|
import 'package:hexcolor/hexcolor.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:starcitizen_doctor/api/analytics.dart';
|
import 'package:starcitizen_doctor/api/analytics.dart';
|
||||||
import 'package:starcitizen_doctor/api/api.dart';
|
import 'package:starcitizen_doctor/api/api.dart';
|
||||||
|
import 'package:starcitizen_doctor/api/grpc_api.dart';
|
||||||
import 'package:starcitizen_doctor/common/helper/system_helper.dart';
|
import 'package:starcitizen_doctor/common/helper/system_helper.dart';
|
||||||
import 'package:starcitizen_doctor/common/rust/ffi.dart';
|
import 'package:starcitizen_doctor/common/rust/ffi.dart';
|
||||||
import 'package:starcitizen_doctor/data/app_version_data.dart';
|
import 'package:starcitizen_doctor/data/app_version_data.dart';
|
||||||
@ -54,6 +56,8 @@ class AppConf {
|
|||||||
static Color? colorMenu;
|
static Color? colorMenu;
|
||||||
static Color? colorMica;
|
static Color? colorMica;
|
||||||
|
|
||||||
|
static List<int>? certData;
|
||||||
|
|
||||||
static const isMSE =
|
static const isMSE =
|
||||||
String.fromEnvironment("MSE", defaultValue: "false") == "true";
|
String.fromEnvironment("MSE", defaultValue: "false") == "true";
|
||||||
|
|
||||||
@ -95,10 +99,16 @@ class AppConf {
|
|||||||
colorMenu = HexColor("#132431").withOpacity(.95);
|
colorMenu = HexColor("#132431").withOpacity(.95);
|
||||||
colorMica = HexColor("#0A3142");
|
colorMica = HexColor("#0A3142");
|
||||||
|
|
||||||
|
/// init grpcKeys
|
||||||
|
certData = (await rootBundle.load("assets/cert.pem"))
|
||||||
|
.buffer
|
||||||
|
.asUint8List()
|
||||||
|
.toList();
|
||||||
|
|
||||||
/// init windows
|
/// init windows
|
||||||
await windowManager.ensureInitialized();
|
await windowManager.ensureInitialized();
|
||||||
windowManager.waitUntilReadyToShow().then((_) async {
|
windowManager.waitUntilReadyToShow().then((_) async {
|
||||||
await windowManager.setSize(const Size(1280, 810));
|
await windowManager.setSize(const Size(1080, 810));
|
||||||
await windowManager.setMinimumSize(const Size(1280, 810));
|
await windowManager.setMinimumSize(const Size(1280, 810));
|
||||||
await windowManager.center(animate: true);
|
await windowManager.center(animate: true);
|
||||||
await windowManager.setSkipTaskbar(false);
|
await windowManager.setSkipTaskbar(false);
|
||||||
@ -124,6 +134,7 @@ class AppConf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> checkUpdate() async {
|
static Future<void> checkUpdate() async {
|
||||||
|
GrpcApi.pingServer();
|
||||||
// clean path
|
// clean path
|
||||||
if (!isMSE) {
|
if (!isMSE) {
|
||||||
final dir = Directory(getUpgradePath());
|
final dir = Directory(getUpgradePath());
|
||||||
|
17
lib/common/grpc/grpc.dart
Normal file
17
lib/common/grpc/grpc.dart
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import 'package:grpc/grpc.dart';
|
||||||
|
import 'package:starcitizen_doctor/common/conf.dart';
|
||||||
|
|
||||||
|
class GrpcClient {
|
||||||
|
static final channel = ClientChannel(
|
||||||
|
'grpc.sctoolbox.xkeyc.com',
|
||||||
|
port: 8439,
|
||||||
|
options: ChannelOptions(
|
||||||
|
credentials: ChannelCredentials.secure(
|
||||||
|
certificates: AppConf.certData,
|
||||||
|
authority: 'grpc.sctoolbox.fake.bilibili.com',
|
||||||
|
),
|
||||||
|
codecRegistry:
|
||||||
|
CodecRegistry(codecs: const [GzipCodec(), IdentityCodec()]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
118
lib/generated/grpc/app.pb.dart
Normal file
118
lib/generated/grpc/app.pb.dart
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
//
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: app.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
|
||||||
|
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||||
|
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||||
|
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||||
|
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||||
|
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
|
class PingRequest extends $pb.GeneratedMessage {
|
||||||
|
factory PingRequest({
|
||||||
|
$core.String? name,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (name != null) {
|
||||||
|
$result.name = name;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
PingRequest._() : super();
|
||||||
|
factory PingRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory PingRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PingRequest', createEmptyInstance: create)
|
||||||
|
..aOS(1, _omitFieldNames ? '' : 'name')
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
PingRequest clone() => PingRequest()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
PingRequest copyWith(void Function(PingRequest) updates) => super.copyWith((message) => updates(message as PingRequest)) as PingRequest;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PingRequest create() => PingRequest._();
|
||||||
|
PingRequest createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<PingRequest> createRepeated() => $pb.PbList<PingRequest>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PingRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PingRequest>(create);
|
||||||
|
static PingRequest? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.String get name => $_getSZ(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set name($core.String v) { $_setString(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasName() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearName() => clearField(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class PingResult extends $pb.GeneratedMessage {
|
||||||
|
factory PingResult({
|
||||||
|
$core.String? pong,
|
||||||
|
}) {
|
||||||
|
final $result = create();
|
||||||
|
if (pong != null) {
|
||||||
|
$result.pong = pong;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
PingResult._() : super();
|
||||||
|
factory PingResult.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||||
|
factory PingResult.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PingResult', createEmptyInstance: create)
|
||||||
|
..aOS(1, _omitFieldNames ? '' : 'pong')
|
||||||
|
..hasRequiredFields = false
|
||||||
|
;
|
||||||
|
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
PingResult clone() => PingResult()..mergeFromMessage(this);
|
||||||
|
@$core.Deprecated(
|
||||||
|
'Using this can add significant overhead to your binary. '
|
||||||
|
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||||
|
'Will be removed in next major version')
|
||||||
|
PingResult copyWith(void Function(PingResult) updates) => super.copyWith((message) => updates(message as PingResult)) as PingResult;
|
||||||
|
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PingResult create() => PingResult._();
|
||||||
|
PingResult createEmptyInstance() => create();
|
||||||
|
static $pb.PbList<PingResult> createRepeated() => $pb.PbList<PingResult>();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PingResult getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PingResult>(create);
|
||||||
|
static PingResult? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.String get pong => $_getSZ(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set pong($core.String v) { $_setString(0, v); }
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasPong() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearPong() => clearField(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
|
||||||
|
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');
|
11
lib/generated/grpc/app.pbenum.dart
Normal file
11
lib/generated/grpc/app.pbenum.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
//
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: app.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
|
||||||
|
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||||
|
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||||
|
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||||
|
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||||
|
|
59
lib/generated/grpc/app.pbgrpc.dart
Normal file
59
lib/generated/grpc/app.pbgrpc.dart
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: app.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
|
||||||
|
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||||
|
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||||
|
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||||
|
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||||
|
|
||||||
|
import 'dart:async' as $async;
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
|
import 'package:grpc/service_api.dart' as $grpc;
|
||||||
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
|
import 'app.pb.dart' as $0;
|
||||||
|
|
||||||
|
export 'app.pb.dart';
|
||||||
|
|
||||||
|
@$pb.GrpcServiceName('PingService')
|
||||||
|
class PingServiceClient extends $grpc.Client {
|
||||||
|
static final _$pingServer = $grpc.ClientMethod<$0.PingRequest, $0.PingResult>(
|
||||||
|
'/PingService/PingServer',
|
||||||
|
($0.PingRequest value) => value.writeToBuffer(),
|
||||||
|
($core.List<$core.int> value) => $0.PingResult.fromBuffer(value));
|
||||||
|
|
||||||
|
PingServiceClient($grpc.ClientChannel channel,
|
||||||
|
{$grpc.CallOptions? options,
|
||||||
|
$core.Iterable<$grpc.ClientInterceptor>? interceptors})
|
||||||
|
: super(channel, options: options,
|
||||||
|
interceptors: interceptors);
|
||||||
|
|
||||||
|
$grpc.ResponseFuture<$0.PingResult> pingServer($0.PingRequest request, {$grpc.CallOptions? options}) {
|
||||||
|
return $createUnaryCall(_$pingServer, request, options: options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@$pb.GrpcServiceName('PingService')
|
||||||
|
abstract class PingServiceBase extends $grpc.Service {
|
||||||
|
$core.String get $name => 'PingService';
|
||||||
|
|
||||||
|
PingServiceBase() {
|
||||||
|
$addMethod($grpc.ServiceMethod<$0.PingRequest, $0.PingResult>(
|
||||||
|
'PingServer',
|
||||||
|
pingServer_Pre,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
($core.List<$core.int> value) => $0.PingRequest.fromBuffer(value),
|
||||||
|
($0.PingResult value) => value.writeToBuffer()));
|
||||||
|
}
|
||||||
|
|
||||||
|
$async.Future<$0.PingResult> pingServer_Pre($grpc.ServiceCall call, $async.Future<$0.PingRequest> request) async {
|
||||||
|
return pingServer(call, await request);
|
||||||
|
}
|
||||||
|
|
||||||
|
$async.Future<$0.PingResult> pingServer($grpc.ServiceCall call, $0.PingRequest request);
|
||||||
|
}
|
39
lib/generated/grpc/app.pbjson.dart
Normal file
39
lib/generated/grpc/app.pbjson.dart
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: app.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
|
||||||
|
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||||
|
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||||
|
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||||
|
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||||
|
|
||||||
|
import 'dart:convert' as $convert;
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
import 'dart:typed_data' as $typed_data;
|
||||||
|
|
||||||
|
@$core.Deprecated('Use pingRequestDescriptor instead')
|
||||||
|
const PingRequest$json = {
|
||||||
|
'1': 'PingRequest',
|
||||||
|
'2': [
|
||||||
|
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `PingRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List pingRequestDescriptor = $convert.base64Decode(
|
||||||
|
'CgtQaW5nUmVxdWVzdBISCgRuYW1lGAEgASgJUgRuYW1l');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use pingResultDescriptor instead')
|
||||||
|
const PingResult$json = {
|
||||||
|
'1': 'PingResult',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pong', '3': 1, '4': 1, '5': 9, '10': 'pong'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `PingResult`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List pingResultDescriptor = $convert.base64Decode(
|
||||||
|
'CgpQaW5nUmVzdWx0EhIKBHBvbmcYASABKAlSBHBvbmc=');
|
||||||
|
|
@ -119,7 +119,7 @@ class AboutUI extends BaseUI<AboutUIModel> {
|
|||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
launchUrlString(
|
launchUrlString(
|
||||||
"https://github.com/xkeyC/StarCitizenToolBox");
|
"https://github.com/StarCitizenToolBox/app");
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -147,7 +147,7 @@ class HomeUI extends BaseUI<HomeUIModel> {
|
|||||||
? null
|
? null
|
||||||
: () => model.launchRSI(),
|
: () => model.launchRSI(),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(6),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
model.isCurGameRunning
|
model.isCurGameRunning
|
||||||
? FluentIcons.stop_solid
|
? FluentIcons.stop_solid
|
||||||
@ -161,7 +161,7 @@ class HomeUI extends BaseUI<HomeUIModel> {
|
|||||||
const SizedBox(width: 12),
|
const SizedBox(width: 12),
|
||||||
Button(
|
Button(
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.all(8.0),
|
padding: EdgeInsets.all(6),
|
||||||
child: Icon(FluentIcons.folder_open),
|
child: Icon(FluentIcons.folder_open),
|
||||||
),
|
),
|
||||||
onPressed: () => model.openDir(model.scInstalledPath)),
|
onPressed: () => model.openDir(model.scInstalledPath)),
|
||||||
|
@ -48,7 +48,7 @@ class IndexUI extends BaseUI<IndexUIModel> {
|
|||||||
pane: NavigationPane(
|
pane: NavigationPane(
|
||||||
selected: model.curIndex,
|
selected: model.curIndex,
|
||||||
items: getNavigationPaneItems(model),
|
items: getNavigationPaneItems(model),
|
||||||
size: const NavigationPaneSize(openWidth: 160),
|
size: const NavigationPaneSize(openWidth: 64),
|
||||||
),
|
),
|
||||||
paneBodyBuilder: (item, child) {
|
paneBodyBuilder: (item, child) {
|
||||||
// final name =
|
// final name =
|
||||||
@ -97,8 +97,20 @@ class IndexUI extends BaseUI<IndexUIModel> {
|
|||||||
return [
|
return [
|
||||||
for (final kv in menus.entries)
|
for (final kv in menus.entries)
|
||||||
PaneItem(
|
PaneItem(
|
||||||
icon: Icon(kv.key),
|
icon: Padding(
|
||||||
title: Text(kv.value),
|
padding: const EdgeInsets.only(top: 6, bottom: 6, left: 4),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Icon(kv.key, size: 18),
|
||||||
|
const SizedBox(height: 3),
|
||||||
|
Text(
|
||||||
|
kv.value,
|
||||||
|
style: const TextStyle(fontSize: 11),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// title: Text(kv.value),
|
||||||
body: const SizedBox.shrink(),
|
body: const SizedBox.shrink(),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
model.onIndexMenuTap(kv.value);
|
model.onIndexMenuTap(kv.value);
|
||||||
|
@ -29,7 +29,7 @@ class ToolsUI extends BaseUI<ToolsUIModel> {
|
|||||||
onPressed: model.working ? null : model.loadData,
|
onPressed: model.working ? null : model.loadData,
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
top: 32, bottom: 32, left: 12, right: 12),
|
top: 30, bottom: 30, left: 12, right: 12),
|
||||||
child: Icon(FluentIcons.refresh),
|
child: Icon(FluentIcons.refresh),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -197,7 +197,7 @@ class ToolsUI extends BaseUI<ToolsUIModel> {
|
|||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Button(
|
Button(
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.all(8.0),
|
padding: EdgeInsets.all(6),
|
||||||
child: Icon(FluentIcons.folder_open),
|
child: Icon(FluentIcons.folder_open),
|
||||||
),
|
),
|
||||||
onPressed: () => model.openDir(model.scInstalledPath))
|
onPressed: () => model.openDir(model.scInstalledPath))
|
||||||
@ -234,7 +234,7 @@ class ToolsUI extends BaseUI<ToolsUIModel> {
|
|||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Button(
|
Button(
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.all(8.0),
|
padding: EdgeInsets.all(6),
|
||||||
child: Icon(FluentIcons.folder_open),
|
child: Icon(FluentIcons.folder_open),
|
||||||
),
|
),
|
||||||
onPressed: () => model.openDir(model.rsiLauncherInstalledPath))
|
onPressed: () => model.openDir(model.rsiLauncherInstalledPath))
|
||||||
|
@ -64,6 +64,8 @@ dependencies:
|
|||||||
hexcolor: ^3.0.1
|
hexcolor: ^3.0.1
|
||||||
dart_rss: ^3.0.1
|
dart_rss: ^3.0.1
|
||||||
html: ^0.15.4
|
html: ^0.15.4
|
||||||
|
protobuf: ^3.1.0
|
||||||
|
grpc: ^3.2.4
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
http: ^1.1.2
|
http: ^1.1.2
|
||||||
|
1
update_grpc.bat
Normal file
1
update_grpc.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
protoc --dart_out=grpc:lib/generated/grpc -I../sctoolbox_grpc/protos/ ../sctoolbox_grpc/protos/*.proto
|
Loading…
Reference in New Issue
Block a user