Flutter 中垂直 ScrollView 内的水平 ListView

2024-02-02

我现在试图实现一个非常常见的行为,即在另一个可同时滚动的小部件中拥有一个水平列表。想象一下 IMDb 应用程序的主屏幕:

所以我想要一个可以垂直滚动的小部件,上面只有很少的项目。在它的顶部,应该有一个水平的ListView,随后是一些名为motivationCard。列表和卡片之间也有一些标题。

我的身上有这样的东西Widget:

@override
  Widget build(BuildContext context) => BlocBuilder<HomeEvent, HomeState>(
        bloc: _homeBloc,
        builder: (BuildContext context, HomeState state) => Scaffold(
              appBar: AppBar(),
              body: Column(
                children: <Widget>[
                  Text(
                    Strings.dailyTasks,
                  ),
                  ListView.builder(
                    scrollDirection: Axis.horizontal,
                    itemCount: tasks.length,
                    itemBuilder: (BuildContext context, int index) =>
                        taskCard(
                          taskNumber: index + 1,
                          taskTotal: tasks.length,
                          task: tasks[index],
                        ),
                  ),
                  Text(
                    Strings.motivations,
                  ),
                  motivationCard(
                    motivation: Motivation(
                        title: 'Motivation 1',
                        description:
                        'this is a description of the motivation'),
                  ),
                  motivationCard(
                    motivation: Motivation(
                        title: 'Motivation 2',
                        description:
                        'this is a description of the motivation'),
                  ),
                  motivationCard(
                    motivation: Motivation(
                        title: 'Motivation 3',
                        description:
                        'this is a description of the motivation'),
                  ),
                ],
              ),
            ),
      );

这是我得到的错误:

I/flutter (23780): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (23780): The following assertion was thrown during performResize():
I/flutter (23780): Horizontal viewport was given unbounded height.
I/flutter (23780): Viewports expand in the cross axis to fill their container and constrain their children to match
I/flutter (23780): their extent in the cross axis. In this case, a horizontal viewport was given an unlimited amount of
I/flutter (23780): vertical space in which to expand.

我努力了:

  • 用一个包装 ListViewExpanded widget

  • 包裹柱子SingleChildScrollView > ConstrainedBox > IntrinsicHeight

  • Having CustomScrollView作为父母,带着SliverList和列表内SliverChildListDelegate

这些都不起作用,我继续遇到同样的错误。这是一件很常见的事情,不应该有什么困难,不知何故我就是无法让它工作:(

任何帮助将不胜感激,谢谢!

Edit:

我想this https://medium.com/flutterpub/flutter-listview-gridview-inside-scrollview-68b722ae89d4可以帮助我,但没有。


好吧,你的代码可以很好地包装你的-ListView.builder with Expanded小工具& 环境mainAxisSize: MainAxisSize.min, of Column Widget.

您所拥有的 E.x 代码。

 body: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          Text(
            'Headline',
            style: TextStyle(fontSize: 18),
          ),
          Expanded(
            child: ListView.builder(
              shrinkWrap: true,
              scrollDirection: Axis.horizontal,
              itemCount: 15,
              itemBuilder: (BuildContext context, int index) => Card(
                    child: Center(child: Text('Dummy Card Text')),
                  ),
            ),
          ),
          Text(
            'Demo Headline 2',
            style: TextStyle(fontSize: 18),
          ),
          Expanded(
            child: ListView.builder(
              shrinkWrap: true,
              itemBuilder: (ctx,int){
                return Card(
                  child: ListTile(
                      title: Text('Motivation $int'),
                      subtitle: Text('this is a description of the motivation')),
                );
              },
            ),
          ),
        ],
      ),

Update:

整个页面可滚动 -SingleChildScrollView.

body: SingleChildScrollView(
  child: Column(
    mainAxisSize: MainAxisSize.min,
    children: <Widget>[
      Text(
        'Headline',
        style: TextStyle(fontSize: 18),
      ),
      SizedBox(
        height: 200.0,
        child: ListView.builder(
          physics: ClampingScrollPhysics(),
          shrinkWrap: true,
          scrollDirection: Axis.horizontal,
          itemCount: 15,
          itemBuilder: (BuildContext context, int index) => Card(
                child: Center(child: Text('Dummy Card Text')),
              ),
        ),
      ),
      Text(
        'Demo Headline 2',
        style: TextStyle(fontSize: 18),
      ),
      Card(
        child: ListTile(title: Text('Motivation $int'), subtitle: Text('this is a description of the motivation')),
      ),
      Card(
        child: ListTile(title: Text('Motivation $int'), subtitle: Text('this is a description of the motivation')),
      ),
      Card(
        child: ListTile(title: Text('Motivation $int'), subtitle: Text('this is a description of the motivation')),
      ),
      Card(
        child: ListTile(title: Text('Motivation $int'), subtitle: Text('this is a description of the motivation')),
      ),
      Card(
        child: ListTile(title: Text('Motivation $int'), subtitle: Text('this is a description of the motivation')),
      ),
    ],
  ),
),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 中垂直 ScrollView 内的水平 ListView 的相关文章

