Как я могу показать модал под другим модалом во Флаттере? - PullRequest
0 голосов
/ 25 января 2020

Итак, я в настоящее время разрабатываю приложение «список дел» с использованием Flutter. Это приложение имеет плавающую кнопку, которая при нажатии показывает модальный нижний лист с несколькими другими кнопками. Некоторые из этих кнопок при нажатии также возвращают модальные нижние листы с вариантами выбора для пользователя. Дело в том, что я не могу найти способ разместить дополнительный нижний лист непосредственно под основным нижним листом. Другими словами, я хочу изменить основной модальный размер, чтобы избежать наложения вторичного модального режима. Возможно ли это на флаттере?

Вот как должно выглядеть приложение

А вот как оно сейчас выглядит

Вот пример кода для основного модального нижнего листа:

taskModal(BuildContext context) {
  return showModalBottomSheet(
    isScrollControlled: true,
    context: context,
    builder: (context) {
      return Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.only(
              topRight: Radius.circular(20), topLeft: Radius.circular(20)),
          color: Colors.white,
        ),
        child: Padding(
          padding:
              EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
          child: SingleChildScrollView(
            child: Column(
              children: <Widget>[
                _buildCancelButton(),
                TaskForm(),
                BuildBorder(),
                PriorityButton(),
                BuildBorder(),
                DateButton(),
                BuildBorder(),
                _buildConfirmButton(context)
              ],
            ),
          ),
        ),
      );
    },
  );
}

А вот пример кода для одной из кнопок, которые я упомянул ранее (кнопка приоритета, в частности):

class PriorityButton extends StatefulWidget {
  @override
  _PriorityButtonState createState() => _PriorityButtonState();
}

class _PriorityButtonState extends State<PriorityButton> {

  List<String> _priorities = [
    'Nenhuma',
    'Baixa (!)',
    'Média (!!)',
    'Alta (!!!)',
  ];

  String _settledPriority = 'Selecionar';

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: <Widget>[
          Padding(
              padding: EdgeInsets.symmetric(horizontal: 6),
              child: Icon(
                Icons.flag,
                color: Color(0xff9DA1A6),
              )),
          Text("Prioridade"),
          Expanded(
            child: Align(
              alignment: Alignment.centerRight,
              child: Padding(
                padding: EdgeInsets.only(
                    right: MediaQuery.of(context).size.width * 0.04),
                child: Text(_settledPriority,
                    maxLines: 1),
              ),
            ),
          ),
        ],
      ),
      onTap: () async => await _buildBottomSheet(),
    );
  }

  _setPriority(String priority) {
    setState(() {
      _settledPriority = priority;
    });
    Navigator.pop(context);
  }



_buildBottomSheet() {
    return showModalBottomSheet(
      context: context,
      builder: (context) {
            return Container(
              child: ListView.builder(
                shrinkWrap: true,
                itemCount: _priorities.length,
                itemBuilder: (context, index) => GestureDetector(
                  child: Text(
                    _priorities\[index\],
                  ),
                  onTap: () => _setPriority(_priorities\[index\]),
                ),
              ),
            );
          },
    );
  }

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