如何在 Flutter 中单击另一个扩展图块后折叠已打开的扩展图块?

2024-03-21

我在我的应用程序中使用多个扩展图块。我需要在单击另一个图块后关闭已打开的图块。我尝试过使用默认情况下具有该功能的扩展面板。但我需要重新设计扩展瓷砖,所以我使用扩展瓷砖。如何在扩展磁贴中实现该功能


这个答案在 GitHub 上 https://github.com/flutter/flutter/issues/7024#issuecomment-578124918应该可以解决问题。

这是示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ExpansionTile Collapse',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'ExpansionTile Collapse'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // selected's value = 0. For default first item is open.
  int selected = 0; //attention

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text('ExpansionTile Collapse',
            style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
      ),
      body: Container(
        color: Colors.white,
        child: SingleChildScrollView(
          child: Column(children: [
            ListView.builder(
              key: Key('builder ${selected.toString()}'), //attention
              padding: EdgeInsets.only(left: 13.0, right: 13.0, bottom: 25.0),
              shrinkWrap: true,
              physics: NeverScrollableScrollPhysics(),
              itemCount: 5,
              itemBuilder: (context, index) {
                return Column(children: <Widget>[
                  Divider(
                    height: 17.0,
                    color: Colors.white,
                  ),
                  ExpansionTile(
                    key: Key(index.toString()), //attention
                    initiallyExpanded: index == selected, //attention

                    leading: Icon(
                      Icons.person,
                      size: 50.0,
                      color: Colors.black,
                    ),
                    title: Text('ExpansionTile ${index}',
                        style: TextStyle(
                            color: Color(0xFF09216B),
                            fontSize: 17.0,
                            fontWeight: FontWeight.bold)),
                    subtitle: Text(
                      'Software Engineer',
                      style: TextStyle(
                          color: Colors.black,
                          fontSize: 13.0,
                          fontWeight: FontWeight.bold),
                    ),
                    children: <Widget>[
                      Padding(
                        padding: EdgeInsets.all(25.0),
                        child: Text(
                          'DETAİL ${index} \n' + 'Expanded',
                        ),
                      )
                    ],
                    onExpansionChanged: ((newState) {
                      if (newState)
                        setState(() {
                          Duration(seconds: 20000);
                          selected = index;
                        });
                      else
                        setState(() {
                          selected = -1;
                        });
                    }),
                  ),
                ]);
              },
            )
          ]),
        ),
      ),
    );
  }
}

实际输出:

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

如何在 Flutter 中单击另一个扩展图块后折叠已打开的扩展图块? 的相关文章

