Flutter - Показать диалог выбора номера на кране TextFormField - PullRequest
1 голос
/ 26 марта 2019

Проблема проста: мне нужно показать numberpickerdialog , когда я нажимаю в поле формы.Затем мне нужно присвоить значение Numberpicker для поля.

FORM FIELD

 final maxValue = new GestureDetector(
              onTap: () {
                print("entra");
           _showDialog(context);
              },
              child: TextFormField(
                  //controller: inputMaxValue,
                  decoration: InputDecoration(
                    hintText: DemoLocalizations.of(context).trans('value-meter-max'),
                    focusedBorder: UnderlineInputBorder(
                      borderSide: BorderSide(color: Colors.blue[300], width: 2.5),
                    ),
                  )),
            );

DIALOG

  void _showDialog(context) {
    showDialog<double>(
    context: context,
      builder: (BuildContext context) {
        return new NumberPickerDialog.decimal(
          minValue: 1,
          maxValue: 10,
          title: new Text("Pick a new price"),
          initialDoubleValue: _currentPrice,
        );
      }
    ).then((double value) {
      if (value != null) {
        setState(() => _currentPrice = value);
      }
    });
  }

Проблема: Когда я щелкаю по полю, диалоговое окно не показывает:Как я могу запустить showDialog, когда я нажму на это поле?

1 Ответ

2 голосов
/ 26 марта 2019

Я воссоздал ваше дело и заметил, что проблема может быть связана с TextFormField. В идеале, TextFormField следует использовать только для редактирования текста, потому что мы все равно щелкаем по нему, что активирует поле с курсором. Если мы обертываем его GestureDetector, мы пытаемся снова нажать на него, что может конфликтовать с событием click. Я бы предпочел использовать InputDecorator и обернуть его GestureDetector. Вот рабочий пример этого, который открывает диалог:

  @override   Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
           child: GestureDetector(
               child: InputDecorator(
                 decoration: InputDecoration(
                     labelText: 'Test'
                 ),
               ),
             onTap: () {
                 _showDialog();
             },
           )
      )
      );

  }

  void _showDialog() {
    // flutter defined function
    showDialog(
      context: context,
      builder: (BuildContext context) {
        // return object of type Dialog
        return AlertDialog(
          title: new Text("Alert Dialog title"),
          content: new Text("Alert Dialog body"),
          actions: <Widget>[
            // usually buttons at the bottom of the dialog
            new FlatButton(
              child: new Text("Close"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );   }

enter image description here

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