【问题标题】:Flutter: Is it possible in flutter to show another dropdownbutton after another dropdownbutton meet a certain requirementFlutter:是否有可能在另一个下拉按钮满足一定要求后显示另一个下拉按钮
【发布时间】:2019-01-05 03:55:45
【问题描述】:

例如,这是第一个下拉按钮 For Example This is the First Dropdown对不起,我没有足够的声誉来发布图片

标签所在的位置 选择区域 另一个将显示哪些城市将是城市 下面列出的取决于上面选择的区域。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    每次调用setState 时,都会调用小部件的build 方法,并在需要时重建可视化树。因此,在DropdownButtononChanged 处理程序中,将选择保存在setState 中并有条件地添加第二个DropdownButton。这是一个工作示例(边缘可能有点粗糙:)):

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          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 _selectedRegion;
      String _selectedSecond;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('Something before'),
                DropdownButton<String>(
                  value: _selectedRegion,
                  items: ['Arizona', 'California']
                      .map((region) => DropdownMenuItem<String>(
                          child: Text(region), value: region))
                      .toList(),
                  onChanged: (newValue) {
                    setState(() {
                      _selectedRegion = newValue;
                    });
                  },
                ),
                _addSecondDropdown(),
                Text('Something after'),
              ],
            ),
          ),
        );
      }
    
      Widget _addSecondDropdown() {
        return _selectedRegion != null
            ? DropdownButton<String>(
                value: _selectedSecond,
                items: ['First', 'Second']
                    .map((region) => DropdownMenuItem<String>(
                        child: Text(region), value: region))
                    .toList(),
                onChanged: (newValue) {
                  setState(() {
                    _selectedSecond = newValue;
                  });
                })
            : Container(); // Return an empty Container instead.
      }
    }
    

    Luke Freeman 有一篇关于 Managing visibility in Flutter 的精彩博文,如果您需要更广泛/可重用的方式。

    【讨论】:

    • 有没有可能_selectedRegion的值是Uri.http('mainLink', 'path', {'region': '$_selectedRegion'});因此该要求将用作获取下拉按钮数据的参数。
    • 是的,当然 :) 在 onChanged 处理程序中,我会调用 setState 以在您获取数据时将 UI 更改为“忙碌”状态。网络调用完成后,再次调用 setState 将 UI 更改为最终状态。
    • 是否可以在他获取数据时添加一个循环进度条?
    • 是的。使用在应用程序繁忙时显示的标志,并在 build 方法中为该繁忙状态创建所需的 UI。网络调用完成后,调用setState并清除flag。
    • 谢谢 item) => item.value == value).length == 1': is not true 是否可以将其填充为 No Region Available 或者是否可以仅禁用下拉按钮或将功能或逻辑放入项目中。如果映射或映射返回 null,我将使用硬编码数据或提示没有数据或 null 的提示填充它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多