fix: 优化删除账号code传4,修改常见问题文案,禁用输入框悬浮按钮,修复登录ios输入框聚焦问题

This commit is contained in:
speakeloudest 2026-01-22 18:47:56 -08:00
parent ab8eb891cc
commit b96008d6dc
5 changed files with 24 additions and 24 deletions

View File

@ -60,9 +60,9 @@ class HIHelpController extends GetxController {
KRMessage(
title: '设备与绑定问题',
content: [
'在绑定新设备之前请先添加您的邮箱',
'在绑定新设备之前请先添加您的邮箱并设置账户密码',
'Hi快VPN支持最多两台设备同时在线包括一台iOS设备或Android加一台Mac或PC。',
'如超出设备数量限制,最早登陆的同类设备将会自动下线,需要重新登陆,设备限制为系统固定设定,不支持调整。',
'如超出设备数量限制,请先手动移除设备后再进行登录,设备限制为系统固定设定,不支持调整。',
],
),
KRMessage(

View File

@ -58,7 +58,7 @@ class KRDeleteAccountController extends GetxController {
// API email type
final result = await _authApi.kr_sendCode(
account, //
2, //
4, //
);
result.fold(

View File

@ -159,6 +159,7 @@ class KRDeleteAccountView extends GetView<KRDeleteAccountController> {
height: 50.w,
child: TextField(
controller: controller.kr_codeController,
contextMenuBuilder: (context, editableTextState) => const SizedBox.shrink(),
keyboardType: TextInputType.number,
textInputAction: TextInputAction.done,
autofillHints: const [AutofillHints.oneTimeCode],

View File

@ -169,6 +169,7 @@ class KRInviteView extends GetView<KRInviteController> {
RepaintBoundary(
child: TextField(
controller: controller.otherInviteCodeController,
contextMenuBuilder: (context, editableTextState) => const SizedBox.shrink(),
textInputAction: TextInputAction.done,
onSubmitted: (_) => controller.kr_handleBindInviteCode(),
textAlign: TextAlign.center,

View File

@ -89,7 +89,7 @@ class KRLoginView extends GetView<KRLoginController> {
final account = KRAppRunData.getInstance().kr_account.value;
final isDeviceLogin =
account != null && account.startsWith('9000');
final accountText = (account ==null || isDeviceLogin)
final accountText = (account == null || isDeviceLogin)
? '待绑定'
: '${KRAppRunData.getInstance().kr_account.value.toString()}';
@ -125,7 +125,7 @@ class KRLoginView extends GetView<KRLoginController> {
child: Column(
children: [
Obx(() => _buildStandardInputField(
controller: controller.accountController,
textController: controller.accountController,
hintText: '请输入邮箱地址',
suffixes: const [
'@gmail.com',
@ -161,7 +161,7 @@ class KRLoginView extends GetView<KRLoginController> {
///
Widget _buildStandardInputField({
required TextEditingController controller,
required TextEditingController textController,
required String hintText,
bool isPassword = false,
List<String>? suffixes,
@ -173,8 +173,9 @@ class KRLoginView extends GetView<KRLoginController> {
VoidCallback? onEditingComplete,
}) {
return TextField(
controller: controller,
controller: textController,
focusNode: focusNode,
contextMenuBuilder: (context, editableTextState) => const SizedBox.shrink(),
onEditingComplete: onEditingComplete,
obscureText: isPassword,
style: KrAppTextStyle(
@ -217,8 +218,8 @@ class KRLoginView extends GetView<KRLoginController> {
// 使 RawAutocomplete
return SizedBox(
child: RawAutocomplete<String>(
textEditingController: controller,
focusNode: FocusNode(),
textEditingController: textController,
focusNode: this.controller.kr_accountFocusNode,
optionsBuilder: (TextEditingValue textEditingValue) {
final inputText = textEditingValue.text;
@ -228,22 +229,17 @@ class KRLoginView extends GetView<KRLoginController> {
// 1. ()
if (historyEmails != null) {
if (inputText.isEmpty) {
// RawAutocomplete options fieldViewBuilder
// RawAutocomplete optionsBuilder text
// Focus
// RawAutocomplete initialValue? triggerMode
//
options.addAll(historyEmails);
} else {
options.addAll(historyEmails
.where((email) => email.startsWith(inputText)));
options.addAll(
historyEmails.where((email) => email.startsWith(inputText)));
}
}
// 2. ( @ @ )
if (suffixes != null && inputText.isNotEmpty) {
if (!inputText.contains('@')) {
options.addAll(suffixes.map((suffix) => '$inputText$suffix'));
options.addAll(suffixes.map((suffix) => '$inputText$suffix'));
} else {
final atIndex = inputText.indexOf('@');
final prefix = inputText.substring(0, atIndex);
@ -260,15 +256,16 @@ class KRLoginView extends GetView<KRLoginController> {
},
fieldViewBuilder: (
BuildContext context,
TextEditingController textEditingController,
TextEditingController
textEditingController, // This textEditingController is provided by RawAutocomplete
FocusNode focusNode,
VoidCallback onFieldSubmitted,
) {
// 使 controller fieldViewBuilder textEditingController
// controller
// RawAutocomplete textEditingController
// controller RawAutocomplete
// fieldViewBuilder textEditingController
// Here we use the passed in textController, not the textEditingController provided by fieldViewBuilder
// because we need to control the textController externally.
// Note: RawAutocomplete listens to textEditingController by default,
// if we pass our own textController to RawAutocomplete,
// the fieldViewBuilder's textEditingController is actually the one we passed.
return buildTextField(
focusNode: focusNode,
onEditingComplete: onFieldSubmitted,
@ -338,6 +335,7 @@ class KRLoginView extends GetView<KRLoginController> {
height: 50, //
child: TextField(
controller: controller.codeController,
contextMenuBuilder: (context, editableTextState) => const SizedBox.shrink(),
keyboardType: TextInputType.number,
textInputAction: TextInputAction.done,
autofillHints: const [AutofillHints.oneTimeCode],