【问题标题】:Default Selected DropdownMenuItem Flutter默认选择 DropdownMenuItem Flutter
【发布时间】:2020-12-01 21:53:54
【问题描述】:

如何在 DropdownMenuItem 中设置默认选择?

由于我对 Flutter 还不熟悉,所以我无法将这里许多已回答问题的代码实现到我的代码中。

在此代码中有三个选项可供选择,印度尼西亚语、英语和俄语。我想让下拉菜单在页面显示时默认选择选项。

import 'package:flutter/material.dart';

class EnamPage extends StatefulWidget {
  @override
  _EnamPageState createState() => _EnamPageState();
}

class _EnamPageState extends State<EnamPage> {
  Person selectedPerson;
  List<Person> persons = [Person("Indonesian"), Person("English"), Person("Russian")];

  List<DropdownMenuItem> generateItems(List<Person> persons) {
    List<DropdownMenuItem> items = [];
    for (var item in persons) {
      items.add(DropdownMenuItem(
        child: Text(item.name),
        value: item,
      ));
    }
    return items;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Container(
              margin: EdgeInsets.all(20),
              child: DropdownButton(
                  isExpanded: true,
                  value: selectedPerson,
                  items: generateItems(persons),
                  onChanged: (item) {
                    setState(() {
                      selectedPerson = item;
                    });
                  })),
          Text((selectedPerson != null)
              ? selectedPerson.name
              : "Silakan Pilih")
        ],
      ),
    );
  }
}

class Person {
  String name;
  Person(this.name);
}

【问题讨论】:

    标签: flutter dart dropdown


    【解决方案1】:

    只需在 initState() 调用中将“selectedPerson”设置为您想要的值(这是您在小部件第一次渲染之前预定义值的地方):

    import 'package:flutter/material.dart';
    
    class EnamPage extends StatefulWidget {
      @override
      _EnamPageState createState() => _EnamPageState();
    }
    
    class _EnamPageState extends State<EnamPage> {
      List<Person> persons = [Person("Indonesian"), Person("English"), Person("Russian")];
      Person selectedPerson;
      
      @override
      void initState() {
        super.initState();
        selectedPerson = persons.first; // Set to the first Person
      }
    
      List<DropdownMenuItem> generateItems(List<Person> persons) {
        List<DropdownMenuItem> items = [];
        for (var item in persons) {
          items.add(DropdownMenuItem(
            child: Text(item.name),
            value: item,
          ));
        }
        return items;
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Column(
            children: <Widget>[
              Container(
                  margin: EdgeInsets.all(20),
                  child: DropdownButton(
                      isExpanded: true,
                      value: selectedPerson,
                      items: generateItems(persons),
                      onChanged: (item) {
                        setState(() {
                          selectedPerson = item;
                        });
                      })),
              Text((selectedPerson != null)
                  ? selectedPerson.name
                  : "Silakan Pilih")
            ],
          ),
        );
      }
    }
    
    class Person {
      String name;
      Person(this.name);
    }
    

    【讨论】:

    • 它也可以,但我的代表
    【解决方案2】:

    感谢来自 Telegram Group 的 Flutter Indonesia 的 Deny Ocr

    import 'package:flutter/material.dart';
    
    class EnamPage extends StatefulWidget {
      @override
      _EnamPageState createState() => _EnamPageState();
    }
    
    class _EnamPageState extends State<EnamPage> {
      Person initialPersonValue = Person("Indonesian");
      Person selectedPerson;
      List<Person> persons = [
        Person("Indonesian"),
        Person("English"),
        Person("Brazillian"),
      ];
    
      getSelectedPerson() {
        var currentPerson = persons
            .where((person) => person.name == initialPersonValue.name)
            .toList();
        return currentPerson[0];
      }
    
      List<DropdownMenuItem> generateItems(List<Person> persons) {
        List<DropdownMenuItem> items = [];
        for (var item in persons) {
          items.add(DropdownMenuItem(
            child: Text(item.name),
            value: item,
          ));
        }
        return items;
      }
    
      @override
      initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Column(
            children: <Widget>[
              Container(
                  margin: EdgeInsets.all(20),
                  child: DropdownButton(
                      isExpanded: true,
                      value: getSelectedPerson(),
                      items: generateItems(persons),
                      onChanged: (item) {
                        setState(() {
                          selectedPerson = item;
                        });
                      })),
              Text((selectedPerson != null) ? selectedPerson.name : "Silakan Pilih")
            ],
          ),
        );
      }
    }
    
    class Person {
      final String name;
      Person(this.name);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2011-02-17
      • 1970-01-01
      • 2021-12-04
      • 2018-07-24
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多