【发布时间】:2021-11-18 02:30:04
【问题描述】:
我有一个Container 将CupertinoTextField 包裹在Stack 中。
当我在文本字段上写完后,我按下一个按钮并用FocusNode 清除焦点,然后重新加载 UI。
我想为一个用例将颜色容器重新加载为 null,但是当我重新加载时,文本字段似乎“已删除”。然后,当我再次单击 textfield 时,某些东西阻塞了 textfield 。只有在第二次单击时,我才能检索文本字段焦点。
这是我上面描述的预览:
这是完整的代码:
class EditorTextPage extends StatefulWidget {
const EditorTextPage({Key? key}) : super(key: key);
@override
_EditorTextPageState createState() => _EditorTextPageState();
}
class _EditorTextPageState extends State<EditorTextPage> {
FocusNode focus = FocusNode();
bool displayEditor = true;
@override
void initState() {
focus.addListener(() {
if (focus.hasFocus) {
setState(() {
displayEditor = true;
});
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
color: displayEditor ? Colors.red : null,
child: SafeArea(
bottom: false,
child: Stack(
children: [
Positioned(
top: 100,
left: 200,
child: IntrinsicWidth(
child: CupertinoTextField(
focusNode: focus,
minLines: 1,
maxLines: 3,
padding: EdgeInsets.all(10),
cursorColor: Colors.white,
decoration: BoxDecoration(color: Colors.lightBlueAccent),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
margin: EdgeInsets.only(bottom: 50),
child: CupertinoButton(
color: Colors.black,
onPressed: () {
setState(() {
if (focus.hasFocus) {
focus.unfocus();
displayEditor = false;
}
});
},
child: Text(
"DONE",
),
),
)),
],
),
),
);
}
}
为什么会这样?以及如何解决?
【问题讨论】:
-
@pskink 感谢您的回复。根据answers & cmets,我意识到我以错误的方式提出了这个问题,这不是我所期望的。我知道如何以多种方式在图像上应用过滤器。我必须以不同的方式重新询问
-
@pskink 谢谢,这正是我想要的。如果你愿意,我可以重新写一个问题并接受你的代码。我可以看到您正在为孩子设置动画以模仿我的行为,尽管这将是代码重载,但我错了。再次感谢非常有用
-
完成了,谢谢。我正在尝试在视频上做同样的事情,但我必须使用 FFmpeg 来应用过滤器,然后我想它也不能用这种方式完成?否则只在上方移动覆盖颜色,稍后在选择应用时检索它
-
我不知道
FFmpeg是如何在flutter上实现的......
标签: flutter dart containers focus setstate