Flutter: установить выбор DropdownButtonFormField программно - PullRequest
0 голосов
/ 23 апреля 2020

Есть ли способ установить значение DropdownButtonFormField программно? Я пытался манипулировать свойством value, но оно не показывает никакого эффекта.

Пример:

import 'package:flutter/material.dart';

class TestPage extends StatefulWidget {
  TestPage({Key key}) : super(key: key);

  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  int _selectedId;
  List<Item> _items = [];

  @override
  void initState() {
    super.initState();
    for (int i = 0; i < 5; i++) {
      _items.add(Item(i, "choice " + i.toString()));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Test"),
      ),
      body: Column(
        children: [
          DropdownButtonFormField(
            isExpanded: true,
            items: _items.map((item) {
              return new DropdownMenuItem(
                value: item.id,
                child: Text(item.text),
              );
            }).toList(),
            onChanged: (value) {
              setState(() => _selectedId = value);
            },
            value: _selectedId,
            decoration: InputDecoration(
              labelText: "select me",
            ),
          ),
          RaisedButton(
            child: Text('set selected'),
            onPressed: () {
              setState(() {
                _selectedId = 3;
              });
            },
          ),
          RaisedButton(
            child: Text('get selected'),
            onPressed: () {
              print(_selectedId.toString());
            },
          )
        ],
      ),
    );
  }
}

class Item {
  int id;
  String text;
  Item(this.id, this.text);
}

При установке _selectedId на 3 с помощью кнопки ничего не происходит, выпадающий список не обновляется. Если я установлю _selectedId на 3 при инициализации переменной, третий вариант будет выбран при загрузке страницы. Однако мне это нужно программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...