【发布时间】:2019-04-20 21:31:04
【问题描述】:
我想在某个字符长度后为字符串添加省略号,如果字符串长度未达到字符预设字符长度,则不应添加省略号 (...)。
我如何在 Dart 语言中实现这一点?
【问题讨论】:
我想在某个字符长度后为字符串添加省略号,如果字符串长度未达到字符预设字符长度,则不应添加省略号 (...)。
我如何在 Dart 语言中实现这一点?
【问题讨论】:
使用如下容器包装您的 Text 小部件
请阅读下面代码中的注释行
class TruncatedText extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
//Here you can control the width of your container ..
//when text exceeds it will be trancated via elipses...
width: 130.0,
child: Text('I have a trancated text',
style: TextStyle(fontSize: 20),
softWrap: false,
overflow: TextOverflow.ellipsis,
),
),
);
}
}
编辑:
你可以使用这个纯 dart 代码,因为原始解决方案适用于 Flutter
void main() {
String to_be_truncated = "Dart is excellent but flutter is awesome";
int truncateAt = to_be_truncated.length-1;//if you use to_be_truncated.lengh no truncation will happen
String elepsis = "..."; //define your variable truncation elipsis here
String truncated ="";
if(to_be_truncated.length > truncateAt){
truncated = to_be_truncated.substring(0,truncateAt-elepsis.length)+elepsis;
}else{
truncated = to_be_truncated;
}
print(truncated);
}
【讨论】:
你可以这样做:
String truncateWithEllipsis(int cutoff, String myString) {
return (myString.length <= cutoff)
? myString
: '${myString.substring(0, cutoff)}...';
}
【讨论】:
您可以为此使用replaceRange 方法。
var text = 'Hello World!';
var r = text.replaceRange(7, text.length, '...');
print(r); // -> Hello W...
这是一个完整的例子:
String truncate(String text, { length: 7, omission: '...' }) {
if (length >= text.length) {
return text;
}
return text.replaceRange(length, text.length, omission);
}
void main() {
print(truncate('Hello, World!', length: 4));
}
【讨论】:
您可以在字符串上使用扩展:
extension StringExtension on String {
String truncateTo(int maxLength) =>
(this.length <= maxLength) ? this : '${this.substring(0, maxLength)}...';
}
然后
'My Very Long Text'.truncateTo(7); // My Very...
【讨论】:
创建 extensions.dart 文件。
String truncateString(String data, int length) {
return (data.length >= length) ? '${data.substring(0, length)}...' : data;
}
将此用作自定义扩展。
用法
import 'package:project/util/extensions.dart';
truncateString('Sam Trio', 5)
【讨论】:
以下方法建立在以前的答案之上,具有以下优点:
extension StringExtension on String {
/// Truncate a string if it's longer than [maxLength] and add an [ellipsis].
String truncate(int maxLength, [String ellipsis = "…"]) => length > maxLength
? '${substring(0, maxLength - ellipsis.length)}$ellipsis'
: this;
}
【讨论】:
再举一个例子。
/// truncate the [String] without cutting words. The length is calculated with the suffix.
extension Truncate on String {
String truncate({required int max, String suffix = ''}) {
return length < max
? this
: '${substring(0, substring(0, max - suffix.length).lastIndexOf(" "))}$suffix';
}
}
一个例子如何使用
print('hello world two times!'.truncate(max: 15, suffix: '...'));
结果是hello world...
【讨论】: