【问题标题】:How to set the first items of DropdownButton to be value from first API while the rest of the items to be value from second API in Flutter?如何将 DropdownButton 的第一项设置为来自第一个 API 的值,而其余项设置为来自 Flutter 中的第二个 API 的值?
【发布时间】:2019-12-26 06:48:40
【问题描述】:

下拉按钮 ( isExpanded:真, iconEnabledColor:Colors.orange, 项目:[

    //From First API
    DropdownMenuItem(
      value: title,
      child: Text(title), 
    ),


    //From Second API
    snapshot.data.title
        .map((title) => DropdownMenuItem<Title>(
      child: Row(
        children: <Widget>[
          Text(title.title),
        ],
      ),
      value: title,
    ))
        .toList()
  ],
  onChanged: (value) {
    setState(() {
      selectedTitle = value;
    });
  },

  value: selectedTitle,
)

我希望这两个结果在一个 DropdownButton 中:

下拉按钮 1:

MS

下拉按钮 2:

女士 先生 小姐 先生

预期结果:

下拉按钮:

MS 女士 先生 小姐 先生

这是我得到的错误:

lib/account/updateProfileTab/DropDownPage2.dart:155:28:错误:“List>”类型的值无法分配给“DropdownMenuItem”类型的变量。

  • “列表”来自“dart:core”。

  • 'DropdownMenuItem' 来自'package:flutter/src/material/dropdown.dart' ('file:///C:/src/flutter/packages/flutter/lib/src/material/dropdown.飞镖')。

  • “标题”来自“package:test/test/update/DropDownPage2.dart”(“lib/test/update/DropDownPage2.dart”)。

尝试更改左侧的类型,或将右侧转换为“DropdownMenuItem”。 .toList()

【问题讨论】:

    标签: flutter


    【解决方案1】:

    如果我明白你的意思

    第一步:获取json字符串并从API1和API2生成List,

    List<Map> _jsonApi1 = [{"id":0,"name":"default 1"}];
    List<Map> _jsonApi2 = [{"id":1,"name":"second 2"},{"id":2,"name":"third 3"}];
    

    第 2 步:从 API1 和 API2 加入列表,

    List<Map> _myJson = new List.from(_jsonApi1)..addAll(_jsonApi2);
    

    第 3 步:生成 DropdownMenuItem

    @override
    Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new DropdownButton<String>(
          isDense: true,
          hint: new Text("Select"),
          value: _mySelection,
          onChanged: (String newValue) {
    
            setState(() {
              _mySelection = newValue;
            });
    
            print (_mySelection);
          },
          items: _myJson.map((Map map) {
            return new DropdownMenuItem<String>(
              value: map["id"].toString(),
              child: new Text(
                map["name"],
              ),
            );
          }).toList(),
        ),
      ),
    );
    

    }

    完整代码

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            // This is the theme of your application.
            //
            // Try running your application with "flutter run". You'll see the
            // application has a blue toolbar. Then, without quitting the app, try
            // changing the primarySwatch below to Colors.green and then invoke
            // "hot reload" (press "r" in the console where you ran "flutter run",
            // or simply save your changes to "hot reload" in a Flutter IDE).
            // Notice that the counter didn't reset back to zero; the application
            // is not restarted.
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      // This widget is the home page of your application. It is stateful, meaning
      // that it has a State object (defined below) that contains fields that affect
      // how it looks.
    
      // This class is the configuration for the state. It holds the values (in this
      // case the title) provided by the parent (in this case the App widget) and
      // used by the build method of the State. Fields in a Widget subclass are
      // always marked "final".
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    List<Map> _jsonApi1 = [{"id":0,"name":"default 1"}];
    List<Map> _jsonApi2 = [{"id":1,"name":"second 2"},{"id":2,"name":"third 3"}];
    List<Map> _myJson = new List.from(_jsonApi1)..addAll(_jsonApi2);
    
    class _MyHomePageState extends State<MyHomePage> {
    
      String _mySelection;
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          body: new Center(
            child: new DropdownButton<String>(
              isDense: true,
              hint: new Text("Select"),
              value: _mySelection,
              onChanged: (String newValue) {
    
                setState(() {
                  _mySelection = newValue;
                });
    
                print (_mySelection);
              },
              items: _myJson.map((Map map) {
                return new DropdownMenuItem<String>(
                  value: map["id"].toString(),
                  child: new Text(
                    map["name"],
                  ),
                );
              }).toList(),
            ),
          ),
        );
    
      }
    }
    

    【讨论】:

    • 谢谢@chunhunghan!你能告诉我如何将第一个项目设置为第一个值(在这种情况下:默认 1)而不是“选择”(提示:新文本(“选择”))吗?对不起。我对 Flutter 很陌生。提前致谢。
    • 提示:new Text("${_jsonApi1[0]["name"]}"),
    • 哇!优秀!非常感谢@chunhunghan!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2014-05-26
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多