【问题标题】:Display text dependant on dropdownmenu choice in flutter根据颤动中的下拉菜单选择显示文本
【发布时间】:2021-01-28 20:02:06
【问题描述】:

我是 Flutter/Dart 的新手,我正试图弄清楚如何在标题中显示某些内容:文本取决于下拉菜单选项的值。我创建了一个带有 DropDownButton 的 ListTile,其中的项目存储为字符串。我想根据 DropDownButton 中选择的字符串显示一个数字。我可以从 setState 中读取值,并根据该字符串输出一个值吗?还是有更好的方法来做到这一点?我已经用谷歌搜索了大约 2 个小时,但似乎无法理解。

class _BarneAnestesiState extends State<BarneAnestesi> {

String Alder;
  @override

  Widget build(BuildContext context) {


    List<Widget> containers = [

      Container(

        color: Colors.grey,
        child: Scaffold(

          body: new Column(
            children: <Widget> [


     new ListTile(
                leading: const Icon(Icons.baby_changing_station),
                title: new DropdownButton(
                  hint: Alder == null
                      ? Text('Dropdown')
                      : Text(
                    Alder,
                    style: TextStyle(color: Colors.blue),
                  ),
                  isExpanded: true,
                  iconSize: 30.0,
                  style: TextStyle(color: Colors.blue),
                  items: ['Nyfødt', '2 mnd.', '1 år', '2 år', '4 år', '7 år'].map(
                        (val) {
                      return DropdownMenuItem<String>(
                        value: val,
                        child: Text(val),
                      );
                    },
                  ).toList(),
                  onChanged: (val) {
                    setState(
                          () {
                        Alder = val;
                      },
                    );
                  },
                )),


              new ListTile(
                title: new Text(), //I want to display it here. F.eks. 2mnd. should display 3,5mm
              ),

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我不确定您的问题是什么,但我可以考虑以下几点:

    最后,这是包含所有这些的代码。这可能不是您想要的,但您应该能够对此进行扩展。

    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: BarneAnestesi(),
          ),
        );
      }
    }
    
    class BarneAnestesi extends StatefulWidget {
      @override
      _BarneAnestesiState createState() => _BarneAnestesiState();
    }
    
    class _BarneAnestesiState extends State<BarneAnestesi> {
      String alder;
      final List<String> items = ['Nyfødt', '2 mnd.', '1 år', '2 år', '4 år', '7 år'];
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: new Column(
            children: <Widget>[
              new ListTile(
                  leading: const Icon(Icons.baby_changing_station),
                  title: new DropdownButton(
                    hint: alder == null
                        ? Text('Dropdown')
                        : Text(
                      alder,
                      style: TextStyle(color: Colors.blue),
                    ),
                    isExpanded: true,
                    iconSize: 30.0,
                    style: TextStyle(color: Colors.blue),
                    items: items.map(
                          (val) {
                        return DropdownMenuItem<String>(
                          value: val,
                          child: Text(val),
                        );
                      },
                    ).toList(),
                    onChanged: (val) {
                      setState(
                            () {
                          alder = val;
                        },
                      );
                    },
                  )),
              new ListTile(
                title: new Text(
                    (alder == 'Nyfødt') ? 'Anything for Nyfødt' :
                    (alder == '2 mnd.') ? 'Anything for 2 mnd.' :
                    (alder == '1 år') ? 'Anything for 1 år' :
                    (alder == '2 år') ? 'Anything for 2 år' :
                    (alder == '4 år') ? 'Anything for 4 år' :
                    (alder == '7 år') ? 'Anything for 7 år' : ''
                ), //I want to display it here. F.eks. 2mnd. should display 3,5mm
              )
            ],
          ),
        );
      }
    }
    

    【讨论】:

    • 感谢您帮助我,但我仍有一些问题。我已经能够在 DropDownButton 中显示我想要的内容,但我无法在其下方的 ListTile 中显示我想要的内容,具体取决于 DropDownButton 显示的内容。如果 DropDownButton 激活了索引 1,或者只是字符串“2 mnd”。我正在尝试使 ListTile 标题显示 f.ex。 3.5毫米。还要感谢您在编码实践(lowerCamelCase)方面提供的其他建议。
    • @Veritaas 查看更新。仍然不确定这是否是您想要的,但这就是。如果这不是您想要的,请尝试解释更多。
    • 谢谢!这正是我想要的!不知道我可以这么简单,只需检查 alder-string 是什么,并根据字符串是什么,我可以输出预定义的文本。这真的很有帮助,谢谢!
    • 欢迎来到声明式编程之美 (ui.dev/imperative-vs-declarative-programming)
    猜你喜欢
    • 2017-05-18
    • 2022-12-06
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2017-10-06
    • 2013-07-08
    • 2018-04-04
    • 2014-10-04
    相关资源
    最近更新 更多