flutter 中的多选项卡/页面视图

2024-02-26

如何在 flutter 中创建多页面视图,其中页面对应于底部导航栏中的选项卡,以便与页面对应的小部件仅按需构建一次。

例如,考虑一个简单的 facebook 应用程序类型的 UI,带有两个选项卡 - 提要和具有以下行为的通知:

  1. 提要和通知都是通过网络获取的项目列表。
  2. 假设原始选项卡是 feed,则仅当用户单击通知选项卡时才应获取通知
  3. 如果用户在提要中滚动,然后单击通知图标,然后再次单击提要图标,则应记住滚动位置。

如果我使用 TabBarView,每次更改选项卡时它都会重建小部件,因此不会保留滚动位置。


给出的页面TabBarView一个独特的滚动位置存储容器,使用PageStorageKey.

import 'package:flutter/material.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  State createState() => new MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
  TabController _controller;
  int _tab = 0;

  @override
  void initState() {
    _controller = new TabController(length: 2, vsync: this);
  }

  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('Example App')),
      body: new TabBarView(
        controller: _controller,
        children: <Widget>[
          new ListView.builder(
            key: new PageStorageKey('feed'),
            itemBuilder: (BuildContext context, int index) {
              return new ListTile(
                title: new Text('Feed Item $index'),
              );
            },
          ),
          new ListView.builder(
            key: new PageStorageKey('notifications'),
            itemBuilder: (BuildContext context, int index) {
              return new ListTile(
                title: new Text('Notification $index'),
              );
            },
          ),
        ],
      ),
      bottomNavigationBar: new BottomNavigationBar(
        onTap: (int value) {
          _controller.animateTo(value);
          setState(() {
            _tab = value;
          });
        },
        currentIndex: _tab,
        items: <BottomNavigationBarItem>[
          new BottomNavigationBarItem(
            icon: new Icon(Icons.home),
            title: new Text('Home'),
          ),
          new BottomNavigationBarItem(
            icon: new Icon(Icons.notifications),
            title: new Text('Notifications'),
          ),
        ],
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter 中的多选项卡/页面视图 的相关文章

  • 如何让 BottomNavigationBar 粘在键盘颤动的顶部

    我正在尝试制作一个简单的聊天应用程序 所以我创建了一个脚手架和我的身体 将是消息和我的bottomNavigationBar将是我的打字字段和发送图标 我添加了一个文本字段 但键入时导航栏被键盘隐藏 这是我的代码BottomNavigati
  • Flutter“Mailer”API 多图像附件

    我正在制作一个简单的应用程序 用于从用户获取个人信息和图像数量 然后通过后端邮件 API 通过一键单击按钮发送它们 到目前为止 我可以通过邮件获取和发送 FormData 但我不知道如何发送图像数组 我已经尝试了几个 API 但 Maile
  • flutter stepper 小部件 - 验证各个步骤中的字段

    我正在使用步进器小部件来收集用户信息并对其进行验证 我需要在每个步骤调用 API 因此在每个继续按钮的步骤中验证每个字段 我正在使用表单状态和表单小部件 但是问题是它验证步进器中所有步骤中的整个字段 我如何仅验证步进器中的单个步骤 我浏览了
  • Flutter中如何在弹出屏幕后调用函数更新值?

    屏幕 1 显示带有添加按钮的项目列表 屏幕 2 用于将新项目添加到列表的表单 屏幕 2 gt gt 屏幕 1 在屏幕 2 中调用 navigator pop 时 如何在屏幕 1 中调用方法 setState 更新列表 谁能帮我吗 我不想再次
  • 如何取消配置 flutterfire?

    我们在 CLI 中使用以下命令将 flutter 应用程序与 firebase 连接 flutterfire configure 如文档中所述 https firebase flutter dev docs overview https f
  • 如何在 Flutter 中更新 AnimatedList 中的数据

    如何在 Flutter 中更新 AnimatedList 中的数据 添加 删除行 我可以在 ListView 中通过更新支持数据并调用来完成此操作setState 例如 setState data insert 2 pig 不过 在 Ani
  • Charts_flutter x 轴上的标签/文本相互重叠

    我使用flutter中的charts flutter包渲染条形图 但 x 轴上的域标签相互重叠 我有办法解决这个问题吗 有没有办法倾斜文本或增加图表的宽度 使其可以水平滚动 我尝试过寻找任何解决方案 例如 labelspecs 但无法找到解
  • Flutter:在 GridView 平铺中使用 GestureDetector 进行点击延迟

    通常 以下行为本质上是快速的 然而 在 GridView 或我假设的任何 ScrollView 也尝试过 ListView 内 性能似乎非常差 当我点击屏幕时 容器的不透明度会增加 但会出现延迟 知道我缺少什么吗 import packag
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • Android Gradle 问题 - Flutter / Dart

    我的 Gradle 同步有问题 我使用 IntelliJ 和 Android Studio 构建 Flutter Dart 应用程序 我添加了 2 个新的依赖项 现在 Gradle 出现了问题 在 Android Studio 中一切正常
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 如何防止 Visual Studio Code Flutter/Dart 编辑器格式化新行/换行代码?

    我最近开始研究 Flutter Dart 我喜欢保存时自动格式化 Flutter 但有一件事可能相关也可能不相关 那就是长代码的代码包装 即使代码仍然适合我的 4k 编辑器窗口 有没有办法防止换行但保持逗号自动格式 Thanks 请按照以下
  • 如何在flutter中绕过SSL证书验证?

    如何在flutter中绕过SSL证书验证 错误 握手异常 客户端中的握手错误 操作系统错误 CERTIFICATE VERIFY FAILED 自签名证书 handshake cc 345 您需要配置 HttpService 以使用自签名
  • Flutter Google 登录 - 电子邮件信息未发送至 Firebase(返回空白)

    当我在 Flutter 上制作的应用程序中使用 google 登录时 电子邮件以空值返回到 firebase 我在运行时或登录时没有收到任何错误 我对 pubspec yaml 文件上的 google sign in 版本进行了更改 但结果
  • Flutter编译错误:必须返回非空值,因为返回类型“String”不允许为空 - displayString

    我的测试无法在我的 Flutter 项目引用的仅 Dart 项目中编译和运行 我收到以下错误消息 Failed to precompile test test pub cache hosted pub dartlang org analyz
  • 如何更改 ElevatedButton 颜色或阴影 Flutter

    我当时用的是RaisedButton直到 Flutter 弃用了它 我们不能再使用它了 有一个建议说 使用ElevatedButton相反 所以我尝试使用它 但我看不到类似的属性color elevation focusColor etc
  • 如何在 Flutter Provider 中删除 StreamController 中的数据?

    我正在使用provider来构建我的应用程序 因此数据被添加到StreamController中 每次刷新我的应用程序时 它都会调用API 然后将数据推送到StreamController 问题是如何在替换之前删除数据新的那一个 contr
  • 如何将额外的文本添加到颤振谷歌地图自定义标记中?

    问题是如何将自定义谷歌地图标记上的文本重叠与代表车辆登记号的文本融合在一起 我尝试使用此方法将文本叠加在图标上 生成器 上下文 gt 但根本不被认可 class MapsDemo extends StatefulWidget overrid
  • Flutter Firestore - 如何从文档字段中的文档引用获取数据?

    我正在构建一个具有不同问题类型的自学应用程序 现在 其中一个问题有一个包含文档参考列表的字段 在 Flutter 中 我有以下代码 Query
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留

随机推荐