Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在flutter中调用更改dropdown值的api?

如何在flutter中调用更改dropdown值的api?
EN

Stack Overflow用户
提问于 2020-01-14 07:59:14
回答 1查看 2.8K关注 0票数 0

在我的flutter应用程序中,我有两个下拉按钮,第一个是select subjet,第二个是select list no.If,我选择了主题和list no,然后调用studentList接口并在列表视图中显示学生列表。

这是我的代码:

代码语言:javascript
运行
AI代码解释
复制
    class SubjectWiseAttendance extends StatefulWidget {
    final imei_no,school_code,employee_id;
      SubjectWiseAttendance({Key key, this.imei_no, this.school_code, this.employee_id})
          : super(key: key);
      @override
      _SubjectWiseAttendanceState createState() => _SubjectWiseAttendanceState();
    }
    class _SubjectWiseAttendanceState extends State<SubjectWiseAttendance> {
      String date =DateFormat("dd-MM-yyyy").format(DateTime.now());
      String holder='9';
      String get imei_no => '0';
      String get school_code => 'STAGING';
      String get employee_id => 'EMP450';
      String get class_id=>holder;
      String get subject_id=>'0';
      String get attendance_date=>date;
      String get standard_id=>'0';
      String get attendance_type=>'S';
      String get hr_id=>'0';
      String get batch_id=>'0';
      String get sort_by_lect_no=>'0';
      String get Absent_Enroll_No =>new_str;
      String get proxy_flag =>'N';
      String get proxy_reason =>" ";
      String get late_flag=>'N';
      String get homeroom_id=>'0';
      String get lecture_id =>'0';
      List<dynamic> filteredItems;
      List<dynamic> filteredItemsType;
      String _selectedLocation;
      Future api1;
      var result ;
      var msg;
      var validate;
      var validate1;
      var api2;
      var array;
      @override
      void initState() {
        print('initState');
        _selectedLocation;
       _lectures;
       api1=_fetchClassdivision(imei_no, school_code, employee_id);
       api2=_fetchStudentlist(imei_no, school_code, employee_id, class_id, subject_id, attendance_date, standard_id, attendance_type, hr_id, batch_id, sort_by_lect_no);
        super.initState();
      }
      @override
      void dispose() {
        super.dispose();
      }
      _fetchClassdivision(
          String imei_no, String school_code, String employee_id) async {
        var apiUrl ='https://staging.ethdigitalcampus.com/T-View/service/DC/getClassDivisionSubjectwise' ;
        List<ClassDivisionSubject> list;
        Map<String, String> headers = {

          'content-type': 'application/x-www-form-urlencoded'
        };
        print('api1');
        Map<String, String> body = {
          'imei_no': imei_no,
          'school_code': school_code,
          'employee_id': employee_id,
        };
        http.Response response =
        await http.post(apiUrl, body: body, headers: headers);
        var data = json.decode(response.body);
        return data ;
       } 

      **List _buildFilteredList(List<dynamic> data) {
        List filteredItems = [];
        for(int j=0;j<data.length;j++)
        {
        String subject = data[j]['class_desc']+"--"+ data[j]['subject_desc'];
        filteredItems.add(subject.toString());
        }
        return filteredItems;
      }**
     _fetchStudentlist(...)
      Widget listViewWidget(data) {...
       }
    final GlobalKey<FormState> _formKey = new GlobalKey<FormState>();
     @override
      Widget build(BuildContext context) {
       body: new SafeArea(
              top: false,
              bottom: false,
              child: new Form(
                  key: _formKey,
                  autovalidate: true,
                  child: new ListView(
                   children: <Widget>[
                   Container(
                        child:FutureBuilder(
                            future:api1,
                            builder: (BuildContext context,snapshot) {
                              print('class division');
                              if (snapshot.data == null) {
                                return Column(children: <Widget>[
                                  Container(
                                      child: Center(
                                        child:  CircularProgressIndicator()
                                      ))
                                ]);
                              } else {
                                if(result =='0') {
                                  filteredItems = _buildFilteredList(array);
                                  if (filteredItems.length > 0) {
                                    if(_flag == true){
                                      _selectedLocation = filteredItems[0];
                                    }
                                     return Column(children: <Widget>[
                                      Divider(),
                                      DropdownButton(
                                       isExpanded: true,
                                        isDense: true,
                                        value: _selectedLocation,
                                        onChanged: (newValue) {
                                          setState(() {
                                            _flag = false;
                                            _selectedLocation = newValue
                                         });
                                        },
                                        items: filteredItems.map((subject) {
                                          return DropdownMenuItem(
                                            child: new Text(subject),
                                            value: subject,
                                          );
                                        }).toList(),
                                      ),
                                    ]
                                    );
                                  }
                                } }}),
                      ),
                       child: FutureBuilder(
                            future: api2,
                            builder: (context, snapshot) {
                              print('check student list');
                              if (snapshot.hasError) print(snapshot.error);
                              return snapshot.data != null
                                  ? listViewWidget(snapshot.data)
                                  : Center(child: CircularProgressIndicator());
                            }),
                      ),

                    ],
                  )
              )
          ),
 }

