Я пытаюсь создать свой собственный виджет TextField с выпадающим списком. Я хочу привести аргументы контроллера и focusnode. Я не хочу, чтобы они были обязательными, но если это не так, я не могу установить их для Controller()
и FocusNode()
. И я не могу иметь их со значением null
, потому что я уже работаю с ними в классе. Я не уверен, как это сделать. Вот что у меня есть:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class DropdownText extends StatefulWidget {
final TextEditingController controller;
final FocusNode focusNode;
const DropdownText({Key key, this.controller, this.focusNode}) : super(key: key);
@override
_DropdownTextState createState() => _DropdownTextState();
}
class _DropdownTextState extends State<DropdownText> {
bool _show = false;
@override
void initState() {
super.initState();
widget.focusNode.addListener(listener);
}
void listener(){
if(widget.focusNode.hasFocus){
setState(() {
_show = true;
});
}else{
setState(() {
_show = false;
});
}
}
}
И я уже работаю с текстом моего TextField (используя controller.text
) внутри этого класса, когда кто-то касается одного из вариантов изменения написанного на нем. Могу ли я предоставить пользователю моего виджета доступ к controller
и focusNode
так же, как это делает TextField?
PS: Engli sh не мой родной язык, и я начало программирования с помощью OOP с флаттером.
Редактировать:
После решения здесь - ссылка на репозиторий github.