如何在颤动中添加选项卡顶部和底部

2023-12-06

顶部选项卡仅显示主页,并且通过滚动或点击显示 3 个不同的页面,底部选项卡则显示整个应用程序(如菜单)。

当我编写代码时,我会得到如下图所示的视图,但我无法点击或重定向页面。

导航代码我只给出了顶部或底部选项卡,而不是两个选项卡。

enter image description here

主页.dart

  class _HomePageState extends State<HomePage> with SingleTickerProviderStateMixin {

  TabController tabController;
  //TabController bottomController;
  Icon searchBtn = new Icon(Icons.search);
  Widget appBarTitle = new Text('Invoices');

  @override
  void initState(){
    super.initState();
    tabController = new TabController(vsync: this, length: 3);
    //bottomController = new TabController(vsync: this, length: 4);
  }

  @override
  void dispose(){
    tabController.dispose();
    //bottomController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      color: Colors.purpleAccent,
      debugShowCheckedModeBanner: false,
      home: DefaultTabController(
        length: 3,
      child:Scaffold(
        appBar: new AppBar(
          centerTitle: false,
          title: appBarTitle,
          backgroundColor: Color(0xFF832685),
          actions: <Widget>[
            new IconButton(
              icon: searchBtn,
              onPressed: (){
                setState(() {
                  if(this.searchBtn.icon == Icons.search){
                    this.searchBtn = new Icon(Icons.close);
                    this.appBarTitle = new TextField(
                      style: new TextStyle(
                        color: Colors.white,
                      ),
                      decoration: new InputDecoration(
                        //fillColor: Colors.white,
                        border: InputBorder.none,
                        // focusedBorder: OutlineInputBorder(
                        //   borderRadius: BorderRadius.all(Radius.circular(5.0)),
                        //   borderSide: BorderSide(color: Colors.white)),
                        filled: true,
                        prefixIcon: new Icon(Icons.search,
                        color: Colors.white),
                        hintText: "Search...",
                        hintStyle: new TextStyle(color: Colors.white),
                      ),
                    );
                  }
                  else{
                    this.searchBtn = new Icon(Icons.search);
                    this.appBarTitle = new Text('Invoices');
                  }
                });
              },
            )
          ],
          bottom: new TabBar(
            indicatorColor: Color(0xFF832685),
            controller: tabController,
            tabs: <Tab>[
              new Tab(text: 'Unpaid'.toUpperCase(),),
              new Tab(text: 'Draft'.toUpperCase(),),
              new Tab(text: 'All'.toUpperCase(),),
            ],
          ),
        ),
        //bottomNavigationBar: BottomNavBar(),
        //bottomNavigationBar: _BottomBar(),

        // bottomNavigationBar: new TabBar(
        //     indicatorColor: Color(0xFF832685),
        //     labelColor: Color(0xFF832685),
        //     //controller: bottomController,
        //     tabs: <Tab>[
        //       new Tab(icon: new Icon(Icons.home),text: 'Home',),
        //       new Tab(icon: new Icon(Icons.home),text: 'Home',),
        //       new Tab(icon: new Icon(Icons.home),text: 'Home',),
        //       new Tab(icon: new Icon(Icons.home),text: 'Home',),
        //     ],
        // ),

        body: new TabBarView(
          controller: tabController,
          children: <Widget>[
            new first.UnpaidInvoicePage(),
            new second.PaidInvoicePage(),
            new third.AllInvoicePage(),
          ],
        ),
        //body: Container(),

          floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          tooltip: 'New Invoice',
          backgroundColor: Color(0xFF832685),
          onPressed: (){
            //Navigator.of(context).pushNamed('NewInvoicePage');
            Navigator.push(context, MaterialPageRoute(builder: (context) => NewInvoicePage()));
          },
        ),
        ),
      ),
      );   
  }
}

谢谢 !


尝试这个

import 'package:flutter/material.dart';

