#65 new: custom keyboard type

This commit is contained in:
lollipopkit
2023-06-23 16:59:27 +08:00
parent 743e5bfbff
commit f0b31a9b08
15 changed files with 139 additions and 39 deletions

View File

@@ -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();
}
}
}

View File

@@ -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);

View File

@@ -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();
},
);
}
}

View File

@@ -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,