【发布时间】:2021-10-18 14:29:33
【问题描述】:
在 Windows 项目的 Flutter 桌面中,我在 statefulWidget 中有一个 TextField 小部件,并附加了一个控制器。
late TextEditingController searchController;
@override
void initState() {
super.initState();
searchController = TextEditingController();
}
@override
void dispose() {
searchController.dispose();
super.dispose();
}
TextField(
keyboardType: TextInputType.text,
controller: searchController,
decoration: defaultTextFieldDecoration.copyWith(hintText: "Type to Search"),
style: textFieldStyle,
onChanged: (value) {},
),
现在,当我在文本字段中输入诸如“abc”之类的内容时,每个键都会像“aabbcc”一样输入两次,我不知道为什么。我已经多次使用 TextFields,但从未发生过。
我的键盘也不是问题,因为我可以毫无问题地输入它:D
编辑:这是重现此问题的完整示例。
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: Main()));
}
class Main extends StatefulWidget {
const Main({Key? key}) : super(key: key);
@override
_MainState createState() => _MainState();
}
class _MainState extends State<Main> {
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: TextFieldTestWidget(),
),
);
}
}
class TextFieldTestWidget extends StatefulWidget {
const TextFieldTestWidget({Key? key}) : super(key: key);
@override
_TextFieldTestWidgetState createState() => _TextFieldTestWidgetState();
}
class _TextFieldTestWidgetState extends State<TextFieldTestWidget> {
TextEditingController controller = TextEditingController();
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SizedBox(
width: 300,
height: 100,
child: TextField(
controller: controller,
),
);
}
}
再次编辑:
发现它与初始文本值有关...我只是不明白究竟是什么。当我将 TextEditingController 更改为 TextEditingController(text:"") 时,它会以某种方式工作。我认为实例化 TextEditingControllers 在某种程度上被破坏了。
【问题讨论】:
-
运行
flutter clean,然后再试一次 -
@GNassro 没有帮助
-
你的代码看起来很棒,你用的是什么版本的颤振?
-
@StewieGriffin(顺便说一句:D)提供的示例是我也遇到的完整代码。
-
也许这是一个必须在github-flutter发布的问题
标签: flutter dart flutter-desktop