如何在颤振中实现未来的下拉列表并根据用户选择更新值

Posted

技术标签:

【中文标题】如何在颤振中实现未来的下拉列表并根据用户选择更新值【英文标题】:How to implement future drop down list in flutter and update the value as user selected 【发布时间】:2020-09-25 04:53:12 【问题描述】:

我正在努力从 api 到未来获取值并将其转换为 DropDownList。但是我在在用户选择下拉列表中的值时显示下拉列表中的值时遇到问题。这是我的代码。 =>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=> =>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=> =>

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class JsonApiDropdown extends StatefulWidget 
  @override
  JsonApiDropdownState createState() 
    return new JsonApiDropdownState();
  


class JsonApiDropdownState extends State<JsonApiDropdown> 
  Users _currentUser;

  final String uri = 'https://jsonplaceholder.typicode.com/users';

  Future<List<Users>> _fetchUsers() async 
    var response = await http.get(uri);

    if (response.statusCode == 200) 
      final items = json.decode(response.body).cast<Map<String, dynamic>>();
      List<Users> listOfUsers = items.map<Users>((json) 
        return Users.fromJson(json);
      ).toList();

      return listOfUsers;
     else 
      throw Exception('Failed to load internet');
    
  


  @override
  Widget build(BuildContext context) 
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          FutureBuilder<List<Users>>(
              future: _fetchUsers(),
              builder:
                  (BuildContext context, AsyncSnapshot<List<Users>> snapshot) 
                if (!snapshot.hasData) return CircularProgressIndicator();
                return DropdownButton<Users>(

                  items: snapshot.data
                      .map((user) => DropdownMenuItem<Users>(
                            child: Text(user.name),
                            value: user,
                          ))
                      .toList(),
                  onChanged: (Users value) 
                    setState(() 
                      _currentUser = value;
                    );
                  ,
                  isExpanded: false,
                  //value: _currentUser,
                  hint: Text('Select User'),
                );
              ),
          SizedBox(height: 20.0),
          _currentUser != null
              ? Text("Name: " +
                  _currentUser.name +
                  "\n Email: " +
                  _currentUser.email +
                  "\n Username: " +
                  _currentUser.username)
              : Text("No User selected"),

        ],
      ),
    );
  


class Users 
  int id;
  String name;
  String username;
  String email;

  Users(
    this.id,
    this.name,
    this.username,
    this.email,
  );

  factory Users.fromJson(Map<String, dynamic> json) 
    return Users(
      id: json['id'],
      name: json['name'],
      email: json['email'],
      username: json['username'],
    );
  



【问题讨论】:

【参考方案1】:

您需要添加 值 =_currentUser; 在你的下拉按钮上的 onChanged 方法之后

【讨论】:

以上是关于如何在颤振中实现未来的下拉列表并根据用户选择更新值的主要内容,如果未能解决你的问题,请参考以下文章

下拉列表不会根据范围值angularjs进行更新

Vuejs 根据从下拉列表中选择的值显示其他输入字段

根据下拉选择自动更新表单中显示的查询

如何根据另一个下拉菜单值禁用下拉菜单

从下拉列表中选择并在颤动中同时更新相同的列表

根据下拉列表中选择的值设置 datetimepicker 格式