void main() => runApp(HomeScreen());

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenPage createState() => _HomeScreenPage();
}

class _HomeScreenPage extends State<HomeScreen>
    with SingleTickerProviderStateMixin {
  TabController tabController;

  String title = "Home";

  @override
  void initState() {
    super.initState();
    tabController = new TabController(length: 3, vsync: this);
  }

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

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
        theme: ThemeData(
            primarySwatch: Colors.purple,
            brightness: Brightness.light,
            accentColor: Colors.red),
        darkTheme: ThemeData(
          brightness: Brightness.dark,
        ),
        home: new Scaffold(
          appBar: AppBar(
            title: Text(title),
            centerTitle: true,
          ),
          body: TabBarView(
            children: <Widget>[
              FirstTab(),
              MyBody("Page Two"),
              MyBody("Page Three")
            ],
// if you want yo disable swiping in tab the use below code
//            physics: NeverScrollableScrollPhysics(),
            controller: tabController,
          ),
          bottomNavigationBar: Material(
            color: Colors.purple,
            child: TabBar(
              onTap: (indedx) {
                if (indedx == 0) {
                  setState(() {
                    title = "Home";
                  });
                } else if (indedx == 1) {
                  setState(() {
                    title = "Tab Two";
                  });
                } else if (indedx == 2) {
                  setState(() {
                    title = "Tab Three";
                  });
                }
              },
              indicatorColor: Colors.blue,
              unselectedLabelColor: Colors.grey,
              tabs: <Widget>[
                Tab(
                  icon: Icon(Icons.favorite_border),
                  text: "ONE",
                ),
                Tab(
                  icon: Icon(Icons.favorite),
                  text: "TWO",
                ),
                Tab(
                  icon: Icon(Icons.add_box),
                  text: "THREE",
                ),
              ],
              controller: tabController,
            ),
          ),
        ));
  }
}

class FirstTab extends StatefulWidget {
  @override
  FirstTabState createState() => FirstTabState();
}

class FirstTabState extends State<FirstTab>
    with SingleTickerProviderStateMixin {
  TabController tabController;

  @override
  void initState() {
    super.initState();
    tabController = new TabController(length: 3, vsync: this);
  }

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

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(kToolbarHeight),
          child: Container(
            height: 50.0,
            child: new TabBar(
              indicatorColor: Colors.blue,
              unselectedLabelColor: Colors.grey,
              labelColor: Colors.blue,
              tabs: [
                Tab(
                  text: "ONE",
                ),
                Tab(
                  text: "TWO",
                ),
                Tab(
                  text: "THREE",
                ),
              ],
            ),
          ),
        ),
        body: TabBarView(
          children: [
            Text("TAB ONE CONTENT"),
            Text("TAB TWO CONTENT"),
            Text("TAB THREE CONTENT"),
          ],
        ),
      ),
    );
  }
}

class MyBody extends StatelessWidget {
  final String title;

  MyBody(this.title);

  final mySnackBar = SnackBar(
    content: Text(
      "Hello There!",
      style: TextStyle(color: Colors.white),
    ),
    duration: Duration(seconds: 3),
    backgroundColor: Colors.blue,
  );

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          RaisedButton(
              child: Text(title + "  Click me"),
              onPressed: () => {Scaffold.of(context).showSnackBar(mySnackBar)}),
        ],
      ),
    );
  }
}

