0

我希望我的下拉按钮根据用户选择的项目进行更改。这些是我的变量声明:

class _HomeState extends State<Home> {
  final gb_controller = TextEditingController();
  final brutto_controller = TextEditingController();
  final bAV_controller = TextEditingController();
  int steuerklassen_value = 1;
  String selectedValue = "Steuerklasse";
  String hintValue = "Steuerklasse 1";
  bool loading = false;

  final formkey = GlobalKey<FormState>();

  final steuerklassen = ['I', 'II', 'III', 'IV', 'V', 'VI'];

这是我的下拉按钮:

child: DropdownButton<String>(
                                      hint: Text(hintValue),
                                      iconSize: 20,
                                      items: steuerklassen
                                          .map((String dropDownStringItem) {
                                        return DropdownMenuItem(
                                          value: dropDownStringItem,
                                          child: Text(dropDownStringItem),
                                        );
                                      }).toList(),
                                      onChanged: (selectedValue) {
                                        setState(() {
                                          for (int i = 1;
                                              i <= steuerklassen.length;
                                              i++)
                                            if (steuerklassen[i] ==
                                                selectedValue) {
                                              this.steuerklassen_value = i + 1;
                                            }
                                          hintValue =
                                              "Steuerklasse $selectedValue";
                                          return steuerklassen_value;
                                        });
                                      },
                                    ),

我希望在选择新项目时改变提示值。我以为我会这样做,hintValue = "Steuerklasse $selectedValue";但显然不是。这是我的应用程序:

在此处输入图像描述

下拉按钮上的文本应该会改变,但不会。

4

2 回答 2

1

您可以在下面复制粘贴运行完整代码
您的代码有运行时错误RangeError (index): Invalid value: Not in inclusive range
您可以从

for (int i = 1; i <= steuerklassen.length; i++)

for (int i = 0; i < steuerklassen.length; i++)    

工作演示

在此处输入图像描述

完整代码

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> {
  int steuerklassen_value = 1;
  String selectedValue = "Steuerklasse";
  String hintValue = "Steuerklasse 1";
  final steuerklassen = ['I', 'II', 'III', 'IV', 'V', 'VI'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            DropdownButton<String>(
              hint: Text("$hintValue"),
              iconSize: 20,
              items: steuerklassen.map((String dropDownStringItem) {
                return DropdownMenuItem(
                  value: dropDownStringItem,
                  child: Text(dropDownStringItem),
                );
              }).toList(),
              onChanged: (selectedValue) {
                setState(() {
                  for (int i = 0; i < steuerklassen.length; i++)
                    if (steuerklassen[i] == selectedValue) {
                      this.steuerklassen_value = i + 1;
                    }
                  hintValue = "Steuerklasse $selectedValue";
                  return steuerklassen_value;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}
于 2020-12-04T07:06:32.717 回答
0

添加value下拉按钮。

var changedValue;
DropdownButton<String>(
  hint: Text(hintValue),
  iconSize: 20,
  value: changedValue, //add this parameter
  items: steuerklassen.map((String dropDownStringItem) {
    return DropdownMenuItem(
      value: dropDownStringItem,
      child: Text(dropDownStringItem),
    );
  }).toList(),
  onChanged: (selectedValue) {
    setState(() {
      for (int i = 1; i <= steuerklassen.length; i++)
        if (steuerklassen[i] == selectedValue) {
          this.steuerklassen_value = i + 1;
        }
      changedValue= selectedValue; //this will change the value
    });
  },
),
于 2020-12-03T18:42:32.977 回答