我有以下代码:

import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  final String longText = '''
Vestibulum dapibus sit amet ante et vehicula. Aliquam erat volutpat. 
Pellentesque ut velit odio. Nam varius interdum urna ac gravida. 
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
Curabitur dapibus in enim nec porta. Praesent tortor diam, tempus a massa eget, mattis imperdiet tellus. 
Aliquam porta pellentesque tellus sit amet dapibus. 
Vivamus dolor dui, dapibus sed risus ac, pellentesque convallis mauris. 
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus egestas metus eget ipsum pretium scelerisque. 
Nulla tempus ligula venenatis faucibus suscipit. 
Aenean est tortor, elementum fermentum ullamcorper a, consectetur nec erat.

Quisque tincidunt finibus metus, eget vulputate turpis volutpat ac. 
Vivamus consectetur at ligula ac semper. Duis a justo sed tortor egestas sodales sed vitae sem. 
Mauris efficitur finibus lectus quis lacinia. 
Mauris velit odio, finibus et ipsum et, maximus iaculis diam. 
Phasellus ligula mi, gravida in enim et, fermentum tempus quam. 
Integer fermentum orci risus, eget aliquam nulla posuere eu. 
Donec dictum tristique nunc, in ullamcorper mi pulvinar ac. 
Integer sit amet laoreet nisi. Donec aliquet nibh nec rutrum aliquet. 
Mauris rutrum non ipsum et volutpat.
''';

  final String shortText =
      'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris venenatis hendrerit lectus sit amet venenatis.';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home Page'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Expanded(
              child: Text(
                longText,
              ),
            ),
            Expanded(
              child: Container(
                color: Colors.teal,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

输出如下:

enter image description here

这很好(Text的一半空间,Container的另一半空间)和我想要的,但更长的文本.如果我有一个更短的文本,如下所示:

child: Text(
  shortText,
),

然后输出将如下所示:

enter image description here

TextContainer之间有一个空白的空间,我知道这是因为Expanded.但我想让Container填补剩余的空间,直到Text的最后一行.但同样,如果Text更大,那么TextContainer都应该像第一张照片一样占据半个屏幕.

如果我将Text的父Expanded替换为Flexible,则它将如下所示:

enter image description here

这是接近我想要的,但再次,有一个空的空间低于Container.

推荐答案

只要让Container填满所有剩余的空间,并限制Text的最大高度.

您可以使用LayoutBuilder来控制子对象的大小,具体取决于父对象的大小.

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  // definition of long and short texts

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home Page'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: LayoutBuilder(
          builder: (context, constraints) => Column(
            children: [
              Container(
                constraints: BoxConstraints(maxHeight: constraints.maxHeight / 2),
                child: Text(longText),
              ),
              Expanded(child: Container(color: Colors.teal)),
            ],
          ),
        ),
      ),
    );
  }
}

我希望它能帮上忙.

Flutter相关问答推荐

Cupertino Buttino SheetAction on按下可触发加载指示器,然后勾选并延迟

Flutter—如何在Riverpod中使用全类状态?

如何让一个名为ONTAP的回调函数、另一个名为onTapDown的回调函数和另一个名为onTapUp的回调函数不重叠?

为什么Flutter InAppWebView中的DatePicker看起来很旧?

在fltter_widget_from_html中启动url

如何将 colored颜色 阴影作为默认容器 colored颜色 应用于自定义窗口小工具?

如何组合匹配器

如何在容器小部件中的图像旁边添加文本?

为什么PUT方法没有发出任何响应?

FOR回路中的Flutter 模型

从图标启动器打开时,VSCode未检测到Web设备

带有命名参数的回调函数不起作用

Flutter:我的应用程序是否需要包含退款购买?

GridView 渲染项目之间有微小的间隙

我在手机上找不到我的 Flutter 应用缓存数据

忽略异步函数上的 context.mounted 访问 linting 错误是否安全?

如何从另一个页面访问 Firebase 值?

如何更改中心的圆形进度指示器

如何在Flutter 中制作自定义微调器?

如何将 pushNamed 与 Dismissible Widget 一起使用并查看背景透明第一页