DropdownButtonFormField не сбрасывается в первый раз - PullRequest
1 голос
/ 28 апреля 2020

Я хочу сбросить DropdownButtonFormField. Я могу сбросить его, установив его значение null и используя globalkey как следующий код.

Здесь проблема в том, что мне нужно дважды щелкнуть , чтобы сбросить его.

Примечание Я знаю, что используя DropdownButton, мы можем сделать сброс проще, но мой вопрос заключается в том, почему DropdownButtonFormField не сбрасывается при первом нажатии.

После обновления:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

class MyAppState extends State<MyApp> {
  String abc;
  FocusNode _node = FocusNode();
  GlobalKey<FormState> _key = GlobalKey<FormState>();
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
          body: Form(
            key: _key,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Focus(
                  focusNode: _node,
                  onFocusChange: (bool focus) {
                    setState(() {});
                  },
                  child: Listener(
                    onPointerDown: (_) {
                      FocusScope.of(context).requestFocus(_node);
                    },
                    child: DropdownButtonFormField(
                      hint: Text('select value'),
                      value: abc,
                      items: <String>['A', 'B', 'C', 'D'].map((String value) {
                        return DropdownMenuItem<String>(
                          value: value,
                          child: Text(value),
                        );
                      }).toList(),
                      onChanged: (String newValue) {
                        setState(() {
                          abc = newValue;
                        });
                      },
                    ),
                  ),
                ),
                Text("value is $abc"),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              setState(() {
                abc = null;
                _key.currentState.reset();
              });
            },
            tooltip: 'Reset',
            child: Icon(Icons.clear),
          )),
    );
  }
}

1 Ответ

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

вам может понадобиться ручная фокусировка, вам также нужно дать глобальный ключ для формирования


FocusNode _node = FocusNode();
...


  Focus(
                focusNode: _node,
                onFocusChange: (bool focus) {
                  setState(() {});
                },
                child: Listener(
                  onPointerDown: (_) {
                    FocusScope.of(context).requestFocus(_node);
                  },
                  child: DropdownButtonFormField(
                    iconSize: 50,
                    onChanged: (s) {
                      setState(() {
                        abc = s;
                      });
                    },
                    hint: Text(
                      'Select Text',
                    ),
                    items: [
                      DropdownMenuItem(value: '1', child: Text('A')),
                      DropdownMenuItem(value: '2', child: Text('B')),
                      DropdownMenuItem(value: '3', child: Text('C')),
                      DropdownMenuItem(value: '4', child: Text('D')),
                    ],
                  ),
                ),
              ),

...
 FloatingActionButton(
          onPressed: () {
            setState(() {
              print("hello");
              abc = null;
              _key.currentState.reset();
            });
            // _flyIronMan();
          },
          child: Icon(Icons.add),
        ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...