列表视图中的所有内容都会扩展到屏幕宽度。我可以改变这一点吗?

2024-02-04

我正在尝试为我正在制作的应用程序设计聊天屏幕。 为了使其可滚动,我将所有聊天消息放置在列表视图中。但是我放置在列表视图中的所有内容都会水平扩展以匹配屏幕宽度(Listview 小部件的宽度)。我可以关闭此功能,以便可以将我的聊天消息排列到一侧,并将另一条聊天消息排列到另一侧,就像在 Whatsapp 中一样吗?只要我可以滚动,除了 ListView 解决方案之外的任何解决方案都可以

这就是现在的样子。

这是我当前页面的代码。我真的希望有人能帮助我解决这个问题。

import 'package:flutter/material.dart';
//import '../../Library/Library.dart';
//import '../../Ui/ChatMessage.dart';

class ChatScreen extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
        return new ChatScreenState();
    }
}

class ChatScreenState extends State<ChatScreen> {

    bool overlayShouldBeVisible = false;

    @override
    Widget build(BuildContext context) {
        return new Stack(
            fit: StackFit.expand,
            children: <Widget>[
                new Scaffold(
                    appBar: new AppBar(
                        title: new Text(
                            'Chatroom name',
                            style: new TextStyle(
                                color: Colors.black,
                            ),
                        ),
                        centerTitle: true,
                        backgroundColor: Colors.white,
                        elevation: 0.0,
                    ),
                    body: new Column(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: <Widget>[
                            new Expanded(
                                child: new Container(
                                    decoration: new BoxDecoration(
                                        //image: new DecorationImage(image: new AssetImage('assets/backgroundChat.jpg',),fit: BoxFit.cover)
                                    ),
                                    child: new ListView(
                                        children: <Widget>[
                                            new Text('Test'),
                                            new Card(
                                                color: Colors.green,
                                                child: new Padding(
                                                    padding: new EdgeInsets.all(7.0),
                                                    child: new Column(
                                                        crossAxisAlignment: CrossAxisAlignment.end,
                                                        children: <Widget>[
                                                            new Text('Message'),
                                                            new Text('17:00'),
                                                        ],
                                                    ),
                                                ),
                                            ),
                                            new Card(
                                                color: Colors.green,
                                                child: new Padding(
                                                    padding: new EdgeInsets.all(7.0),
                                                    child: new Column(
                                                        crossAxisAlignment: CrossAxisAlignment.end,
                                                        children: <Widget>[
                                                            new Text('Message'),
                                                            new Text('17:00'),
                                                        ],
                                                    ),
                                                ),
                                            ),
                                        ],
                                    ),
                                ),
                            ),
                            new Container(
                                height: 50.0,
                                color: Colors.white,
                                child: new Row(
                                    crossAxisAlignment: CrossAxisAlignment.stretch,
                                    children: <Widget>[
                                        new Expanded(
                                            child: new Padding(
                                                padding: new EdgeInsets.only(left: 20.0),
                                                child: new TextField(),
                                            ),
                                        ),
                                        new Material(
                                            color: Colors.white,
                                            child: new InkWell(
                                                child: new Padding(
                                                    padding: new EdgeInsets.symmetric(horizontal: 20.0),
                                                    child: new Icon(
                                                        Icons.send,
                                                        color: Colors.blue,
                                                    ),
                                                ),
                                                onTap: () => print('send'),
                                            ),
                                        ),
                                    ],
                                ),
                            ),
                        ],
                    ),
                ),
                //overlayShouldBeVisible == true ? new JsonLoader(): new Container(),
                //Library.debugMode ? new DebugOverlay(): new Container(),
            ],
        );
    }
}

您可以使用Align https://docs.flutter.io/flutter/widgets/Align-class.html小部件将其子级与其父级对齐。

只需将列表节点(Card 实例)包装在Align.

 import 'package:flutter/material.dart';
//import '../../Library/Library.dart';
//import '../../Ui/ChatMessage.dart';

void main() {
  runApp(
    new MaterialApp(
      home: new ChatScreen(),
    ),
  );
}

class ChatScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new ChatScreenState();
  }
}

class ChatScreenState extends State<ChatScreen> {
  bool overlayShouldBeVisible = false;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(body: new ListView.builder(
      itemBuilder: (context, index) {
        return new Align(
          alignment: index.isEven ? Alignment.centerLeft : Alignment.centerRight,
          child: new Card(
            child: new Padding(
              padding: const EdgeInsets.all(8.0),
              child: new Text("Hello World $index"),
            ),
          ),
        );
      },
    ));
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表视图中的所有内容都会扩展到屏幕宽度。我可以改变这一点吗? 的相关文章

随机推荐

  • 为什么我的查询返回的结果很多?

    我有一群候选人 他们都做过一份或多份工作 每个人都有一家公司 使用一些技能 糟糕的 ASCII 艺术如下 candidate 1 candidate 2
  • Dapper 是否支持 SQL 2008 表值参数 2?

    我知道 dapper 可以支持 TVF 但是如何随 TVF 一起发送额外的参数 而不将其添加到 IntDynamicParam 类中 请参阅 Tests cs 中的以下示例 我已修改以添加额外参数 connection Execute CR
  • Angular 13:无法在浏览器中看到 Jasmine 测试

    我有一个新的 Angular 项目 其中每个测试都完成 但它们不会在业力窗口中显示任何内容 我的组件没有 预览 与描述的非常相似在这个问题中 https stackoverflow com questions 55521855 list o
  • 用于命令行构建的 MSBuild 与 devenv

