#flutter
Вопрос:
Я управляю содержимым виджета редактируемого текста из другого виджета, но я хотел бы показать курсор, но это кажется невозможным без фокусировки текстового поля.
Вот несколько примеров из кода — Widget1 требует фокусировки.
Родительский виджет (Перестраивает второй виджет с помощью анимированного конструктора)
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidgetScreen> {
late ValueNotifier<String> email = ValueNotifier<String>('');
@override
void dispose() {
email.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
children: [
Widget1(
onChanged: (value){
if(value != null){
String newEmailValue = value['email']!;
email.value = newEmailValue;
}
},
),
AnimatedBuilder(
animation: Listenable.merge([email]),
builder: (BuildContext context, _){
return Widget2(
email: email.value,
);
}
),
],
),
}
}
2-й Виджет:
class Widget2 extends StatefulWidget {
final String email;
const Widget2({
required this.email,
});
@override
_Widget2State createState() => _Widget2State();
}
class _Widget2State extends State<Widget2> {
final TextEditingController _email = TextEditingController();
FocusNode _nodeEmail = FocusNode();
@override
Widget build(BuildContext context) {
_email.value = _email.value.copyWith( //Everytime "email" updates - this is rebuilt
text: widget.email,
selection: TextSelection.collapsed(offset: widget.emailSelectionOffset),
);
return EditableText(
controller: _email,
autofocus: true,
focusNode: _nodeEmail,
cursorColor: Colors.white,
backgroundCursorColor: Colors.white,
style: TextStyle(color: Colors.white),
readOnly: true,
showCursor: true,
),
}
}