OUTPUT

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在颤动中添加选项卡顶部和底部 的相关文章

  • 如何在 flutter 搜索页面小部件中消除搜索建议?

    我需要使用默认 flutter 的 Google 地方信息搜索建议搜索页 每当用户开始输入时 我都需要提供自动完成建议 并且我使用异步方式实现了这一点FutureBuilder 现在的问题是我需要将搜索请求的调度去抖 500 毫秒或更长时间
  • 错误:未为类“BuildContext”定义方法“inheritFromWidgetOfExactType”

    今天编译flutter项目的时候出现了这样的错误 This will generate a JSON format file containing all messages that need to be translated pub ca
  • 是否可以在flutter中开发移动键盘应用程序

    我们想要开发具有一些独特功能 例如在键盘上翻译 的移动键盘应用程序 第三方键盘 我们想知道是否有一种方法可以同时为 IOS 和 Android 开发一次 使用 Flutter 或者其他解决方案 对此有一个长的和一个短的答案 简短的回答基本上
  • 尝试将 Flutter 应用上传到 ItunesConnect 时出现 UIWebView 错误

    我正在尝试将我的应用程序上传到应用程序商店 但是我不断收到错误消息 表明我的应用程序存在此问题 ITMS 90809 已弃用的 API 使用 不再接受使用 UIWebView 的新应用程序 相反 使用 WKWebView 可以提高安全性和可
  • 如何隐藏其他选项卡的内容并仅显示所选选项卡的内容

    当我单击特定选项卡时 其他选项卡的内容应该隐藏 但它并没有隐藏 这是我所有的代码 function showStuff id if document getElementById id style display block documen
  • 在 flutter 中使用 Cloud Firestore 创建无限列表

    我目前正在将 Cloud Firestore 与 Streambuilder 小部件一起使用 以便使用 Firestore 文档填充 ListView 小部件 new StreamBuilder
  • 颤振动态形式无法正常工作

    在我的应用程序中 我想创建一组动态表单 用户可以在其中添加更多项目 在这种动态形式中 它由两个文本字段 1 电话字段 2 电子邮件字段和一个下拉字段组成 但我尝试的任何事情都无法正常工作 我已经要求修复我的代码 但没有得到答复 堆栈溢出问题
  • Android Studio Flutter 项目错误:内存不足

    我在 Android Studio 上运行任何 flutter 项目 都会抛出内存不足错误 控制台中显示的消息如下所示 e b build slave windows engine build src third party dart ru
  • 如何在 Flutter App 中按时间注销?

    如果用户在登录后对应用程序没有反应或不活动超过 5 分钟 我需要从应用程序中注销用户 该应用程序将转到主登录页面 我尝试实施给定的解决方案here https stackoverflow com questions 52602606 how
  • 带有 JEditable 字段的 Tab 键

    我有一个使用 JQuery 和 Jeditable 在页面上创建可编辑文本元素的页面 在编辑元素时 我希望能够从一个元素切换到下一个元素 我不确定如何 使用jeditable或jquery捕获tab键事件 keycode 9 一旦检测到该事
  • Flutter 使用 RichText 填空

    我几乎完成了我的应用程序的填空实现 但不幸的是我不断遇到布局问题 然而 当我不断解决问题时 我几乎已经完成了 这是到目前为止的代码 RichText text TextSpan text dummy style TextStyle colo
  • 空安全 AppLocalization 字符串的最佳方法

    Question 我在用AppLocalizations of context myString在我的 null safe flutter 应用程序中国际化字符串 我的 IDE 告诉我AppLocalizations of context
  • Flutter Scaffold Appbar 不显示后退按钮

    我的课程没有在 AppBar 中显示后退按钮 已经尝试将 this automaticallyImplyLeading true import package carros pages carro carro dart import pac
  • Flutter无法从url加载图像

    图片资源服务捕获异常 解析图像编解码器时抛出以下 ImageCodecException 加载网络图像失败 图片网址 https cdn sportmonks com images soccer leagues 5 png https cd
  • 从后台恢复后,Flutter GoogleMap 为空白

    我遇到以下问题 我的 Flutter 应用程序使用 GoogleMap 地图最初加载得很好 但是 如果我将应用程序置于后台并稍后恢复 地图将保持空白 Google 徽标仍然显示 就像未指定 API 密钥时发生的情况一样 我的多边形叠加层也不
  • Flutter:如何使用 AnimatedContainer 和扩展列?

    假设我们有 3 个孩子Column Flexible flex 1 child Container color Colors red Flexible flex 3 child Container color Colors yellow F
  • 如何确定我们是否正在 Dart (Flutter) 中运行单元测试

    在 Flutter Dart 中从单元测试调用函数时 如何确定我正在运行单元测试还是实际应用程序 如果在单元测试中 我想传递不同的数据 您可以使用以下内容来检查您是否正在运行测试 Platform environment containsK
  • 同屏上多个浮动操作按钮显示黑屏

    我尝试在其中一个屏幕上添加两个浮动操作按钮 结果在第一次重新加载应用程序后出现黑屏 Column mainAxisSize MainAxisSize min children
  • 在 flutter 中强制重建有状态子部件

    假设我有一个主屏幕 有状态小部件 其中有一个变量count作为状态 在此主屏幕中 有一个按钮和另一个有状态小部件 我们称之为MyListWidget MyListWidget初始化它自己的小部件initState取决于的值count多变的
  • Flutter/Dart:将十六进制颜色字符串转换为颜色?

    我们的数据库将颜色保存为String就像 AABBCC 所以我基本上正在寻找这样的函数 Color parseColor AABBCC 对于颤振 Color 类需要这样的东西Color 0xFF42A5F5 所以我需要转换 AABBCC t

