Как вернуть входное значение из расширенного дочернего виджета в родительский виджет во флаттере - PullRequest
1 голос
/ 29 апреля 2020

У меня проблемы с пониманием того, как передать входную информацию из расширенного дочернего виджета обратно в его родительский виджет. Я пытался создать сеттер в родительском виджете, но я не могу вызвать его через «ParentWidget.of (context) .setterName».

Каков наилучший способ передачи информации ввода пользователя из дочернего виджета назад к родителю?

Спасибо за помощь

class SignInMobilePortrait extends StatefulWidget {
  @override
  _SignInMobilePortraitState createState() => _SignInMobilePortraitState();
}

class _SignInMobilePortraitState extends State<SignInMobilePortrait> {

  //text field state
  String _email = '';

  set email(String value) => setState(() => _email = value);

  ...

  LoginCredentials(),

  ...

}

class LoginCredentials extends StatelessWidget {

  LoginCredentials({
    Key key,
  }) : super(key: key);

  Widget build(BuildContext context) {    
    return Container(

     ...

                onChanged: (value) {
                 //CHANGE EMAIL VALUE HERE;
                },
     ...
}

1 Ответ

1 голос
/ 29 апреля 2020

Правильный способ сделать это - передать TextEditingController от SignInMobilePortrait до LoginCredentials:

class _SignInMobilePortraitState extends State<SignInMobilePortrait> {

  final _emailController = TextEditingController();

  LoginCredentials(_emailController),

  ...
  // Access _emailController.text somewhere

}


class LoginCredentials extends StatelessWidget {
  final TextEditingController controller;
  LoginCredentials({
    Key key,
    @required this.controller,
  }) : super(key: key);

  Widget build(BuildContext context) {    
    return TextField(
     ...
     controller: controller,
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...