Flutter 颤振-创建一个小部件,用特定值扩展TextField

Flutter 颤振-创建一个小部件,用特定值扩展TextField,flutter,overriding,textfield,Flutter,Overriding,Textfield,目前,我正在我的文本字段中研究一种直接将罗马文字翻译成平假名的方法,我已经设法找到了一些可行的方法: class RomajiTextInput extends StatefulWidget{ final bool mustConvertToKana; const RomajiTextInput({Key key, this.mustConvertToKana}) : super(key: key); @override State<StatefulWidget>

目前,我正在我的文本字段中研究一种直接将罗马文字翻译成平假名的方法,我已经设法找到了一些可行的方法:

class RomajiTextInput extends StatefulWidget{
  final bool mustConvertToKana;

  const RomajiTextInput({Key key, this.mustConvertToKana}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _RomajiTextInputState();
}


class _RomajiTextInputState extends State<RomajiTextInput> {

  TextEditingController _titleEditingController;
  TextEditingController _hiddenTitleEditingController;
  String previousValue = "";

  @override
  void initState() {
    super.initState();
    _titleEditingController = new TextEditingController();
    _hiddenTitleEditingController = new TextEditingController();
  }

  @override
  void dispose() {
    super.dispose();
    _titleEditingController.clear();
    _hiddenTitleEditingController.clear();
  }




  void onConversionChanged(String text){
    if (widget.mustConvertToKana){
      _hiddenTitleEditingController.text = getRomConversion(text, onlyRomaji: false);
      String japanese = getJapaneseTranslation(_hiddenTitleEditingController.text, hasSpace: true);
      int cursor = getCursorPosition(previousValue, japanese);
      setState(() {
        _titleEditingController.text = japanese;
        _titleEditingController.selection = TextSelection.fromPosition(TextPosition(offset: japanese.length));
        previousValue = japanese;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _titleEditingController,
      onChanged: (text){
        onConversionChanged(text);
      },
      decoration: InputDecoration(
          labelText: 'Question',
          labelStyle: TextStyle(fontSize: 20),
          hintText:
          'Enter a question / a word to remember'),
    );
  }
}
我打赌有一种方法可以做到这一点,但扩展TextField小部件并没有让我有任何进展。。。 提前感谢:)

RomajiTextInput(
  controller: myChildController,
  onChanged: (text){print('text');} //And still convert to hiragana thanks to "onConversionChanged"
  decoration: InputDecoration(...) //All options that have not been mentioned are kept otherwise just added
)