    我想知道 从命令行编译解决方案时使用 msbuild 和 devenv 有什么区别 注意到的一件明显的事情是 msbuild 确实构建了解决方案中未包含的依赖项目 而 devenv 则不然 还有其他的吗 是否有一些特殊标志可以传递给 msb
  • Keras + mnist + 测试自己的图像。错误的预测

    通过测试 mnist 自己的测试图像 它工作得很好 但是一旦我使用来自外部 mnist 的图像 它就会预测错误 我什至尝试从 mnist 数据集中复制其中一张图像 但它仍然无法预测正确的数字 即使在 mnist 数据集中完全相同的图像是可以
  • 如何在 postgresql 中基于 wCTE 的 upsert 中获取表的受影响行数?

    我需要你的帮助 我有一个包含 n 次插入和更新循环操作的查询 我决定使用 UPSERT 因为它不需要循环操作 ex WITH upsert AS UPDATE employee table SET rollno input rollno n
  • didRegisterForRemoteNotificationsWithDeviceToken - 推送通知

    我只是想确认 didRegisterForRemoteNotificationsWithDeviceToken 是指每次应用程序加载时都会调用 并且我的 PHP 服务器或应用程序需要处理是否重新提交以存储在我的数据库中 或者我缺少什么 谢谢
  • 如何改变图像的大小?

    我正在创建一款太空入侵者游戏 我希望所有图像都与屏幕分辨率成比例 这意味着它可以在所有屏幕尺寸上使用 并且所有图像都会缩小或变大 以便适合屏幕 游戏是全屏的 做到这一点最简单的技术是什么 这也是设置所有内容大小的最佳方法吗 你看过吗图像 g
  • Fedora 中的 Arduino 上传错误“stk500_recv(): 程序员没有响应”

    我正在尝试上传库存Blink在 Fedora Core 15 Linux 中使用 Arduino IDE 绘制草图 我收到此错误 avrdude stk500 recv 程序员没有响应 要重现该问题 通过 USB 线插入 Arduino U
  • 在 Task.Run 中使用 CancellationToken 超时不起作用[重复]

    这个问题在这里已经有答案了 好吧 我的问题很简单 为什么这段代码不抛出TaskCancelledException static void Main var v Task Run gt Thread Sleep 1000 return 10
  • Rails 3 Active Admin 将预设值添加到新记录

    我尝试从控制器和活动管理覆盖控制器执行此操作 但无法使其工作 用户创建一个网站 current user 有一个 id 属性 网站有一个 user id 属性 因此 当我创建一个新网站时 我想将 current user id 添加到 we
  • 如何作为用户无法查看的电子表格的“所有者”执行谷歌脚本

    希望这是一个非常简单的问题 我制作了一个 Google 脚本 可以写入单独的工作表 MasterSheet 中的单元格 这里有几个有用的问答帮助 这最终将部署嵌入到我提供给个人用户的多个不同工作表中 当用户对 MasterSheet 具有编
  • 如何更可靠地使用SerialPort类

    我一直在使用SerialPort在与我设计的一些外部硬件通信的应用程序中学习一段时间 在上述硬件的调试过程中 我发现了一些不可靠的地方 最近我偶然发现this http www sparxeng com blog software must
  • CURRENT_TIMESTAMP 和 GETDATE() 之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别CURRENT TIMESTAMP and GETDATE 在 SQL Server 中 SELECT CURRENT TIMESTAMP GETDATE CURRENT TIMESTAMP是一个 AN
  • “标记”SVN 导出并进行修订

    我正在寻找以下情况的解决方案 我们使用 Subversion 除了使用签出的开发环境之外 我们还有一个测试环境 它应该尽可能类似于生产环境 因此 我们现在已将其设置为使用 SVN 导出来更新环境 但是 由于我们只想要最新版本 因此我们不知道
  • 如何在应用程序中将 NPM 模块与 Django 一起使用?

    我有一个包含 2 个应用程序的 Django 项目 我想在其中一个应用程序中使用 Notion API 因此我必须安装它的 NPM 模块 但是 我从未使用过 NPM 或捆绑器 我知道我必须使用一个用于导入语句 我不知道该怎么做 我应该在哪里
  • 如何始终在 api 平台 GET 操作中过滤特定字段值的集合?

    在 GET 操作中 我想从返回的集合中排除具有等于 true 的 archive 字段的实体 我希望它成为我的端点 例如 users 或 companies 的默认值 并且我想避免手动添加 URL 过滤器 例如 users filter a
  • boost::noncopyable 的 unordered_map 无法从操作符[]返回引用

    为了演示我的问题 请考虑这个无法编译的简单程序 include
  • 跨集群访问日志

    我有一个包含 3 个节点的集群 我已经配置了应用程序服务器的数据库 我想知道集群中各主机生成的访问日志是否相同 或者每个主机都有一个单独的 访问日志 用于记录对其主机的请求 我知道集群中的每个主机都维护自己的审核日志文件 访问日志的工作方式
  • 列表视图中的所有内容都会扩展到屏幕宽度。我可以改变这一点吗?

    我正在尝试为我正在制作的应用程序设计聊天屏幕 为了使其可滚动 我将所有聊天消息放置在列表视图中 但是我放置在列表视图中的所有内容都会水平扩展以匹配屏幕宽度 Listview 小部件的宽度 我可以关闭此功能 以便可以将我的聊天消息排列到一侧