输出:

如果更改了下拉值,那么如何根据下拉值更改studentList。

EN

回答 1

Stack Overflow用户

发布于 2020-01-14 09:25:31

DropDown的api中,添加一个对调用onChanged的方法的调用:

代码语言:javascript
运行
AI代码解释
复制
DropdownButton(
  ...
  onChanged: (String subject_id) {
    _fetchStudentlist(..., subject_id, ...);
  },
  ...
),
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59729568

复制
相关文章
flutter - 如何在 dart/flutter 中收听流值
如果流不是广播流,则您只能收听一次。 请参阅此 Medium post 以了解有关 Streams 的更多信息。 收听 stream 时,您需要在 _assetsAudioPlayer.currentPosition 函数中添加您的代码。
徐建国
2021/08/30
1.1K0
json - 如何在 flutter 中的List String中加入2 json值?
如何获取列表= [owner_name + tenancy_random_no] 这样会来
徐建国
2021/08/03
4.2K0
flutter 中的ModalRoute 传值
从 MaterialPageRoute 的构造参数中 可以看到 RouteSettings: settings 这个参数
徐建国
2021/08/27
1.8K0
如何在Linux中更改SSH端口?
SSH(Secure Shell)是一种安全的远程登录协议,它允许您通过网络远程连接到Linux系统并进行管理操作。默认情况下,SSH使用22端口进行通信。然而,为了增强系统的安全性,有时候我们需要更改SSH端口,以减少潜在的攻击。
网络技术联盟站
2023/05/25
9.5K0
如何在Linux中更改SSH端口?
ES中的api调用测试
SearchRequest可用于与搜索文档、聚合、建议有关的任何操作,还提供请求突出显示结果文档的方法。 
一个风轻云淡
2023/10/15
2420
如何在 Linux 中更改主机名?
在 Linux 系统中,主机名是用于标识和区分网络上的不同计算机的名称。默认情况下,Linux 发行版会分配一个主机名给您的计算机,但是有时候您可能需要根据自己的需求更改主机名。在本文中,我们将详细介绍如何在 Linux 中更改主机名,以及更改主机名后可能涉及到的其他配置。
网络技术联盟站
2023/06/09
8.9K0
如何在 Linux 中更改主机名?
如何在 Linux 中更改 Nginx 80 端口?
Nginx 是一个开源的轻量级 Web 服务器替代 apache 来处理高流量的网站。
网络技术联盟站
2022/06/21
5.4K0
如何在 Linux 中更改 Nginx 80 端口?
如何在 Linux 中更改 Apache HTTP 端口?
Apache Web Server 是一个免费的开源跨平台 Web 服务器应用程序,用于通过 Internet 提供内容。
网络技术联盟站
2022/06/21
6.3K0
如何在 Linux 中更改 Apache HTTP 端口?
如何在Linux中更改用户ID?
在Linux系统中,每个用户都有一个唯一的用户ID(User ID),用于标识和管理用户的权限和资源访问。有时候,我们需要更改用户ID,可能是为了解决冲突、重组用户组或其他管理需求。本文将详细介绍如何在Linux中更改用户ID的几种方法。
网络技术联盟站
2023/06/08
8.5K0
如何在Linux中更改用户ID?
如何在 Linux 中更改默认 ssh 端口 22?
SSH 服务使用的标准端口是 22/TCP。但是,您可能希望更改 SSH 默认端口 22,以确保您的服务器尽可能安全,因为标准 22/TCP 端口一直是互联网上黑客和机器人程序漏洞的目标。
会长君
2023/04/25
4.5K0
如何在Fortran中调用Python
Python是机器学习领域不断增长的通用语言。拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch。气候模式通常是使用Fortran实现的。那么我们应该将基于Python的机器学习迁移到Fortran模型中吗?数据科学领域可能会利用HTTP API(比如Flask)封装机器学习方法,但是HTTP在紧密耦合的系统(比如气候模式)中效率太低。因此,可以选择直接从Fortran中调用Python,直接通过RAM传递气候模式的状态,而不是通过高延迟的通信层,比如HTTP。
bugsuse
2020/04/21
6K0
如何在Linux中更改SSH远程登录端口
SSH:短于安全Shell,SSH(由SSH通信安全公司开发)是用于远程登录安全协议。 使用SSH客户端,用户可以连接到服务器以比其他方法(例如telnet)更安全的方式传输信息。到右侧的图像是SSH会话,它使用一个命令行界面,可如何外观的示例。 SSH默认为端口22。
星哥玩云
2022/07/29
3.7K0
如何在 Eclipse 中更改注释块的 @author 版权信息?
我们在使用 IDE——Ecilpse 进行开发,需要注明版权信息的时候,如果不更改默认设置的话,在注释块 @author 的内容就是电脑系统默认的,例如下图所示。为了开发方便就需要进行修改。
白鹿第一帅
2021/03/02
4.6K0
如何在 Eclipse 中更改注释块的 @author 版权信息?
如何在 Flutter 中设置背景图像【Flutter专题16】
在 Flutter 应用程序中设置背景图像的常用方法是使用DecorationImage. 以下示例包括如何设置Fit 模式、透明度以及在显示键盘时防止图像变化。
徐建国
2021/12/13
12.2K0
如何在 Flutter 中设置背景图像【Flutter专题16】
【Python】如何在VBA中调用Pyt
背景: 已有一个Python脚本实现了部分功能,想使用VBA直接调用Python脚本 Python脚本如下: import time def hello(name): return "Hello, " + name + "!" print hello("World") #延时关闭windows控制台,使得用户可以看到运行结果 time.sleep(150); 方法如下: <pre name="code" class="vb">Sub test() Call Shell("C:\Pyt
py3study
2020/01/09
1.9K0
如何在低版本SDK调用高版本API?
随着Android SDK版本不断的迭代更新,在新的SDK上总是会出现让人眼前一亮非常方便好用的API。但是这些新的API呢在低版本的SDK上是没有的,所以当我们的minSdkVersion的版本低于新API所在的版本时,我们直接使用新API在编译时会出现报错。如果只是想解决编译报错的问题呢,Android给我们提供了两种注解的方式避免编译时报错:
吴延宝
2018/09/10
5K1
点击加载更多

相似问题

如何在flutter中调用API?

227

当dropdown值更改nextjs时如何更改api调用

16

如何在Flutter中实现API调用?

20

如何在Flutter中获取TextField中的DropDown

127

如何在flutter中自定义DropDown?

28
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文