简体   繁体   中英

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),
       )        
       ),
    );
  }
}

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

class SomeWidget extends StatelessWidget {
  final GlobalKey<FormFieldState> _key = GlobalKey<FormFieldState>();

  @override
  Widget build() {
    return DropdownButtonFormField(
      key: _key,
      //...
    )
  }

  reset() {
    _key.currentState.reset();
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM