Как я могу добавить виджет, который находится внизу страницы и прокручивается с ListView?

У меня есть ListView, который создает несколько карт, и под ними я хочу добавить один текстовый виджет, который находится под ListView, но находится в нижней части страницы, что означает, что вам нужно прокрутить вниз последнюю карту, чтобы увидеть ее,

   Widget _buildCardList() {
    return ListView.builder(
      itemBuilder: _buildFoodCards,
      itemCount: cardList.length,
    );
  }

   @override
  Widget build(BuildContext context) {
    return Container(
      // constraints: BoxConstraints.expand(),
      decoration: BoxDecoration(
        gradient: LinearGradient(
          begin: Alignment.topCenter,
          end: Alignment.bottomCenter,
          colors: [Color(0xff170422), Color(0xff9B22E6)],
          stops: [0.75, 1],
        ),
      ),
      child: Column(
        children: <Widget>[
          Expanded(child: _buildCardList()),
          Text(
            'TEXT THAT SHOULD BE SCROLLABLE UNDER THE LISTVIEW',
            style: TextStyle(color: Colors.white),
          )
        ],
      ),
    );
  }

У меня есть текст, который в настоящее время находится под ListView, но текст является статическим на странице и не прокручивается с ListView.

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

1 ответ

Решение

Всего несколько изменений, чтобы все заработало:

  • установлен shrinkWrapзнак равно true на ваш ListView,
  • установлен physics знак равно NeverScrollableScrollPhysics на ваш ListView,
  • Добавлять SingleChildScrollView как родитель вашего Column,
  • удалить Expanded виджет.

Код


  Widget _buildCardList() {
    return ListView.builder(
      shrinkWrap: true,
      physics: NeverScrollableScrollPhysics(),
      itemBuilder: _buildFoodCards,
      itemCount: cardList.length,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      // constraints: BoxConstraints.expand(),
      decoration: BoxDecoration(
        gradient: LinearGradient(
          begin: Alignment.topCenter,
          end: Alignment.bottomCenter,
          colors: [Color(0xff170422), Color(0xff9B22E6)],
          stops: [0.75, 1],
        ),
      ),
      child: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            _buildCardList(),
            Text(
              'TEXT THAT SHOULD BE SCROLLABLE UNDER THE LISTVIEW',
              style: TextStyle(color: Colors.white),
            )
          ],
        ),
      ),
    );
  }

Надеюсь, это поможет:)

Другие вопросы по тегам