#flutter #dart #flutter-desktop
Вопрос:
В проекте Flutter desktop для Windows у меня есть TextField
виджет в формате StatefulWidget с подключенным к нему контроллером.
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», и я не могу понять, почему. Я много раз использовал текстовые поля, но этого никогда не случалось.
Это также не проблема с моей клавиатурой, так как я могу печатать это без проблем 😀
Изменить: Вот полный пример, чтобы воспроизвести эту проблему.
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 каким-то образом нарушено.
Комментарии:
1. беги
flutter clean
и попробуй еще раз2. @GNassro Не помогло
3. ваш код выглядит великолепно, какую версию flutter вы используете ?
4. @StewieGriffin (хорошее имя, кстати :D) Приведенный пример-это полный код, в котором это происходит и со мной.
5. возможно, это проблема, которую необходимо опубликовать в github-flutter
Ответ №1:
Обновление Flutter с бета-версии 2.4.0-4.2.предварительно> >бета-версия 2.5.0-5.1.предварительно исправлено на данный момент. По крайней мере, это не было ошибкой в моем коде 😀