随机推荐

  • unique_ptr 提升等效吗?

    boost 库中是否有 C 1x 的 std unique ptr 的等效类 我正在寻找的行为是能够拥有一个异常安全的工厂函数 就像这样 std unique ptr create base return std unique ptr ne
  • 类似 Prezi 的网络界面。 Flash 还是 HTML5?

    我想编写一个用户体验类似于 Prezi com 的 Web 界面 为此目的最好的技术是什么 项目要求 快速实施 这是一个演示 我希望有一个粗略的估计 大量数据 需要动态内容加载 卸载 我的自然选择是 Flash 和 HTML5 Prezi
  • Microsoft JScript 运行时错误:无法设置属性“control”的值:对象为 null 或未定义

    I am Developing a web application by using ASP NET 3 5 jQuery and RadAjax Telerik Control I get Error Messages when page
  • Javascript 将 onclick 事件附加到所有链接

    我想在网站上的每个链接上附加一个函数来更改参数 如果没有 jQuery 我该如何做到这一点 如何遍历每个链接 可能是 DOM 项 并调用它们的函数 奇怪的是没有人提供使用事件冒泡的替代解决方案 function callback e var
  • Flask - 无法使用其他文件中的 Flask 和 Flask-mail 实例

    我目前正在使用 Flask 构建一个应用程序 我正在努力访问 Flask 实例 app 以及 Flask mail 实例 mail 下面是我的项目的样子 my project application init py admin init p
  • SWT 复合 - 重绘问题

    我有一个复合元素 最初有一个标签 现在 我对其 标签 调用 dispose 并在同一容器 复合榆树 中创建另一个标签 但我没有看到新文本 这让我想到如何在复合材料上启用重绘 以便新标签 或我可能创建的任何其他组件 将代替旧标签进行渲染 这是
  • 为什么要使用 String.Equals 而不是 == ? [复制]

    这个问题在这里已经有答案了 我最近接触到了一个大型代码库 并注意到所有字符串比较都是使用String Equals 代替 您认为这是什么原因 很可能大部分开发人员都具有 Java 背景 其中使用 比较字符串是错误的并且不起作用 在 C 中
  • Spring Boot 消耗过多 RAM

    我在 Spring Boot 中创建了一些服务 我有 11 个 fat jar 并将它们部署在 docker 容器中 我怀疑每个 jar 都消耗了 1 到 1 5 GB 的 RAM 而没有任何使用 我通过运行以下命令来检查 RAM dock
  • EL 和协变返回类型

    我有这些课程 public abstract class Unit public abstract UnitType getType public class Item extends Unit protected ItemType typ
  • C# 与非托管 C++ 互操作性的延续传奇

    经过一天的头撞墙之后 我恳求帮助 我有一个非托管 C 项目 它被编译为 DLL 我们就这样称呼它吧光热发电项目 它目前在非托管环境中运行 另外 我还创建了一个WPF项目 该项目将被称为WPF项目 该项目是一个简单且目前几乎是空的项目 它包含
  • 向 Angular 4 添加第三方资源

    一般来说 我更喜欢添加第三方资源 angular cli json styles bower components animate css animate css bower components chosen chosen css bow
  • Android 上的关键字激活语音识别

    是否可以在您自己的应用程序中使用 google now 这个很酷的语音激活功能 所以我想要的是用户不必通过按下按钮或其他东西来触发激活 像那样 我宁愿有一个由关键字激活的自动语音识别功能 例如 当 google now 打开时 您只需说 g
  • Android:在 ActionBarSherlock 库中 getSupportActionBar() 始终返回 null

    我正在尝试使用动作栏夏洛克 https github com JakeWharton ActionBarSherlock库来为我的 Android 应用程序中的选项卡提供向后兼容的 ActionBar 支持 因此我下载了最新版本 构建了演示
  • 无法在项目 inv-project 上执行目标 org.codehaus.mojo:rpm-maven-plugin:2.0.1:rpm (default-cli)

    我在创建 Maven 项目的 RPM 时收到以下错误 我能够成功打包 Jar 但 RPM 创建失败 Note 我正在 Windows 7 上尝试 WARNING operable program or batch file INFO INF
  • 在哪里存储要执行的 SQL 命令

    由于内联 mysql 查询 我们面临代码质量问题 自己编写的 mysql 查询确实会使代码变得混乱 并且还会增加代码库等 我们的代码充满了类似的东西 beautify ignore start jshint ignore start var
  • 使 Meteor 方法同步

    我一直在尝试使这个功能同步 我读过几篇关于异步的 Stack Overflow 帖子 但我无法理解如何使其同步 到目前为止 它是异步的 因此在进入回调函数之前它会返回未定义 我从客户端调用它 Meteor call screenName f
  • 从 docker 容器连接到 SQL Server 数据库

    我的机器上安装了 docker for windows 有一个针对 net core 1 0 0 的控制台应用程序尝试访问在不同虚拟机上运行的 SQL Server 数据库 我可以从我的计算机上 ping 运行 SQL Server 的虚拟
  • 实体框架多对多映射上的软删除

    我有一个多对多 EF 映射 类似于下面的示例 我使用 EF 代码优先方法 因此我的映射类继承 EntityTypeConfiguration this HasMany a gt a KPIs WithMany Map a gt a ToTa
  • 具有不完整类型目标 C 的变量

    我试图将枚举作为方法签名的一部分 但在 h 文件中出现了这个可怕的错误 Declaration of enum CacheFile will not be visible outside this function 我的 h 文件中有这个
  • Flutter 中垂直 ScrollView 内的水平 ListView

    我现在试图实现一个非常常见的行为 即在另一个可同时滚动的小部件中拥有一个水平列表 想象一下 IMDb 应用程序的主屏幕 所以我想要一个可以垂直滚动的小部件 上面只有很少的项目 在它的顶部 应该有一个水平的ListView 随后是一些名为mo