Flutter: обновление значения с использованием дочернего виджета - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть login_screen родитель, у которого password_textfield как ребенок. Я хотел бы обновить значения email и password в родительском элементе при изменении данных дочернего элемента.

Родительский виджет:

EmailTextField(email, focus, (value) {
                          setState(() {
                            email = value;
                          });
                        })

Дочерний виджет:

import 'package:flutter/material.dart';

class EmailTextField extends StatefulWidget {
  final FocusNode focus;

  String email;

  final Function onChange;

  EmailTextField(this.email, this.focus, this.onChange);

  @override
  _EmailTextFieldState createState() => _EmailTextFieldState();
}

class _EmailTextFieldState extends State<EmailTextField> {

  
  @override
  Widget build(BuildContext context) {
return TextFormField(
  onChanged: (value){
    setState(() {
      widget.email = value;
    });
    widget.onChange(value);
  },
  decoration: InputDecoration(labelText: 'Email'),
  textInputAction: TextInputAction.next,
  keyboardType: TextInputType.emailAddress,
  onFieldSubmitted: (v) {
    FocusScope.of(context).requestFocus(widget.focus);
  },
);
  }
}

1 Ответ

0 голосов
/ 24 апреля 2020

Использование функций обратного вызова.

import 'package:flutter/material.dart';

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String email='email';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          EmailTextField(
            onChanged: (value) {
              setState(
                () {
                  email = value;
                },
              );
            },
          ),
          FlatButton(
            onPressed: () {
              //perform some action here
            },
            child: Text('Login'),
          ),
          Text(email),
        ],
      ),
    );
  }
}

class EmailTextField extends StatelessWidget {

  final Function onChanged;
  EmailTextField({this.onChanged});

  @override
  Widget build(BuildContext context) {
    return TextField(
      onChanged: onChanged,
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...