默认选中的DropdownMenuItem Flutter

问题描述

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

由于我仍然不熟悉抖动,因此无法将此处回答的许多问题的代码实现到我的代码中。

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

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);
}

解决方法

只需将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);
}
,

感谢电报集团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("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),));
    }
    return items;
  }

  @override
  initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Container(
              margin: EdgeInsets.all(20),value: getSelectedPerson(),Text((selectedPerson != null) ? selectedPerson.name : "Silakan Pilih")
        ],);
  }
}

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