如何像 Flutter 中的专业人士一样创建自定义大小的 TabBar?

Posted

技术标签:

【中文标题】如何像 Flutter 中的专业人士一样创建自定义大小的 TabBar?【英文标题】:how to create TabBar with custom size like a pro in Flutter? 【发布时间】:2021-06-28 10:07:54 【问题描述】:

最近我开始创建登录/注册页面。我想使用TabBar 小部件和TabBarWiew 在登录/注册之间进行导航。我想用自定义大小的 tabBar 制作页面,并带有如下指标。屏幕高度的三分之一将是带有图像背景的 tabBars。我怎样才能做到这一点?

已编辑

在@CopsOnRoad 的帮助下,我实现了这样的目标:

完整代码

import 'package:flutter/material.dart';

class CustomTabWidget extends StatefulWidget 
  @override
  _CustomTabWidget State createState() => _CustomTabWidget State();


class _CustomTabWidget State extends State<CustomTabWidget >
    with SingleTickerProviderStateMixin 
  TabController tabController;
  bool showTab = true;

  @override
  void initState() 
    tabController = TabController(
      length: 2,
      initialIndex: 0,
      vsync: this,
    );
    super.initState();
  

  @override
  void dispose() 
    tabController.dispose();
    super.dispose();
  

  @override
  Widget build(BuildContext context) 
    double width = MediaQuery.of(context).size.width;
    return DefaultTabController(
      length: 2,
      child: showTab
          ? Scaffold(
              appBar: AppBar(
                elevation: 3,
                leading: Container(),
                toolbarHeight: 300,
                flexibleSpace: Image.asset(
                  'assets/images/products/yogurt2.png',
                  fit: BoxFit.cover,
                ),
                bottom: TabBar(
                  controller: tabController,
                  isScrollable: true,
                  indicatorColor: Colors.green,
                  indicatorWeight: 2,
                  labelPadding: EdgeInsets.symmetric(horizontal: width / 6),
                  tabs: [
                    Tab(text: 'Login'),
                    Tab(text: 'Register'),
                  ],
                ),
              ),
              body: TabBarView(controller: tabController, children: [
                Container(
                  child: Center(
                    child: Text('Page1'),
                  ),
                ),
                Container(
                  child: Center(
                    child: Text('Page2'),
                  ),
                ),
              ]),
            )
          : Container(),
    );
    
  


【问题讨论】:

【参考方案1】:

截图:


代码:

@override
Widget build(BuildContext context) 
  return DefaultTabController(
    length: 2,
    child: Scaffold(
      appBar: AppBar(
        toolbarHeight: 200,
        flexibleSpace: Image.asset(
          'chocolate_image',
          fit: BoxFit.cover,
        ),
        bottom: TabBar(
          tabs: [
            Tab(text: 'A'),
            Tab(text: 'B'),
          ],
        ),
      ),
    ),
  );

【讨论】:

感谢您的快速回复。顺便问一下,为什么你的截图背景图片没有覆盖你的TabBar 小部件中的标签? 那是因为我没有使用具有backgroundtitle 属性的FlexibleSpaceBar 小部件,并且它们都接受Widget。如果你使用它,它将开始覆盖TabBar 的背景。【参考方案2】:

您可以通过使用Expanded 小部件包裹您的小部件来实现自定义大小,该小部件将展开以填满所有可用空间,如果您有多个展开的小部件,您可以使用flex 属性来决定每个小部件的大小小部件扩展 you can read more about them here。

图片背景可以查看this question

【讨论】:

感谢您的回复。但这不是我想要达到的目标)

以上是关于如何像 Flutter 中的专业人士一样创建自定义大小的 TabBar?的主要内容,如果未能解决你的问题,请参考以下文章

如何像 Twitter 一样自定义 UITableViewCell?

尝试使用 UIScrollView 创建自定义水平 UIPickerView - 如何像在 UIPickerView 中一样淡出边缘?

如何像 Flutter 中的 Spinner 一样在 DropdownButton 下方打开 DropDown 对话框?

如何在 WordPress 中实现自定义标头的引导小部件代码?

自定义 AppBar Flutter

在 Flutter 中的小部件之间传递数据的最佳方式