флаттер, как я могу сделать всю страницу прокручиваемой? - PullRequest
0 голосов
/ 26 ноября 2018

Я застрял с тем, как решить эту проблему.Чего я хочу добиться, так это сделать всю эту страницу прокручиваемой.Таким образом, при прокрутке вниз верхняя часть страницы будет невидимой, и будет видна только TabBarView.
У меня есть код .

return DefaultTabController(
  length: 3,
   child: Scaffold(
   appBar: AppBar(
     elevation: 0.0,
     backgroundColor: Colors.white,
   ),
   body: ListView(
     shrinkWrap: true,
     children: <Widget>[
      Padding(
        padding: const EdgeInsets.fromLTRB(15.0, 30.0, 15.0, 5.0),
        child: Column(
          children: <Widget>[
            ListTile(
              leading: CircleAvatar(backgroundImage: NetworkImage('https://images.unsplash.com/photo-1543194094-3fb5703804d5?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=cb818de45a33597672b648166ce73764&auto=format&fit=crop&w=500&q=60'), radius: 42.0),
              title: RaisedButton(
                textColor: Colors.white,
                child: Text(
                  'Edit Profile',
                  maxLines: 1,
                ),
                color: Theme.of(context).primaryColor,
                onPressed: () {},
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 22.0, bottom: 5.0, left: 30.0),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: Text(
                    'Spider-Man',
                    style: const TextStyle(fontSize: 16.0),
                    overflow: TextOverflow.ellipsis,
                  ),
                  ),
                  const SizedBox(width: 1.0),
                  Icon(Icons.check_circle, size: 16.0, color: Theme.of(context).primaryColor),
                ],
              ),
            ),
          ],
        ),
      ),
      Container(
        width: double.infinity,
        height: 40.0,
        decoration: const BoxDecoration(color: Colors.white),
        child: TabBar(
          controller: _controller,
          labelColor: Colors.black,
          indicatorColor: Theme.of(context).primaryColor,
          unselectedLabelColor: Colors.grey,
          tabs: [
            Tab(text: 'Following'),
            Tab(text: 'Follower'),
            Tab(text: 'Likes'),
          ],
        ),
      ),
      Expanded(
      child: TabBarView(
        physics: const NeverScrollableScrollPhysics(), 
        controller: _controller,
          children: 
        [
          Center(
            child: Text('Following'),
          ),
          Center(
            child: Text('Follower'),
          ),
          ListView.builder(
            itemCount: 100,
            itemExtent: 100.0,
            itemBuilder: (c ,i) {
              return Center(
                child: Text(i.toString())
              );
            },
          )
        ]
        ),
      )
     ],
   )
  ),
);

Но из-за Expandedконсоль говорит

флаттер: неправильное использование ParentDataWidget.

И я попытался обернуть Column или Flex, но консоль говорит, что на этот раз

У потомков RenderFlex ненулевое сгибание, но входящие ограничения по высоте не ограничены.

Как сделать всю страницу прокручиваемой?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я думаю, что более элегантным решением было бы использование Sliver с в NestedScrollView

Подробнее https://docs.flutter.io/flutter/widgets/NestedScrollView-class.html

0 голосов
/ 27 ноября 2018

Проблема с родителем вашего TabBarView, если вы используете Expanded, он не знает, сколько ему придется расширить, потому что нет никаких ограничений для ListView.

ЗаменитьВаш расширенный SizedBox или Container с фиксированной высотой:

SizedBox(
   height: 600.0,
   child: TabBarView( 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...