随机推荐

  • CSS 中是否可以定位“无目标”?

    是否有 不存在片段标识符 的 CSS 选择器 相反的是 target 问题是 我正在制作一个文档 其中不同部分是可见的 具体取决于您提供的片段标识符 将其视为精灵文件 仅适用于 HTML 所以看起来像这样 section The first
  • EXCEL VBA 时间值格式(hh:mm am/pm)

    如何设置不带秒的 12 小时制时间值的格式 例如 上午 下午时 分 现在我正在使用Format TimeValue Now hh mm 但它不会显示上午 下午 提前致谢 更改格式字符串以包含以下指示符AM PM 基于VBA 格式函数文档 看
  • 如何在水平条上显示值

    我生成了一个条形图 如何在每个条形上显示条形的值 当前情节 我想要得到什么 My code import os import numpy as np import matplotlib pyplot as plt x u INFO u CU
  • 如何通过 Spring Security 和 LDAP 使用“记住我”身份验证?

    我想使用 Spring Security 的 记住我 和 LDAP 身份验证 LDAP认证配置说明here 我刚刚做了一些微小的改变 您能向我解释一下如何在该配置中添加 记住我 吗 或者 也许您可 以给我一个描述如何操作的示例 谢谢 您实际
  • LINQ to Entities 选择多对多关系中的所有条目

    我有 3 个 MySql 表 Students Classes and StudentsInClasses 实体框架将它们转换为两个实体Student and Class 每个都通过多对多导航属性链接到另一个 例如Student Class
  • 提取两个双引号之间的所有数据

    我正在尝试使用 powershell 正则表达式从 AssemblyInfo cs 文件中提取版本数据 下面的正则表达式是我最好的尝试 但它只能拉动字符串 assembly AssemblyVersion 我已经将这个正则表达式放入几个网络
  • 詹金斯的空手道选项

    我正在尝试运行来自詹金斯的代码 在目标和选项中给出特定标签 但它失败并出现以下错误 您能否验证语法并让我知道如何解决此问题 无法在项目 karate boilerplate 上执行目标 org apache maven plugins ma
  • 使用 Pcap 进行超时监听

    我想在 Linux 上使用 C 语言的 Libpcap 编写一个小应用程序 目前 它开始嗅探并等待数据包 但这并不是我真正需要的 我希望它等待 N 秒然后停止监听 我怎样才能做到这一点 这是我的代码 void got packet u ch
  • 如何按常见项目对元组进行分组并查找每组的平均值

    我有一个名为的元组列表data data A 2 B 2 B 4 B 6 B 8 B 6 B 4 B 3 C 10 C 10 C 10 D 12 E 12 F 10 F 8 F 6 average 我想要每个相同字母的平均值 预期输出 av
  • 线程之间的 Qt 连接类型:为什么会这样?

    在尝试使多摄像头系统与处理不同摄像头的不同线程一起工作时 我无法使信号和插槽在不同线程之间正常工作 我知道发送信号的对象和相关槽的对象位于不同的线程中 因此我知道我可能只需要为连接找到合适的 连接类型 参数 最终 我发现只有使用 Qt Di
  • 单独元素的边距如何影响固定元素的位置?

    我有两个独立的DIVs one position fixed用于通知栏 一个用于主容器 当我给出container some margin top 这也推送了我的通知栏 这是一个小提琴 http jsfiddle net Zh9k8 2 而
  • 将 OpenStreetMaps 与 Cordova 集成

    我想知道你们是否知道如何将开放街道地图 OSM 与科尔多瓦一起使用 这几天都在找 我能得出的结论是 我不应该直接使用 OSM 的 API 因为如果我有太多调用 他们的服务器会阻止我 所以有免费的开源名称 例如 1 Openlayers 2
  • Android 4.4.2 仅在完整的 Java 代码动画期间在视图对象边界外部创建黑色遮罩

    在这方面确实需要一些帮助 请看一下这个简单的 ImageView 淡入动画 使用完整的 java 代码 使用 API 21 18 17 16 重新创建它 效果非常好 现在尝试使用 API 19 android 4 4 2 创建有趣的掩码 参
  • Highcharts 仪表使工具提示可见并居中

    当屏幕大小调整时 我无法让 Highcharts 仪表的牙尖出现并保持可见并在仪表内居中 在我的小提琴中 您可以看到工具提示出现 然后在一小段时间后消失 此外 当调整窗口大小时 它不会保留在仪表的中心 任何帮助表示赞赏 我的JSFIDDLE
  • Flutter 将文件作为流读取

    我希望用户在文本字段中输入文本 当用户单击 fab 时 文本将作为新行写入文件 附加 我希望我的应用程序读取文件的内容 并将每一行显示为列表视图中输入文本字段下方的列表图块 当用户输入新文本时 该文本应立即出现在列表视图中 我能够将文本写入
  • 使用资源适配器调用大型机的 Jboss CICS 交互

    我已经在 J boss EAP 6 2 上安装了 cicseci rar 该资源适配器是从下载的http www 01 ibm com support docview wss uid swg24008817 sthash 3k4M8smo
  • 在不知道结构的情况下以通用方式读取 xml 文件/字符串

    我想将 XML 层次结构读入内存对象树中 XML 树可以有 n 层子级 我不知道确切的数字 我的内存中对象具有要绑定到树控件的子属性和父属性 当我不知道 xml 元素标签是如何准确调用 写入时 如何以通用方式将 xml 文件 字符串读取到内
  • 谁能解释一下 MySQL 外键

    我知道它们是什么 我的问题是 如何链接它们 或者当您在不同的表中具有相同的名称时它们是否会自动链接 这是一个例子 假设我有一个 orders 表和一个 customer 表 orders 表中的每一行都有一个 customer id 编号
  • QUIC 流量生成

    我想知道这个社区中是否有人知道 找到一种模拟 QUIC 流量配置文件的方法 为了通过 WLAN WiFi 分析 模拟 youtube 我想知道是否有像 iperf 这样方便的软件包 谢谢 巴拉特 CP 目前还没有任何模拟框架可用于测试 QU
  • 如何在颤动中添加选项卡顶部和底部

    顶部选项卡仅显示主页 并且通过滚动或点击显示 3 个不同的页面 底部选项卡则显示整个应用程序 如菜单 当我编写代码时 我会得到如下图所示的视图 但我无法点击或重定向页面 导航代码我只给出了顶部或底部选项卡 而不是两个选项卡 主页 dart