随机推荐

  • SQL NOT IN 可能存在性能问题

    我正在尝试重构几段旧代码 我已经重构了下面的当前代码并突出显示了NOT IN语句导致性能问题 我正在尝试重写NOT IN具有左外连接的部分 如果可能的话 任何人都可以帮忙 或者建议更好的方法吗 SELECT left unique id 1
  • 有没有流畅的WPF项目? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 作为我不断尝试使用 WPF XAML 的一部分 我对 UI 编码中流畅界面的应用产生了兴趣 我知道 Fluent Silverlight http c
  • 在 BeforeClose 事件期间保存 Word 文档时,并不总是触发 Shutdown 事件

    我有一个 Microsoft Word 插件 使用VSTO and c 对于每个文档 我使用文档 ShutDown 事件来清理我的父对象 并使用 BeforeClose 事件来对我的父对象进行预关闭验证 我的验证需要保存文档并尝试在 Bef
  • 在 Android 中选择 EGL 配置的正确方法是什么?

    我正在使用自己的 GLSurfaceView 并且一段时间以来一直在努力解决与 EGL 配置选择器相关的崩溃问题 似乎通过调用请求 RGB 565setEGLConfigChooser 5 6 5 0 16 0 应该是最受支持的 然而 使用
  • 上课需要记忆吗?

    class Test int x int main cout lt lt sizeof Test return 0 输出 4我只是想问 即使我没有创建 Test 类的任何对象 为什么它会打印 4 sizeof X 是字节数X创建时需要 致电
  • 使用 Apache AGE 制作最短路径

    我一直在阅读 Jasper Blues 的博客文章 使用 NEO4J 进行摇滚式流量路由 https medium com neo4j rock n roll traffic routing with neo4j 3a4b863c6030但
  • 我应该如何在 axios GET 请求中发送 JWT 令牌? [复制]

    这个问题在这里已经有答案了 我是 Vue js 新手 想要在组件中向受限 api 发出请求 computed token return this store getters getToken created axios get this B
  • 函数构造函数和原型构造函数有什么区别?

    我想知道这有什么区别 MyClass function MyClass prototype Foo function and this MyClass MyClass prototype constructor function MyCla
  • 如何在androidsharedPreference中存储类对象?

    我想将类对象存储在android共享首选项中 我对此进行了一些基本搜索 得到了一些答案 例如使其可序列化对象并存储它 但我的需求非常简单 我想存储一些用户信息 例如姓名 地址 年龄和布尔值是否处于活动状态 我为此创建了一个用户类 publi
  • asp.net mvc 按名称和区域查找控制器

    我的目标是从控制器的名称和区域中找到控制器 如果我当前的httpContext与待找到的控制器位于同一区域内 但是 我无法拨打电话ControllerFactory考虑面积 这是我的代码 public static ControllerBa
  • 匹配 JavaScript 中除特定模式之外的所有内容

    经过多次搜索 我仍然感到困惑 如何匹配字符串中除与给定模式匹配的内容之外的所有内容 我找到了使用以下方法否定特定单词或字符集的解决方案 或负面展望 但我需要一个解决方案来否定任何与特定模式匹配的内容 示例文本 html 片段 abcd ef
  • java.lang.IllegalStateException:指定的子级已经有父级

    当我第一次实例化一个片段时 我正在使用片段 但第二次我遇到了这个例外 我找不到出错的行 04 04 08 51 54 320 E AndroidRuntime 29713 FATAL EXCEPTION main 04 04 08 51 5
  • GPU 上非原子写入的保证很弱吗?

    OpenCL 和 CUDA 包含原子操作已有好几年了 尽管显然并非每个 CUDA 或 OpenCL 设备都支持这些操作 但是 我的问题是关于由于非原子写入而 共存 种族的可能性 假设网格中的多个线程都写入全局内存中的同一位置 我们是否可以保
  • Swing 如何以编程方式关闭 JPanel

    我的主类扩展了 JPanel 我在这个面板上创建了一个表格和一个按钮 现在我想在用户按下它时关闭这个面板 互联网上的关闭示例是关于 JFrame 的 JPanel 有解决方案吗 有一个面板 面板上有一个表格和一个按钮 我向按钮添加一个动作侦
  • 上传图片并上传后查看

    我正在尝试在 Angular 5 2 和 Laravel 5 5 中上传个人资料图片 我可以成功地将图像上传到本地存储中的单独文件夹 然后我想像在 Facebook 中一样显示上传的图像 然后我可以查看上传的图像 但它没有上传到文件夹 这是
  • Django - 新字体?

    如何使用 Django 安装新字体 文档中没有提及这一点 我将字体安装在静态文件夹中 例如 fonts abc ttf 例如 在模板中 如果这是一个 CSS 我会这样链接它 但这不是 CSS 而且我还没有找到任何有关如何执行此操作的资源 我
  • Java 中的最终接口?

    Java中的接口可以声明为final吗 接口是 100 抽象的 创建接口实例的唯一方法是实例化实现它的类 允许接口final完全没有意义 EDIT这些问题并不像我最初想象的那么令人震惊 最终接口是不能由其他接口扩展但表面上可以实现的接口 我
  • Google 电子表格脚本问题 - 错误:服务超时:Apps 脚本

    我一直在尝试编写一个快速的谷歌脚本来计算婚礼邀请回复电子表格的回复人数 随着新条目添加到电子表格中 该脚本完美运行了一周 然后突然停止工作 每个单元格中出现以下错误消息 错误 服务超时 Apps 脚本 脚本本身很简单 它查询相关列 有多个事
  • Google App Engine 尝试访问开发数据

    我在本地计算机上运行我的应用程序 并使用远程 API 访问生产端的数据存储区 一切都工作得很好 直到我尝试在谷歌应用程序引擎启动器中添加第二个应用程序 我相信这就是导致问题的原因 因为我必须将我正在处理的内容与一些更新的代码合并 并想在我去
  • 如何在 Flutter 中单击另一个扩展图块后折叠已打开的扩展图块?

    我在我的应用程序中使用多个扩展图块 我需要在单击另一个图块后关闭已打开的图块 我尝试过使用默认情况下具有该功能的扩展面板 但我需要重新设计扩展瓷砖 所以我使用扩展瓷砖 如何在扩展磁贴中实现该功能 这个答案在 GitHub 上 https g