Виджеты в tabbarview занимают дополнительный нижний интервал. Как обосновать их высоту в соответствии с содержанием? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть две вкладки на панели вкладок и виджет карты, который составляет обе вкладки. В этом случае я использую Slivers. CustomScrollView - мой родительский виджет. Я отображаю тексты в этих представлениях, но они занимают дополнительное пустое расстояние снизу, от которого я хочу избавиться. Если эти виджеты размещены вне tabbarview, они работают нормально и выравнивают высоту в соответствии с их содержанием. Последний виджет, который я добавил вне tabbarview и, как вы можете видеть, он отлично работает.

enter image description here

Вот мой код:

import 'package:flutter/material.dart';

class TabviewIssue extends StatefulWidget {
  @override
  _TabviewIssueState createState() => _TabviewIssueState();
}

class _TabviewIssueState extends State<TabviewIssue>with TickerProviderStateMixin {

  TabController _tabController;

  @override
  void initState() {
    super.initState();
    this._tabController = TabController(length: 2, vsync: this);

  }

  String htmlText = 'So vitamins and nutrients are optimally preserved, flavors unfold particularly well. In order to keep the cat food fresh, a special flavor protection foil in the packaging ensures that the oxygen content in the pack is reduced, oxidation is inhibited and the flavors in the cat food are preserved. True love Landlust cat food has exactly the energy content that your cat needs. It provides optimal nutrients and is very digestible. Cat food from True Love is healthy food that tastes cats.';

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: CustomScrollView(
          slivers: <Widget>[
            SliverToBoxAdapter(child: SizedBox(height: 50,)),
            SliverToBoxAdapter(
              child: Container(
                  color: Colors.grey.shade100,
                  child: Padding(
                    padding: const EdgeInsets.all(10.0),
                    child: TabBar(
                      indicator: BoxDecoration(color: Colors.grey.shade400),
                      labelColor: Colors.white,
                      unselectedLabelColor: Colors.black,
                      indicatorColor: Colors.grey,
                      tabs: <Widget>[
                        Tab(
                            child: Text("Product Features",
                                style: TextStyle(
                                    fontSize: 17,
                                    fontWeight: FontWeight.w500))),
                        Tab(
                            child: Text("Reviews",
                                style: TextStyle(
                                    fontSize: 17,
                                    fontWeight: FontWeight.w500))),
                      ],
                      controller: this._tabController,
                    ),
                  )),
            ),
            SliverFillRemaining(
              child: TabBarView(
                  controller: _tabController,
                  children: <Widget>[
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Card(
                          color: Colors.grey.shade200,
                          child: Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Column(children: <Widget>[
                              Text("Features",
                                  style: TextStyle(
                                      fontSize: 17, fontWeight: FontWeight.bold)),
                              Text( htmlText),
                            ]),
                          )),
                    ),
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Card(
                          color: Colors.grey.shade200,
                          child: Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Column(children: <Widget>[
                              Text("Features",
                                  style: TextStyle(
                                      fontSize: 17, fontWeight: FontWeight.bold)),
                              Text( htmlText),
                            ]),
                          )),
                    ),

                  ]),
            ),

            SliverToBoxAdapter(
              child:   Padding(
                padding: const EdgeInsets.all(8.0),
                child: Card(
                    color: Colors.grey.shade200,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(children: <Widget>[
                        Text("Features",
                            style: TextStyle(
                                fontSize: 17, fontWeight: FontWeight.bold)),
                        Text( htmlText),
                      ]),
                    )),
              ),
            )
          ],
        ),
      ),
    );
  }
}

1 Ответ

1 голос
/ 25 апреля 2020
class TabviewIssue extends StatefulWidget {
  @override
  _TabviewIssueState createState() => _TabviewIssueState();
}

class _TabviewIssueState extends State<TabviewIssue>
    with TickerProviderStateMixin {
  TabController _tabController;

  @override
  void initState() {
    super.initState();
    this._tabController = TabController(length: 2, vsync: this);
  }

  String htmlText =
      'So vitamins and nutrients are optimally preserved, flavors unfold particularly well. In order to keep the cat food fresh, a special flavor protection foil in the packaging ensures that the oxygen content in the pack is reduced, oxidation is inhibited and the flavors in the cat food are preserved. True love Landlust cat food has exactly the energy content that your cat needs. It provides optimal nutrients and is very digestible. Cat food from True Love is healthy food that tastes cats.';

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: CustomScrollView(
          slivers: <Widget>[
            SliverToBoxAdapter(
                child: SizedBox(
              height: 50,
            )),
            SliverToBoxAdapter(
              child: Container(
                  color: Colors.grey.shade100,
                  child: Padding(
                    padding: const EdgeInsets.all(10.0),
                    child: TabBar(
                      indicator: BoxDecoration(color: Colors.grey.shade400),
                      labelColor: Colors.white,
                      unselectedLabelColor: Colors.black,
                      indicatorColor: Colors.grey,
                      tabs: <Widget>[
                        Tab(
                            child: Text("Product Features",
                                style: TextStyle(
                                    fontSize: 17,
                                    fontWeight: FontWeight.w500))),
                        Tab(
                            child: Text("Reviews",
                                style: TextStyle(
                                    fontSize: 17,
                                    fontWeight: FontWeight.w500))),
                      ],
                      controller: this._tabController,
                    ),
                  )),
            ),
            SliverFillRemaining(
              child: TabBarView(controller: _tabController, children: <Widget>[
                //TAB 1
                Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,
                  children: <Widget>[
                    ListView(
                      shrinkWrap: true,
                      children: <Widget>[
                        Card(
                            color: Colors.grey.shade200,
                            child: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Column(children: <Widget>[
                                Text("Features",
                                    style: TextStyle(
                                        fontSize: 17,
                                        fontWeight: FontWeight.bold)),
                                Text(htmlText),
                              ]),
                            )),
                        Card(
                            color: Colors.grey.shade200,
                            child: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Column(children: <Widget>[
                                Text("Features",
                                    style: TextStyle(
                                        fontSize: 17,
                                        fontWeight: FontWeight.bold)),
                                Text(htmlText + htmlText),
                              ]),
                            )),
                      ],
                    ),
                    Expanded(
                      child: Container(
                        child: Text('All remaining space'),
                        color: Colors.red,
                      ),
                    )
                  ],
                ),
                //TAB 2
                ListView(
                  children: <Widget>[
                    Card(
                        color: Colors.grey.shade200,
                        child: Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Column(children: <Widget>[
                            Text("Features",
                                style: TextStyle(
                                    fontSize: 17, fontWeight: FontWeight.bold)),
                            Text(htmlText),
                          ]),
                        )),
                    Card(
                        color: Colors.grey.shade200,
                        child: Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Column(children: <Widget>[
                            Text("Features",
                                style: TextStyle(
                                    fontSize: 17, fontWeight: FontWeight.bold)),
                            Text(htmlText + htmlText),
                          ]),
                        )),
                  ],
                ),
              ]),
            ),
          ],
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...