optimization

This commit is contained in:
xkeyC 2024-11-07 20:16:08 +08:00
parent 56208e1909
commit 9789b9e1a9
6 changed files with 63 additions and 6 deletions

View File

@ -139,7 +139,7 @@ class InputMethodDialogUI extends HookConsumerWidget {
context.pop(); context.pop();
}), }),
const SizedBox(width: 12), const SizedBox(width: 12),
Text("社区输入法"), Text("社区输入法(实验性)"),
Spacer(), Spacer(),
Row( Row(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
@ -183,7 +183,7 @@ class InputMethodDialogUI extends HookConsumerWidget {
// ignore: use_build_context_synchronously // ignore: use_build_context_synchronously
await serverModel.startServer().unwrap(context: context); await serverModel.startServer().unwrap(context: context);
if (!context.mounted) return; if (!context.mounted) return;
showDialog( await showDialog(
context: context, context: context,
builder: (BuildContext context) => ServerQrDialogUI(), builder: (BuildContext context) => ServerQrDialogUI(),
); );

View File

@ -7,7 +7,7 @@ part of 'input_method_dialog_ui_model.dart';
// ************************************************************************** // **************************************************************************
String _$inputMethodDialogUIModelHash() => String _$inputMethodDialogUIModelHash() =>
r'93440d8f9c5372d5350ceaa8cb00a1b0d3b0046e'; r'1c7193891c609715b2c7ee1b34f67aa26b18d303';
/// See also [InputMethodDialogUIModel]. /// See also [InputMethodDialogUIModel].
@ProviderFor(InputMethodDialogUIModel) @ProviderFor(InputMethodDialogUIModel)

View File

@ -9,6 +9,7 @@ import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as shelf_io; import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:starcitizen_doctor/common/conf/const_conf.dart'; import 'package:starcitizen_doctor/common/conf/const_conf.dart';
import 'package:starcitizen_doctor/common/utils/log.dart'; import 'package:starcitizen_doctor/common/utils/log.dart';
import 'package:starcitizen_doctor/ui/home/input_method/server_qr_dialog_ui.dart';
import 'package:starcitizen_doctor/ui/home/localization/localization_ui_model.dart'; import 'package:starcitizen_doctor/ui/home/localization/localization_ui_model.dart';
import 'input_method_dialog_ui_model.dart'; import 'input_method_dialog_ui_model.dart';
@ -57,7 +58,6 @@ class InputMethodServer extends _$InputMethodServer {
Future<void> startServer() async { Future<void> startServer() async {
dPrint("[InputMethodServer] startServer"); dPrint("[InputMethodServer] startServer");
var handler = var handler =
const Pipeline().addMiddleware(logRequests()).addHandler(_onHandler); const Pipeline().addMiddleware(logRequests()).addHandler(_onHandler);
@ -166,6 +166,10 @@ class InputMethodServer extends _$InputMethodServer {
Future<Response> _onHandlerApi(Request request) async { Future<Response> _onHandlerApi(Request request) async {
final path = request.url.path; final path = request.url.path;
if (path == "api") { if (path == "api") {
if (ref.exists(serverQrStateProvider)) {
// ignore: avoid_manual_providers_as_generated_provider_dependency
ref.read(serverQrStateProvider.notifier).popDialog();
}
return Response.ok(json.encode({ return Response.ok(json.encode({
"status": "ok", "status": "ok",
"appVersion": ConstConf.appVersion, "appVersion": ConstConf.appVersion,

View File

@ -6,7 +6,7 @@ part of 'server.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$inputMethodServerHash() => r'4ea07de4bca3268933b78335b670c09e6fac61bc'; String _$inputMethodServerHash() => r'227e0e32cd7b8895f3b108505cd524680afc4126';
/// See also [InputMethodServer]. /// See also [InputMethodServer].
@ProviderFor(InputMethodServer) @ProviderFor(InputMethodServer)

View File

@ -3,9 +3,32 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'server.dart'; import 'server.dart';
part 'server_qr_dialog_ui.g.dart';
@riverpod
class ServerQrState extends _$ServerQrState {
@override
bool build() {
return true;
}
BuildContext? _context;
// ignore: avoid_build_context_in_providers
void setupContext(BuildContext context) {
_context = context;
}
popDialog() {
_context?.pop();
}
}
class ServerQrDialogUI extends HookConsumerWidget { class ServerQrDialogUI extends HookConsumerWidget {
const ServerQrDialogUI({super.key}); const ServerQrDialogUI({super.key});
@ -19,6 +42,10 @@ class ServerQrDialogUI extends HookConsumerWidget {
final index = useState(0); final index = useState(0);
final model = ref.watch(serverQrStateProvider.notifier);
model.setupContext(context);
return ContentDialog( return ContentDialog(
constraints: BoxConstraints( constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .4, maxWidth: MediaQuery.of(context).size.width * .4,
@ -67,7 +94,7 @@ class ServerQrDialogUI extends HookConsumerWidget {
SizedBox(height: 12), SizedBox(height: 12),
Text( Text(
hasMultipleUrls hasMultipleUrls
? "(${index.value + 1} / ${urls.length})" ? "${urls[index.value]} (${index.value + 1} / ${urls.length})"
: urls[index.value], : urls[index.value],
style: TextStyle(fontSize: 13, color: Colors.white.withOpacity(.6)), style: TextStyle(fontSize: 13, color: Colors.white.withOpacity(.6)),
), ),

View File

@ -0,0 +1,26 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'server_qr_dialog_ui.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$serverQrStateHash() => r'06f5ab53e1d6718f2a6eb0078a1adc3778787ed0';
/// See also [ServerQrState].
@ProviderFor(ServerQrState)
final serverQrStateProvider =
AutoDisposeNotifierProvider<ServerQrState, bool>.internal(
ServerQrState.new,
name: r'serverQrStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$serverQrStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ServerQrState = AutoDisposeNotifier<bool>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package