mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-18 15:54:35 +01:00
#65 new: custom keyboard type
This commit is contained in:
@@ -292,12 +292,12 @@ class _HomePageState extends State<HomePage>
|
||||
|
||||
@override
|
||||
Future<void> afterFirstLayout(BuildContext context) async {
|
||||
doUpdate(context);
|
||||
await GetIt.I.allReady();
|
||||
await _serverProvider.loadLocalData();
|
||||
await _serverProvider.refreshData();
|
||||
await doUpdate(context);
|
||||
if (!Analysis.enabled) {
|
||||
await Analysis.init();
|
||||
Analysis.init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +100,7 @@ class _ProcessPageState extends State<ProcessPage> {
|
||||
} else {
|
||||
child = ListView.builder(
|
||||
itemCount: _result.procs.length,
|
||||
padding: const EdgeInsets.symmetric(vertical: 3, horizontal: 7),
|
||||
itemBuilder: (ctx, idx) {
|
||||
final proc = _result.procs[idx];
|
||||
return _buildListItem(proc);
|
||||
|
||||
@@ -35,13 +35,13 @@ class SettingPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _SettingPageState extends State<SettingPage> {
|
||||
final themeKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final startPageKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final updateIntervalKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final maxRetryKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final fontSizeKey = GlobalKey<PopupMenuButtonState<double>>();
|
||||
final localeKey = GlobalKey<PopupMenuButtonState<String>>();
|
||||
final editorThemeKey = GlobalKey<PopupMenuButtonState<String>>();
|
||||
final _themeKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _startPageKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _updateIntervalKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _maxRetryKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _localeKey = GlobalKey<PopupMenuButtonState<String>>();
|
||||
final _editorThemeKey = GlobalKey<PopupMenuButtonState<String>>();
|
||||
final _keyboardTypeKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
|
||||
late final SettingStore _setting;
|
||||
late final ServerProvider _serverProvider;
|
||||
@@ -56,6 +56,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
final _fontSize = ValueNotifier(0.0);
|
||||
final _localeCode = ValueNotifier('');
|
||||
final _editorTheme = ValueNotifier('');
|
||||
final _keyboardType = ValueNotifier(0);
|
||||
|
||||
final _pushToken = ValueNotifier<String?>(null);
|
||||
|
||||
@@ -79,6 +80,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
_selectedColorValue.value = _setting.primaryColor.fetch()!;
|
||||
_fontSize.value = _setting.termFontSize.fetch()!;
|
||||
_editorTheme.value = _setting.editorTheme.fetch()!;
|
||||
_keyboardType.value = _setting.keyboardType.fetch()!;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -157,6 +159,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
_buildFont(),
|
||||
_buildTermFontSize(),
|
||||
_buildSSHVirtualKeyAutoOff(),
|
||||
_buildKeyboardType(),
|
||||
].map((e) => RoundRectCard(e)).toList(),
|
||||
);
|
||||
}
|
||||
@@ -212,12 +215,12 @@ class _SettingPageState extends State<SettingPage> {
|
||||
style: grey,
|
||||
),
|
||||
onTap: () {
|
||||
updateIntervalKey.currentState?.showButtonMenu();
|
||||
_updateIntervalKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
listenable: _updateInterval,
|
||||
build: () => PopupMenuButton(
|
||||
key: updateIntervalKey,
|
||||
key: _updateIntervalKey,
|
||||
itemBuilder: (_) => items,
|
||||
initialValue: _updateInterval.value,
|
||||
onSelected: (int val) {
|
||||
@@ -291,12 +294,12 @@ class _SettingPageState extends State<SettingPage> {
|
||||
_s.launchPage,
|
||||
),
|
||||
onTap: () {
|
||||
startPageKey.currentState?.showButtonMenu();
|
||||
_startPageKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
listenable: _launchPageIdx,
|
||||
build: () => PopupMenuButton(
|
||||
key: startPageKey,
|
||||
key: _startPageKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _launchPageIdx.value,
|
||||
onSelected: (int idx) {
|
||||
@@ -335,11 +338,11 @@ class _SettingPageState extends State<SettingPage> {
|
||||
),
|
||||
subtitle: Text(help, style: grey),
|
||||
onTap: () {
|
||||
maxRetryKey.currentState?.showButtonMenu();
|
||||
_maxRetryKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
build: () => PopupMenuButton(
|
||||
key: maxRetryKey,
|
||||
key: _maxRetryKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _maxRetryCount.value,
|
||||
onSelected: (int val) {
|
||||
@@ -374,12 +377,12 @@ class _SettingPageState extends State<SettingPage> {
|
||||
_s.themeMode,
|
||||
),
|
||||
onTap: () {
|
||||
themeKey.currentState?.showButtonMenu();
|
||||
_themeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
listenable: _nightMode,
|
||||
build: () => PopupMenuButton(
|
||||
key: themeKey,
|
||||
key: _themeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _nightMode.value,
|
||||
onSelected: (int idx) {
|
||||
@@ -601,12 +604,12 @@ class _SettingPageState extends State<SettingPage> {
|
||||
return ListTile(
|
||||
title: Text(_s.language),
|
||||
onTap: () {
|
||||
localeKey.currentState?.showButtonMenu();
|
||||
_localeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
listenable: _localeCode,
|
||||
build: () => PopupMenuButton(
|
||||
key: localeKey,
|
||||
key: _localeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _localeCode.value,
|
||||
onSelected: (String idx) {
|
||||
@@ -644,7 +647,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
trailing: ValueBuilder(
|
||||
listenable: _editorTheme,
|
||||
build: () => PopupMenuButton(
|
||||
key: editorThemeKey,
|
||||
key: _editorThemeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _editorTheme.value,
|
||||
onSelected: (String idx) {
|
||||
@@ -658,7 +661,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
editorThemeKey.currentState?.showButtonMenu();
|
||||
_editorThemeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -681,4 +684,54 @@ class _SettingPageState extends State<SettingPage> {
|
||||
trailing: buildSwitch(context, _setting.fullScreenJitter),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildKeyboardType() {
|
||||
const List<String> names = <String>[
|
||||
'text',
|
||||
'multiline',
|
||||
'number',
|
||||
'phone',
|
||||
'datetime',
|
||||
'emailAddress',
|
||||
'url',
|
||||
'visiblePassword',
|
||||
'name',
|
||||
'address',
|
||||
'none',
|
||||
];
|
||||
if (names.length != TextInputType.values.length) {
|
||||
throw 'names.length != TextInputType.values.length';
|
||||
}
|
||||
final items = TextInputType.values.map(
|
||||
(key) {
|
||||
return PopupMenuItem<int>(
|
||||
value: key.index,
|
||||
child: Text(names[key.index]),
|
||||
);
|
||||
},
|
||||
).toList();
|
||||
return ListTile(
|
||||
title: Text(_s.keyboardType),
|
||||
subtitle: Text(_s.keyboardCompatibility, style: grey),
|
||||
trailing: ValueBuilder(
|
||||
listenable: _keyboardType,
|
||||
build: () => PopupMenuButton<int>(
|
||||
key: _keyboardTypeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _keyboardType.value,
|
||||
onSelected: (idx) {
|
||||
_keyboardType.value = idx;
|
||||
_setting.keyboardType.put(idx);
|
||||
},
|
||||
child: Text(
|
||||
names[_keyboardType.value],
|
||||
style: textSize15,
|
||||
),
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
_keyboardTypeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ class _SSHPageState extends State<SSHPage> {
|
||||
late S _s;
|
||||
late TerminalStyle _terminalStyle;
|
||||
late TerminalTheme _terminalTheme;
|
||||
late TextInputType _keyboardType;
|
||||
|
||||
var _isDark = false;
|
||||
|
||||
@@ -60,6 +61,7 @@ class _SSHPageState extends State<SSHPage> {
|
||||
fontSize: _setting.termFontSize.fetch()!,
|
||||
);
|
||||
_terminalStyle = TerminalStyle.fromTextStyle(textStyle);
|
||||
_keyboardType = TextInputType.values[_setting.keyboardType.fetch()!];
|
||||
initTerminal();
|
||||
}
|
||||
|
||||
@@ -96,8 +98,6 @@ class _SSHPageState extends State<SSHPage> {
|
||||
}
|
||||
|
||||
Widget _buildBody() {
|
||||
final keyboardType =
|
||||
isIOS ? TextInputType.emailAddress : TextInputType.visiblePassword;
|
||||
return SizedBox(
|
||||
height: _media.size.height -
|
||||
_virtualKeyboardHeight -
|
||||
@@ -106,7 +106,7 @@ class _SSHPageState extends State<SSHPage> {
|
||||
child: TerminalView(
|
||||
_terminal,
|
||||
controller: _terminalController,
|
||||
keyboardType: keyboardType,
|
||||
keyboardType: _keyboardType,
|
||||
textStyle: _terminalStyle,
|
||||
theme: _terminalTheme,
|
||||
deleteDetection: isIOS,
|
||||
|
||||
Reference in New Issue
Block a user