gpt4 book ai didi

flutter - 假设小部件的宽度从字符串中间切出文本

转载 作者:行者123 更新时间:2023-12-03 03:35:25 25 4
gpt4 key购买 nike

在Dart中,我想知道如何从String的中间剪切文本?如我们所知,我们可以使用TextOverflow.ellipsis来减少字符串的结尾,但是我想拥有什么呢?

我想从字符串的中间剪切文本,例如我的字符串是:
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
我应该如何从中间剪裁而假定小部件的宽度为:
Lorem i...ng elit,
要么
Lorem ipsum d...ur adipiscing elit,
我找不到有关此实现的任何示例代码或文档

最佳答案

这是一个简单但有点棘手的解决方案,不是最好的解决方案,但可以帮上忙。

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: SafeArea(
child: MyHomePage(),
),
),
);
}
}

class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Container(
width: 300,
child: TextWithCut(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit,'),
);
}
}

class TextWithCut extends StatelessWidget {
const TextWithCut(this.text, {Key key, this.style}) : super(key: key);

final String text;
final TextStyle style;

@override
Widget build(BuildContext context) {
var style = this.style ?? Theme.of(context).textTheme.body1;

// not the perfect solution to find the symbol width:
// a bold font is wider and some symbols are wider than normal
var symbolWidth = style.fontSize * 0.6;

return LayoutBuilder(
builder: (context, constraints) {
var numberOfElements = (constraints.maxWidth / symbolWidth).floor();

return Text(middleCut(text, numberOfElements), style: style);
},
);
}

String middleCut(String text, int length) {
const numberOfDots = 3;
var dotsString = List<String>.filled(numberOfDots, '.').join();

var leftSizeLengh = ((length - numberOfDots) / 2).floor();
var rightSizeLength = text.length - leftSizeLengh;
var leftPart = text.substring(0, leftSizeLengh);
var rightPart = text.substring(rightSizeLength);
return '$leftPart$dotsString$rightPart';
}
}

关于flutter - 假设小部件的宽度从字符串中间切出文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61351761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com