Как сделать стек прокручиваемым по горизонтали?

#flutter #dart

Вопрос:

Я строю график, и я хочу, чтобы боковые заголовки графика (ось Y) оставались фиксированными в левой части экрана и позволяли прокручивать график горизонтально. Я построил график, но не могу сделать его прокручиваемым: введите описание изображения здесь

 Container(
          width: MediaQuery.of(context).size.width,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Container(
                  height: MediaQuery.of(context).size.height /2,
                  width: MediaQuery.of(context).size.width / 10,
                  child: SideTitles()),
              Container(
                //needs to be scrollable

                width: MediaQuery.of(context).size.width * 0.9,
                height: MediaQuery.of(context).size.height /2,
                child: Stack(
                  children: graph,
                ),
              ),
            ],
          ),
        )
 

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

Есть какие-нибудь идеи, как я могу этого добиться?

Ответ №1:

Вы пробовали ListView с направлением прокрутки: Ось.горизонталь.

Дополнительная информация: https://flutter.dev/docs/cookbook/lists/horizontal-list

Ответ №2:

Хорошо, я исправил это, добавив clipBehavior: Clip.none в стек, а затем обернув его контейнером той же ширины, что и график, и, наконец, обернув этот контейнер с помощью SingleChildScrollView()

 return Row(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
              height: graph.yHeight,
              width: MediaQuery.of(context).size.width / 10,
              child: SideTitles()),
          Container(
            width: MediaQuery.of(context).size.width * 0.9,
            height: MediaQuery.of(context).size.height / 2,
            child: SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: Container(
                width: graph.xWidth,
                child: Stack(
                  children: graph.graphList,
                  clipBehavior: Clip.none,
                ),
              ),
            ),
          ),
        ],
      )