Estoy usando un widget desplegable para mostrar varios goteos de él.

  String CountryVal, StateVal;
  Widget _dropdown(List<String> _options, String selected){
    return Container(
      padding: EdgeInsets.fromLTRB(15.0, 4.0, 15.0, 4.0),
      margin: EdgeInsets.fromLTRB(20.0, 7.0, 20.0, 10.0),
      child: DropdownButtonHideUnderline(
        child: DropdownButton<String>(
          isExpanded: true,
          hint: Text(
            _options[0],
            style: TextStyle(
              color: Colors.blue,
              fontSize: 18.0,
            ),
          ),
          items: _options.map((String value){
            return DropdownMenuItem<String>(
              value: value,
              child: Text(value),
            );
          }).toList(),
          onChanged: (String captureSelected) {
            setState(() {
              if(selected == 'Country Dropdown'){
                  CountryVal = captureSelected;
              } else if(selected == 'State Dropdown'){
                  StateVal = captureSelected;
              }
            });
          },
          value: selected == 'Country Dropdown' ? CountryVal : StateVal,
          style: TextStyle(
            color: Colors.blue,
            fontSize: 18.0,
          ),
        ),
      ),
    );
  }

Y lo he usado varias veces para diferentes menús desplegables

List<String> _country = ['- Select Country -', 'USA', 'UK'];
List<String> _state = ['- Select State -', 'New York', 'London'];
_dropdown(_country, 'Country Dropdown');
_dropdown(_state, 'State Dropdown');

Ahora los valores en 'Menú desplegable de estado' dependen de 'Menú desplegable de país', y necesito restablecer el valor de 'Menú desplegable de estado' para compensar 0 cuando se selecciona el valor de 'Menú desplegable de país'.

He pasado horas buscándolo y probándolo yo mismo, pero podría hacerlo bien. Por favor ayuda.

0
Dev Chauhan 30 ago. 2020 a las 16:42

1 respuesta

La mejor respuesta

Puede copiar y pegar ejecutar el código completo a continuación
Puede configurar StateVal = _state[0]; cuando se selecciona el valor desplegable País.
fragmento de código

if (selected == 'Country Dropdown') {
        CountryVal = captureSelected;
        StateVal = _state[0];
      }

Demostración de trabajo

enter image description here

Código completo

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      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> {
  String CountryVal, StateVal;
  List<String> _country = ['- Select Country -', 'USA', 'UK'];
  List<String> _state = ['- Select State -', 'New York', 'London'];

  Widget _dropdown(List<String> _options, String selected) {
    return Container(
      padding: EdgeInsets.fromLTRB(15.0, 4.0, 15.0, 4.0),
      margin: EdgeInsets.fromLTRB(20.0, 7.0, 20.0, 10.0),
      child: DropdownButtonHideUnderline(
        child: DropdownButton<String>(
          isExpanded: true,
          hint: Text(
            _options[0],
            style: TextStyle(
              color: Colors.blue,
              fontSize: 18.0,
            ),
          ),
          items: _options.map((String value) {
            return DropdownMenuItem<String>(
              value: value,
              child: Text(value),
            );
          }).toList(),
          onChanged: (String captureSelected) {
            setState(() {
              if (selected == 'Country Dropdown') {
                CountryVal = captureSelected;
                StateVal = _state[0];
              } else if (selected == 'State Dropdown') {
                StateVal = captureSelected;
              }
            });
          },
          value: selected == 'Country Dropdown' ? CountryVal : StateVal,
          style: TextStyle(
            color: Colors.blue,
            fontSize: 18.0,
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _dropdown(_country, 'Country Dropdown'),
            _dropdown(_state, 'State Dropdown')
          ],
        ),
      ),
    );
  }
}
1
chunhunghan 31 ago. 2020 a las 09:11