Невозможно удалить текущую панель закусок, вызвав ScaffoldState (). RemoveCurrentSnackBar () - PullRequest
1 голос
/ 09 марта 2020

По какой-то причине я не могу удалить текущую закусочную, хотя я вызываю ScaffoldState (). RemoveCurrentSnackBar ()

Я не получаю никаких сообщений об ошибках, но по какой-то причине закусочная не будет go прочь. Любой другой способ удалить панель закусок, когда пользователь выбирает элемент из DropdownButton?

Я уже пробовал ScaffoldState (). HideCurrentSnackBar () и все другие функции, которые должны удалить SnackBar.

Спасибо за ваш ответ.

class MainRoute extends StatefulWidget {
  @override
  _MainRouteState createState() => _MainRouteState();
}

class _MainRouteState extends State<MainRoute> {
  List<Currency> dropdownItems = [
    Currency(currencyName: "FOO", currencyInUSD: 22.0),
    Currency(currencyName: "BOO", currencyInUSD: 22.0),
    Currency(currencyName: "SOO", currencyInUSD: 22.0),
  ];
  Currency dropdownValue;

  Color color = Colors.green;
  MainModel model = MainModel();

  @override
  void initState() {
    super.initState();
    dropdownValue = dropdownItems[0];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      ///A Builder has been added so the context contains the Scaffold which
      ///is required to create a SnackBar
      floatingActionButton: Builder(
        builder: (context) {
          return FloatingActionButton(
            child: Icon(
              Icons.add,
              color: kIconColor,
            ),
            onPressed: () {
              print(dropdownItems.map((item) {
                return DropdownMenuItem(
                  value: item,
                  child: Text(item.currencyName),
                );
              }).toList());
              setState(() {
                Scaffold.of(context).showSnackBar(
                  SnackBar(
                    content: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        Text('Which currency do you want to add to your list?'),
                        SizedBox(
                          height: 25.0,
                        ),
                        DropdownButton<Currency>(
                          items: dropdownItems
                              .map<DropdownMenuItem<Currency>>((item) {
                            return DropdownMenuItem(
                              value: item,
                              child: Text(item.currencyName),
                            );
                          }).toList(),
                          value: dropdownValue,
                          onChanged: (value) {
                            setState(() {
                              dropdownValue = value;
                              ScaffoldState().removeCurrentSnackBar(
                                  reason: SnackBarClosedReason.remove);
                              print("SnackBar removed");
                            });
                          },
                        )
                      ],
                    ),
                    action: SnackBarAction(
                      label: 'Cancel',
                      onPressed: () {
                        print('Cancel');
                      },
                    ),
                  ),
                );
              });
            },
          );
        },
      ),
    );
  }
} 

1 Ответ

0 голосов
/ 09 марта 2020

Вместо использования следующего метода onChanged, когда пользователь выбирает элемент из DropdownButton:

onChanged: (value) {
      setState(() {
         dropdownValue = value;
         ScaffoldState().removeCurrentSnackBar(
         reason: SnackBarClosedReason.remove);
         print("SnackBar removed");
      });
   ),

Используйте этот метод вместо этого, чтобы удалить панель закусок:

onChanged: (value) {
      setState(() {
         dropdownValue = value;
         Scaffold.of(context).removeCurrentSnackBar(
            reason: SnackBarClosedReason.remove,
         );
         print("SnackBar removed");
      });
   ),
...