我正在使用钩子将我的 TextFormField 逻辑移动到钩子类并更改我正在使用提供程序的文本的可见性,但是当点击按钮更改可见性时,我使用 focusNode 将初始焦点移至第一个字段,但是当我点击它时,它会从 TextFormField 中删除整个文本并将焦点更改为第一个字段,如果第一个字段确实有文本,则它不会删除它(我认为它正在重建 UI)
我的钩子文件,
enum Index { email, password }
TextFormField useTextFormField(Index index) {
return use(_CustomHook(index: index));
}
class _CustomHook extends Hook<TextFormField> {
final Index index;
_CustomHook({@required this.index});
@override
_CustomHookState createState() => _CustomHookState();
}
class _CustomHookState extends HookState<TextFormField, _CustomHook> {
Index index;
@override
TextFormField build(BuildContext context) {
final isVisible = Provider.of<VisibilityProvider>(context);
return TextFormField(
decoration: InputDecoration(
hintText: 'some help',
suffixIcon: IconButton(
onPressed: () {
isVisible.changeVisibility();
},
icon: Icon(
isVisible.visible ? Icons.visibility_off : Icons.visibility),
)),
validator: (text) {
if (text.isEmpty) return 'enter something';
return null;
},
obscureText: index == Index.email ? false : isVisible.visible,
);
}
}
提供者文件,
import 'package:flutter/material.dart';
class VisibilityProvider extends ChangeNotifier{
bool _visible = true;
bool get visible => _visible;
void changeVisibility(){
_visible = !_visible;
notifyListeners();
}
}
谁能告诉我在这里做错了什么?