DropdownButton не отображает меню повторно при изменении элементов - PullRequest
0 голосов
/ 06 августа 2020

DropdownButton не отражает изменения menuItem, когда раскрывающееся меню открыто.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: Center(
          child: MyStatefulWidget(),
        ),
      ),
    );
  }
}

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

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

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  final disabledItems = ['Free', 'Four'];

  List<String> items = ['One', 'Two', 'Free', 'Four'];

  String dropdownValue = 'One';

  @override
  Widget build(BuildContext context) {
    return DropdownButton<String>(
      value: dropdownValue,
      icon: Icon(Icons.arrow_downward),
      iconSize: 24,
      elevation: 16,
      style: TextStyle(color: Colors.deepPurple),
      underline: Container(
        height: 2,
        color: Colors.deepPurpleAccent,
      ),
      onChanged: (String newValue) {
        if (!disabledItems.contains(newValue)) {
          setState(() {
            dropdownValue = newValue;
          });
        }
      },
      items: items.map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Row(children: [
            Text(
              value,
              style: TextStyle(
                color: disabledItems.contains(value) ? Colors.grey : null,
              ),
            ),
            IconButton(
              icon: Icon(Icons.delete),
              color: Colors.black38,
              onPressed: () {
                setState(() {
                  items.removeWhere((element) => element == 'Two');
                });

                print(items.length);
              },
            )
          ]),
        );
      }).toList(),
    );
  }
}

Я нацелен на возможность удаления элемента из меню при нажатии значка удаления. Все ожидаемые события работают должным образом, и список элементов DropDown обновляется соответствующим образом в бэкэнде, но не обрабатывается повторно. Меню DorpDown со значком удаления

Чтобы увидеть обновленный список элементов, мне нужно закрыть раскрывающееся меню и снова открыть его, но с точки зрения пользователя это кажется неправильным стаж.

...