我想创建一个应用程序,在容器中显示有时较短、有时较长的文本。在构建小部件以适应屏幕大小后,此容器不应改变大小。文本本身来自数据库,我不知道它可以有多长。
当我在容器中打印文本时,有时它适合,有时上下有很多空间,当文本很短时,或者有时文本溢出并且不可见。
我希望,文本大小会自动更改以适应容器。 Container with overflow
flutter 包 Auto-Size-Text 对我不起作用,因为我只能调整文本大小以适应宽度或设置最大行,我也不知道。
这是我的代码简化:
AutoSizeText autotext = AutoSizeText(text, style: style, textAlign: TextAlign.center, presetFontSizes: [25.0,22.0,20.0,18.0], semanticsLabel: text);
Container(
child: autotext
);
最佳答案
TL;博士:
您的 AutoSizeText小部件可能具有无限约束。
如果它被包裹在 Column 中,就会出现这种情况。 , Row , ListView或类似的东西。
要解决此问题,请将其包装在 Expanded 中小部件。
为了回答这个问题,我们需要了解 Flutter 是如何进行布局的。
基本上,框架请求顶部小部件的高度和宽度(称为“尺寸”),该框架提供最小和最大宽度和高度(称为“约束”)。
为了计算它的尺寸,小部件会根据一些约束询问他们的 child 他们想要什么尺寸。
因此,每个小部件都被告知约束并返回这些约束内的具体维度。
小工具如 ListView或 Column不想过多地影响他们 child 的尺寸——他们应该尽可能地小。
为了传达这一点,它们的最大宽度/高度为 double.infinity ,告诉他们他们应该默认为他们的“自然”/默认尺寸。这种类型的约束称为“无界”。
这是一个 Google Tech Talk video about Flutter's rendering pipeline ,其中更详细地描述了所有这些。
考虑到这个过程,让我们看看你的小部件在布局过程中的表现:
在对您帖子的评论中,您说有一个 Column小部件,所以我假设有一个 Column包含 Container ,它又包含 AutoSizeText小部件。
如果不是 Column ,有一个 Row或 ListView或类似的东西,过程基本相同。Column希望它的 child 尽可能小,所以它向所有 child 传递了无限约束。
作为这些 child 之一,Container接收那些无界约束。
因为Container本身只是一个包装类,它只是将这些约束传递给它的子类 AutoSizeText .AutoSizeText接收无界约束。
Looking at its source code ,我们可以看到它以默认文本大小开始并检查它是否适合(调用 _checkTextFits )。
如果不适合,则减小文本大小并重复此过程,直到文本小到足以适应给定的约束。
因为在您的情况下,约束是未绑定(bind)的,文本适合第一次尝试 - 这意味着小部件仅使用默认大小。
确定文本大小后,它可以计算文本的尺寸并将它们返回到树中。Container接收这些尺寸。
因为它只是一个包装类,它只是依次将它们返回给它的父类。
最后,Column接收尺寸和尺寸本身(可能添加其他 child 的尺寸)。
解决方案
您不想将无限约束传递给 AutoSizeText小部件,因为这首先违背了小部件的目的——将文本拟合到有界约束中。
您可以通过对 Container 进行硬编码来确认这是问题所在。的宽度和高度,这应该使 AutoSizeText小部件正确调整文本大小。
如果Container放置在 Column 内或类似的东西,您始终可以通过将其包装在 Expanded 中来绑定(bind)约束。 .
为什么该解决方案有效 Column检查它的哪些 child 是 Expanded小部件。
它首先布置所有其他小部件。
只有这样,它才会在 Expanded 之间划分剩余空间。小部件根据他们的 flex因素(这本身就是另一个话题)。
这意味着 Expanded s 的 child 将收到有界约束。
如果您包装您的 Container在 Expanded它是 Column 中唯一的扩展,它应该占用所有剩余空间,并将文本完美地放入其内部。
关于dart - 自动调整文本以垂直适应容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882591/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
1.upto(9){|x|printx}为什么这行不通?{printx|x}}y呢? 最佳答案 它用于传递给您的block的参数。即在您的示例中,upto将使用1到9中的每个数字调用您的block,当前值可作为x获得。block参数可以有任何名称,就像方法参数一样。例如1.upto(9){|num|putsnum是有效的。就像一个方法的参数一样,一个block也可以有多个参数。例如hash.each_pair{|key,value|puts"#{key}is#{value}"} 关于ru
我有这个代码:context"Visitingtheusers#indexpage."dobefore(:each){visitusers_path}subject{page}pending('iii'){shouldhave_no_css('table#users')}pending{shouldhavecontent('Youhavereachedthispageduetoapermissionic错误')}它会导致几个待处理,例如ManagingUsersGivenapractitionerloggedin.Visitingtheusers#indexpage.#Noreason
我一直在玩一个脚本,它在Chrome中获取选定的文本并在Google中查找它,提供四个最佳选择,然后粘贴相关链接。它以不同的格式粘贴,具体取决于当前在Chrome中打开的页面-DokuWiki打开的DokuWiki格式,普通网站的HTML,我想要我的WordPress所见即所得编辑器的富文本。我尝试使用pbpaste-Preferrtf来查看没有其他样式的富文本链接在粘贴板上的样子,但它仍然输出纯文本。在文本编辑中保存文件并进行试验后,我想出了以下内容text=%q|{\rtf1{\field{\*\fldinst{HYPERLINK"URL"}}{\fldrsltTEXT}}}|te
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位