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'),
                      ),
                    ),
                  ),
                ]
              ),
            ),
          ),
        ),
      ),
    );
  }
}