gpt4 book ai didi

Flutter:一个FocusNode被丢弃后被使用

转载 作者:行者123 更新时间:2023-12-04 11:52:21 26 4
gpt4 key购买 nike

我在一个有状态小部件中有一个简单的 Flutter 表单,其中包含一堆文本字段来捕获信用卡详细信息。当我显示此表单时,点击第一个字段,在其中输入一些内容,然后点击第二个字段,焦点不会转移到第二个字段,光标停留在第一个字段,即使两个字段都显示为焦点(边框是两者都可见),当我输入时,它进入第一个字段。在第二个字段中输入内容的唯一方法是长按它,就像我想在其中粘贴一些东西一样。在控制台中,我看到了这个:

[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: A FocusNode was used after being disposed.
Once you have called dispose() on a FocusNode, it can no longer be used.
#0 ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:117:9)
#1 ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6)
#2 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:234:12)
#3 FocusNode._notify (package:flutter/src/widgets/focus_manager.dart:1052:5)
#4 FocusManager._applyFocusChange (package:flutter/src/widgets/focus_manager.dart:1800:12)
#5 _rootRun (dart:async/zone.dart:1346:47)
#6 _CustomZone.run (dart:async/zone.dart:1258:19)
#7 _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
问题是没有一个字段具有焦点节点集,因此 Flutter 表单状态内部似乎发生了一些错误。有人见过这个吗?
请注意,对我来说,它发生在网络和移动设备上,但并非始终如一。
这是 problematic form的代码.
这是一个屏幕截图,说明 2 个字段同时具有焦点,并且光标停留在第一个字段中。当我在键盘上输入内容时,它会指向第一个字段。这是在物理 iPhone 设备上运行的。
enter image description here
这是被称为 onPressed 的函数的 ElevatedButton显示此表格:
Future<void> _addPaymentMethod(BuildContext context) async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Scaffold(
body: CardForm(),
),
),
);
}

最佳答案

我认为问题在于使用 Focus 小部件。
您应该使用 FocusNode 并将此 FocusNode 作为 TextField(您的 CardCvcFormField)的命名参数之一传递。
您可以将监听器附加到 FocusNode 并获得焦点可见性。

FocusNode _cvcFocusNode;

@override
void initState() {
super.initState();
_cvcFocusNode = FocusNode();
_cvcFocusNode.addListener(_onCvcFormFieldFocusChanged);
}

void _onCvcFormFieldFocusChanged() {
setState(() => cvcHasFocus = _cvcFocusNode?.hasFocus ?? false);
}

@override
void dispose() {
_cvcFocusNode?.removeListener(_onCvcFormFieldFocusChanged);
_cvcFocusNode?.dispose();
_cvcFocusNode = null;
super.dispose();
}

关于Flutter:一个FocusNode被丢弃后被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68443245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com