formsflutterdropdownbutton

How to reset value in Flutter DropdownButtonFormField


I want to reset value at DropdownButtonFormField, value is changed to null, but DropdownButtonFormField doesn't change. Where is the problem? If I have used DropdownButton it was changing value properly, value was cleared. I need to use 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;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center (
          child: Column(
            children: <Widget>[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;
            });
         },
         tooltip: 'Reset',
         child: Icon(Icons.clear),
       )        
       ),
    );
  }
}

Solution

  • You can use a GlobalKey<FormFieldState>.

    
    class SomeWidget extends StatelessWidget {
      final GlobalKey<FormFieldState> _key;
    
      @override
      Widget build() {
        return DropdownButtonFormField(
          key: _key,
          //...
        )
      }
    
      reset() {
        _key.currentState.reset();
      }
    }
    

    https://dartpad.dev/04247868fa2e86c5f417532486b48870