Flutter 在检查长文本后,如何将小部件放入行中?
如何使用另一个小部件(如按钮)将动态长文本展开成这样的行:Flutter 在检查长文本后,如何将小部件放入行中?,flutter,dart,text,widget,warp,Flutter,Dart,Text,Widget,Warp,如何使用另一个小部件(如按钮)将动态长文本展开成这样的行: 我尝试了扩展、灵活和扭曲,但没有得出结论 !!注意,我不想让它在堆栈中或从底部使用填充!导致此文本将发生更改,其长度可能更大或更短 更新:我尝试使用ExtendedText,但TextOverFlowWidget的子项没有显示出来。我的代码: Container( color: Colors.amber, height: 70, child: ExtendedText( 'bbbbb ${toPhoneStyl
我尝试了
扩展
、灵活
和扭曲
,但没有得出结论
!!注意,我不想让它在堆栈中
或从底部使用填充
!导致此文本将发生更改,其长度可能更大或更短
更新:我尝试使用ExtendedText,但TextOverFlowWidget的子项没有显示出来。我的代码:
Container(
color: Colors.amber,
height: 70,
child: ExtendedText(
'bbbbb ${toPhoneStyle(widget.inputPhone)} (${widget.selectedCountry.dialCode}) aaaaaa aaaaaaaaaaa',
overflowWidget: TextOverflowWidget(
// maxHeight: double.infinity,
// align: TextOverflowAlign.right,
// fixedOffset: Offset.zero,
child: Container(
width: 60,
height: 60,
color: Colors.red,
),
),
),
),
但如果将容器高度小型化,如
高度:20
,则显示如下:
试试这个:
您可以使用一个溢出小部件
看看他们的例子:
ExtendedText(...
overFlowWidget:
TextOverflowWidget(
//maxHeight: double.infinity,
//align: TextOverflowAlign.right,
//fixedOffset: Offset.zero,
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('\u2026 '),
RaisedButton(
child: const Text('more'),
onPressed: () {
launch(
'https://github.com/fluttercandies/extended_text');
},
)
],
),
),
...
)
在这种情况下,您不需要扩展文本包。尝试以下方法:
您可以使用一个溢出小部件
看看他们的例子:
ExtendedText(...
overFlowWidget:
TextOverflowWidget(
//maxHeight: double.infinity,
//align: TextOverflowAlign.right,
//fixedOffset: Offset.zero,
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('\u2026 '),
RaisedButton(
child: const Text('more'),
onPressed: () {
launch(
'https://github.com/fluttercandies/extended_text');
},
)
],
),
),
...
)
在这种情况下,您不需要扩展文本包。显然,您可以使用
RichText
小部件将文本和小部件包装成一行,即它意味着使用多种显示样式显示文本。文本是使用
或
类型的子项呈现的
下面的代码将解释您在问题中尝试的确切内容。请注意,我只使用了一个有状态的小部件,因为我也在处理其他东西,所以我只编辑了该小部件中的所有内容,如果您不打算在这里引入任何状态,您可以使用无状态的小部件
完整代码:
导入“包装:颤振/材料.省道”;
void main()
{
runApp(材料应用程序)(
home:home(),
));
}
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
final String str='一些非常长的文本来显示wrap小部件的工作情况'
+'然后在文本末尾放置一个按钮,它将证明这一点'
+“你可以用其他种类的小部件做同样的事情。”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
儿童:中心(
子:容器(
宽度:(MediaQuery.of(context.size.width)/1.3,
装饰:盒子装饰(
颜色:颜色。橙色[100],
),
孩子:RichText(
text:TextSpan(
儿童:[
TextSpan(
文本:str,
样式:TextStyle(
尺寸:24,
颜色:颜色,黑色,
),
),
//将WidgetSpan的子级视为要插入的参数
//你想放在这里的任何小部件
//SizedBox仅用于在文本字符串后留出一点空间
WidgetSpan(
子项:大小框(宽度:5,),
),
WidgetSpan(
子:容器(
孩子:升起按钮(
颜色:Colors.blueAccent,
按下:(){},
子项:文本(“按钮”),
),
),
),
]
),
),
),
),
),
);
}
}
渲染后的结果:
显然,您可以使用
RichText
小部件将文本和小部件包装成一行,也就是说,它意味着使用多种显示样式显示文本。文本是使用
或
类型的子项呈现的
下面的代码将解释您在问题中尝试的确切内容。请注意,我只使用了一个有状态的小部件,因为我也在处理其他东西,所以我只编辑了该小部件中的所有内容,如果您不打算在这里引入任何状态,您可以使用无状态的小部件
完整代码:
导入“包装:颤振/材料.省道”;
void main()
{
runApp(材料应用程序)(
home:home(),
));
}
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
final String str='一些非常长的文本来显示wrap小部件的工作情况'
+'然后在文本末尾放置一个按钮,它将证明这一点'
+“你可以用其他种类的小部件做同样的事情。”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
儿童:中心(
子:容器(
宽度:(MediaQuery.of(context.size.width)/1.3,
装饰:盒子装饰(
颜色:颜色。橙色[100],
),
孩子:RichText(
text:TextSpan(
儿童:[
TextSpan(
文本:str,
样式:TextStyle(
尺寸:24,
颜色:颜色,黑色,
),
),
//将WidgetSpan的子级视为要插入的参数
//你想放在这里的任何小部件
//SizedBox仅用于在文本字符串后留出一点空间
WidgetSpan(
子项:大小框(宽度:5,),
),
WidgetSpan(
子:容器(
孩子:升起按钮(
颜色:Colors.blueAccent,
按下:(){},
子项:文本(“按钮”),
),
),
),
]
),
),
),
),
),
);
}
}
渲染后的结果:
谢谢,但是TextOverFlowWidget的孩子没有为我显示!你对为什么有什么意见吗?你能添加你的代码吗?我更新了我的问题。谢谢,但是我不能
import 'package:flutter/material.dart';
void main()
{
runApp(MaterialApp(
home: Home(),
));
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final String str = 'Some really long text to show the working of a wrap widget'
+ ' and place a button at the end of the text and it will then prove that'
+ ' you can do the same with other kind of widgets.';
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: Container(
width: (MediaQuery.of(context).size.width) / 1.3,
decoration: BoxDecoration(
color: Colors.orange[100],
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: str,
style: TextStyle(
fontSize: 24,
color: Colors.black,
),
),
// treat the child of WidgetSpan as the parameter to insert
// whatever widget you wish to put here
// SizedBox is only used to put a little space after the text string
WidgetSpan(
child: SizedBox(width: 5,),
),
WidgetSpan(
child: Container(
child: RaisedButton(
color: Colors.blueAccent,
onPressed: (){},
child: Text('Button'),
),
),
),
]
),
),
),
),
),
);
}
}