Трепещущие кнопки переключения, переполненные действиями на панели приложений

#flutter #overflow #appbar

Вопрос:

Довольно широкие кнопки переключения, завернутые в SingleChildScrollView, переполнены действиями на панели приложений, но не в теле. Есть ли способ это исправить?

Любое предложение приветствуется!!

 class _ToggleState extends State<Toggle> {
List<bool> selectList = [
10 items here
];
List<String> catList = [
10 items here
];

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Title'),
      actions: [
        SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: ToggleButtons(
            children: catList.map((item) => Text(item)).toList(),
            isSelected: selectList,
          
          ),
        ),
      ],
    ),
    body: Center(
      child: SingleChildScrollView(
        scrollDirection: Axis.horizontal,
        child: ToggleButtons(
          children: catList.map((item) => Text(item)).toList(),
          isSelected: selectList,   
        ),
      ),
    ),
  );
}
}

 

Комментарии:

1. можете ли вы обернуть одножильный экран панели приложений контейнером и придать ему ширину.

Ответ №1:

В соответствии с документацией исходного кода

окончательный список? действия; Этот виджет расположен за панелью инструментов и панелью вкладок. Его высота будет такой же, как общая высота панели приложений. Как правило, эти виджеты представляют собой кнопки значков, представляющие общие операции. Для менее распространенных операций рассмотрите возможность использования a PopupMenuButton в качестве последнего действия.

Если вы все еще хотите разобраться с этим делом, мы можем использовать LayoutBuilder или mediaQuery получить размер и обработать пользовательский интерфейс, предоставляющий ширину элементов панели приложений.

Фрагмент кода

 @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) => Scaffold(
        appBar: AppBar(
          title: SizedBox(
            width: constraints.maxWidth * .2,
            child: Text('title'),
          ),
          automaticallyImplyLeading: false,
          actions: [
            SizedBox(
              width: constraints.maxWidth * .8,
              child: SingleChildScrollView(
                scrollDirection: Axis.horizontal,
                child: ToggleButtons(
                  onPressed: (v) {
                    print(v);
                  },
                  direction: Axis.horizontal,
                  children: catList.map((item) => Text(item)).toList(),
                  isSelected: selectList,
                ),
              ),
            ),
          ],
        ),
    /// ........

 

Комментарии:

1. Большое спасибо! Это было весьма информативно. Я действительно ценю вашу помощь. Всего наилучшего.