Ввод текстового поля удвоился

#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.предварительно исправлено на данный момент. По крайней мере, это не было ошибкой в моем коде 😀