Dropdown Button wont change

萝らか妹 提交于 2021-02-10 06:23:10

问题


Hi i got stuck while write flutter code on dropdown button, where after user choosed from the list the hint wont changed to what the user choose. Can anyone help ?

So here is my code:

DropdownButton(items: [
            DropdownMenuItem(value: "1", child: Text('+')),
            DropdownMenuItem(value: "2", child: Text('-')),
            DropdownMenuItem(value: "3", child: Text('X')),
            DropdownMenuItem(value: "4", child: Text('/'))
            ].toList(), onChanged: (value){
              setState(() {
                _value = value;
              });
            },hint: Text('Operation'),)

回答1:


I have just created an example below just check it and let me know if it works :

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      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 selectedOperator;
  var listOfOperators = [
    Operators(type: "+ Addition", value: 1),
    Operators(type: "- Substraction", value: 2),
    Operators(type: "* Multiplication", value: 3),
    Operators(type: "/ Division", value: 4),
  ];

  @override
  void initState() {
    super.initState();
    print(listOfOperators.length);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
                  child: Container(

            child: Padding(
              padding: const EdgeInsets.all(30.0),
              child: Container(
                height: 50,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(5.0),
                  border: Border.all(
                      color: Colors.red, style: BorderStyle.solid, width: 0.80),
                ),
                child: DropdownButton(
                    value: selectedOperator,
                    isExpanded: true,
                    icon: Padding(
                      padding: const EdgeInsets.only(left: 15.0),
                      child: Icon(Icons.arrow_drop_down),
                    ),
                    iconSize: 25,
                    underline: SizedBox(),
                    onChanged: (newValue) {
                      setState(() {
                        print(newValue);
                        selectedOperator = newValue;
                      });
                      print(selectedOperator);
                    },
                    hint: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text('Select'),
                    ),
                    items: listOfOperators.map((data) {
                      return DropdownMenuItem(
                        value: data.value.toString(),
                        child: Padding(
                          padding: const EdgeInsets.only(left: 10.0),
                          child: Text(
                            data.type,
                            style: TextStyle(
                              fontSize: 18,
                              color: Colors.black,
                            ),
                          ),
                        ),
                      );
                    }).toList()),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class Operators {
  String type;
  int value;
  Operators({this.type, this.value});
}




回答2:


Here you go with running example:

String dropdownValue = 'Lahore';

@override
Widget build(BuildContext context) {
  return DropdownButton<String>(
    value: dropdownValue,
    icon: Icon(Icons.arrow_downward),
    iconSize: 24,
    elevation: 16,
    style: TextStyle(
      color: Colors.deepPurple
    ),
    underline: Container(
      height: 2,
      color: Colors.deepPurpleAccent,
    ),
    onChanged: (String newValue) {
      setState(() {
        dropdownValue = newValue;
      });
    },
    items: <String>['Lahore', 'Islamabad', 'Faisalabad', 'Attabad']
      .map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      })
      .toList(),
  );
}


来源:https://stackoverflow.com/questions/60350543/dropdown-button-wont-change

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!