mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-16 23:04:22 +01:00
68 lines
1.6 KiB
Dart
68 lines
1.6 KiB
Dart
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import 'package:server_box/data/res/store.dart';
|
|
import 'package:xterm/core.dart';
|
|
|
|
part 'virtual_keyboard.g.dart';
|
|
part 'virtual_keyboard.freezed.dart';
|
|
|
|
@freezed
|
|
abstract class VirtKeyState with _$VirtKeyState {
|
|
const factory VirtKeyState({
|
|
@Default(false) final bool ctrl,
|
|
@Default(false) final bool alt,
|
|
@Default(false) final bool shift,
|
|
}) = _VirtKeyState;
|
|
}
|
|
|
|
@riverpod
|
|
class VirtKeyboard extends _$VirtKeyboard implements TerminalInputHandler {
|
|
@override
|
|
VirtKeyState build() {
|
|
return const VirtKeyState();
|
|
}
|
|
|
|
bool get ctrl => state.ctrl;
|
|
bool get alt => state.alt;
|
|
bool get shift => state.shift;
|
|
|
|
void setCtrl(bool value) {
|
|
if (value != state.ctrl) {
|
|
state = state.copyWith(ctrl: value);
|
|
}
|
|
}
|
|
|
|
void setAlt(bool value) {
|
|
if (value != state.alt) {
|
|
state = state.copyWith(alt: value);
|
|
}
|
|
}
|
|
|
|
void setShift(bool value) {
|
|
if (value != state.shift) {
|
|
state = state.copyWith(shift: value);
|
|
}
|
|
}
|
|
|
|
void reset(TerminalKeyboardEvent e) {
|
|
state = state.copyWith(
|
|
ctrl: e.ctrl ? false : state.ctrl,
|
|
alt: e.alt ? false : state.alt,
|
|
shift: e.shift ? false : state.shift,
|
|
);
|
|
}
|
|
|
|
@override
|
|
String? call(TerminalKeyboardEvent event) {
|
|
final e = event.copyWith(
|
|
ctrl: event.ctrl || state.ctrl,
|
|
alt: event.alt || state.alt,
|
|
shift: event.shift || state.shift,
|
|
);
|
|
if (Stores.setting.sshVirtualKeyAutoOff.fetch()) {
|
|
reset(e);
|
|
}
|
|
return defaultInputHandler.call(e);
|
|
}
|
|
}
|