Dart 如何根据文本大小展开文本和容器?
我正在尝试创建一张包含容器中文本的卡片,但我只想显示部分文本,当用户单击“显示更多”时,显示其余文本。我看到了一个小部件来构造这样的文本,但是我也需要扩展卡片容器,我不知道怎么做,因为我需要知道文本必须扩展多少行,以正确的大小。是否存在根据行数或字符数计算大小的方法 我尝试如下创建卡片,其中Dart 如何根据文本大小展开文本和容器?,dart,flutter,Dart,Flutter,我正在尝试创建一张包含容器中文本的卡片,但我只想显示部分文本,当用户单击“显示更多”时,显示其余文本。我看到了一个小部件来构造这样的文本,但是我也需要扩展卡片容器,我不知道怎么做,因为我需要知道文本必须扩展多少行,以正确的大小。是否存在根据行数或字符数计算大小的方法 我尝试如下创建卡片,其中descriptionContext是链接上的小部件,并在容器中指定一个最小高度,希望将容器与文本一起展开,但没有成功 Widget _showAnswerCard(Answer answer, User u
descriptionContext
是链接上的小部件,并在容器中指定一个最小高度,希望将容器与文本一起展开,但没有成功
Widget _showAnswerCard(Answer answer, User user) {
return Card(
elevation: 3.0,
color: Theme.of(context).backgroundColor,
child: Container(
constraints: BoxConstraints(minHeight: 90),
padding: EdgeInsets.all(10.0),
child: Flex(
direction: Axis.horizontal,
children: <Widget>[
Expanded(flex: 1, child: _showUserAvatar(answer)),
Expanded(flex: 3, child: _showAnswerDetails(answer, user)),
],
),
));
}
Widget _showAnswerDetails(Answer answer, User user) {
return Flex(
direction: Axis.vertical,
children: <Widget>[
Expanded(
flex: 3,
child: DescriptionTextWidget(text: answer.content),
),
Expanded(
flex: 1,
child: _showAnswerOptions(),
)
],
);
}
Widget\u显示应答卡(应答,用户){
回程卡(
标高:3.0,
颜色:主题。背景色,
子:容器(
约束:框约束(最小高度:90),
填充:所有边缘设置(10.0),
孩子:Flex(
方向:水平轴,
儿童:[
扩展(flex:1,child:_showUserAvatar(答案)),
扩展(flex:3,子项:_showAnswerDetails(答案,用户)),
],
),
));
}
Widget\u showAnswerDetails(答案、用户){
回程伸缩(
方向:轴垂直,
儿童:[
扩大(
弹性:3,
子:DescriptionTextWidget(文本:answer.content),
),
扩大(
弹性:1,
子项:_showAnswerOptions(),
)
],
);
}
如果有人能帮我,我将不胜感激。我能想到的解决方案是使用两个标签,一个只显示一行文本,另一个显示所有文本。单击按钮时,两个标签以动画方式交替显示。目前没有计算机,验证不方便,希望在程序的实施过程中给您一些帮助。只需使用widget包装您的卡片widget即可 基于您的建议答案。我确实改为使用
Wrap
小部件
JU复制/粘贴以下代码并检查
import 'package:flutter/material.dart';
class ProductDetailPage extends StatelessWidget {
final String description =
"Flutter is Google’s mobile UI framework for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.";
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: const Text("Demo App"),
),
body: new Container(
child: new DescriptionTextWidget(text: description),
),
);
}
}
class DescriptionTextWidget extends StatefulWidget {
final String text;
DescriptionTextWidget({@required this.text});
@override
_DescriptionTextWidgetState createState() =>
new _DescriptionTextWidgetState();
}
class _DescriptionTextWidgetState extends State<DescriptionTextWidget> {
bool flag = true;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Wrap(
children: <Widget>[
Card(
margin: EdgeInsets.all(8),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 10.0),
child: Column(
children: <Widget>[
Container(
child: Text(
widget.text,
overflow: flag ? TextOverflow.ellipsis : null,
style: TextStyle(
fontSize: 15,
),
),
),
InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
flag ? "show more" : "show less",
style: new TextStyle(color: Colors.blue),
),
],
),
onTap: () {
setState(() {
flag = !flag;
});
},
),
],
)),
),
],
);
}
}
导入“包装:颤振/材料.省道”;
类ProductDetailPage扩展了无状态小部件{
最终字符串描述=
“Flatter是谷歌的移动用户界面框架,用于在创纪录的时间内在iOS和Android上制作高质量的本机界面。Flatter与现有代码一起工作,被世界各地的开发人员和组织使用,并且是免费和开源的。”;
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:const Text(“演示应用程序”),
),
主体:新容器(
子:新的DescriptionTextWidget(文本:description),
),
);
}
}
类DescriptionTextWidget扩展StatefulWidget{
最终字符串文本;
DescriptionTextWidget({@required this.text});
@凌驾
_DescriptionTextWidgetState createState()=>
新的_DescriptionTextWidgetState();
}
类_DescriptionTextWidgetState扩展状态{
布尔标志=真;
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
回程包装(
儿童:[
卡片(
保证金:全部(8),
子:容器(
填充:边缘组。对称(水平:10.0,垂直:10.0),
子:列(
儿童:[
容器(
子:文本(
widget.text,
溢出:标志?文本溢出。省略号:null,
样式:TextStyle(
尺寸:15,
),
),
),
墨水池(
孩子:排(
mainAxisAlignment:mainAxisAlignment.end,
儿童:[
正文(
标志“显示更多”:“显示更少”,
样式:新文本样式(颜色:Colors.blue),
),
],
),
onTap:(){
设置状态(){
flag=!flag;
});
},
),
],
)),
),
],
);
}
}
结果:
天哪,谢谢!我不知道这个小部件,你真的救了我的命