Как я могу изменить текстовое поле на другой виджет на Отправлено? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть Textfield, и после ввода я хочу преобразовать виджет Textfield в простой Textwidget (например, введите ваше имя => отображает ваше имя).

Я попытался сделать это с помощью условного выражения в этом приведенный ниже код (это просто быстрый пример кода для отображения проблемы, я не хотел публиковать весь мой код):

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController hello1 = TextEditingController();

  int counter = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            hello1.text == ''
                ? TextField(
                    controller: hello1, onSubmitted: (_) => print(hello1.text))
                : Text(hello1.text),
            RaisedButton(onPressed: () {
              setState(() {
                counter++;
              });
            })
          ],
        ),
      ),
    );
  }
}

Поэтому, когда я ввожу текст в текстовое поле и отправляю его, виджет будет не конвертировать в текстовый виджет. Если я не отображаю что-то еще на экране, поэтому я добавил RaisedButton и переменную counter.

Итак, что я могу сделать, чтобы немедленно преобразовать его в текстовый виджет. Не стесняйтесь указывать мне на некоторые фундаментальные логики c Я мог бы отсутствовать здесь, спасибо!

1 Ответ

1 голос
/ 31 марта 2020

Это потому, что вы не вызываете метод setState ().

Изменение значения TextEditingController не перестроит ваш виджет. Метод SetState () делает.

children: <Widget>[
        hello1.text == ''
            ? TextField(
                controller: hello1,
                onSubmitted: (_) {
                  print(hello1.text);
                  setState(() {});
                },
              )
            : Text(hello1.text),
        RaisedButton(
          onPressed: () {
            setState(() {});
          },
        )
      ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...