flutter - Flutter (\t) 字符串值对齐问题
问题描述
我需要在颤振小部件中显示以下地图数据。
Map<String, String> map1 = {
"1335": "\t \tE \t \t \t",
"1336": "\t \tEG \t \t \t",
"1337": "\t \tEFG \t \t \t",
"1338": "\t \tEFG \t \t \t",
"1339": "\t \tADEFGH \t \t \t",
"1340": "\t \tADEGHI \t \t \t",
"1341": "\t \tADEGHI \t \t \t",
"1342": "\t \tADHIJLM\t \t \tK",
"1343": "\t \tADIJKL \t \tI \tK",
"1344": "\t \tBCDJKL \t \tBCFGIJK \tK",
"1345": "\t \tBCK \t \tABCEFGHIJK\tK",
"1346": "\t \tK \tA \tABCDEHIJK \tJKL",
"1347": "\t \t \tA \tADEIK \tJKL",
"1348": "\t \t \tAB \tADK \tJKL",
"1349": "\t \t \tBD \tAK \tJL",
"1350": "\t \t \tCDGH \tAK \tJL",
"1351": "\t \t \tDEFGH\tAKL \tJLM",
"1352": "\t \t \tEFI \tLM \tAJLM",
"1353": "\t \t \tI \tL \tAJ",
"1354": "\t \t \tIJ \t \tAIJ",
"1355": "\t \t \tJL \t \tAEIJ",
"1356": "\t \t \tJKLM \t \tABEFIJ",
"1357": "\t \t \tKLM \t \tABCDEFGHI",
"1358": "\t \t \t \t \tCDGH",
"1359": "\t \t \t \t \tG",
"1360.0": "\t08/20\t09/20 \t10/20\t11/20 \t12/20"
};
我已经使用垂直方向的 Wrap 小部件来呈现这些数据。
return Wrap(
runSpacing: 30,
spacing: 2.0,
direction: Axis.vertical,
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
children: map1.entries
.map(
(e) => Text(
e.key + ':' + e.value,
textAlign: TextAlign.right,
textScaleFactor: 1,
style: TextStyle(
fontSize: 12,
wordSpacing: 5,
),
),
)
.toList(),
);
A 到 M 个字符与前一行数据重叠。请帮助某人解决此问题。
解决方案
请查看以下代码。我使用 Table 而不是 Wrap,因为它提供了更多控制权。您可以直接在DartPad上运行代码https://dartpad.dev/272875acceeac3a6af5eceb8f65383fa
import 'dart:ui';
import 'package:flutter/material.dart';
final Color darkBlue = const Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const Text("Flutter Demo")),
body: Center(child: MyWidget()),
),
);
}
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Map<String, String> map1 = {
"1335": "\t \tE \t \t \t",
"1336": "\t \tEG \t \t \t",
"1337": "\t \tEFG \t \t \t",
"1338": "\t \tEFG \t \t \t",
"1339": "\t \tADEFGH \t \t \t",
"1340": "\t \tADEGHI \t \t \t",
"1341": "\t \tADEGHI \t \t \t",
"1342": "\t \tADHIJLM\t \t \tK",
"1343": "\t \tADIJKL \t \tI \tK",
"1344": "\t \tBCDJKL \t \tBCFGIJK \tK",
"1345": "\t \tBCK \t \tABCEFGHIJK\tK",
"1346": "\t \tK \tA \tABCDEHIJK \tJKL",
"1347": "\t \t \tA \tADEIK \tJKL",
"1348": "\t \t \tAB \tADK \tJKL",
"1349": "\t \t \tBD \tAK \tJL",
"1350": "\t \t \tCDGH \tAK \tJL",
"1351": "\t \t \tDEFGH\tAKL \tJLM",
"1352": "\t \t \tEFI \tLM \tAJLM",
"1353": "\t \t \tI \tL \tAJ",
"1354": "\t \t \tIJ \t \tAIJ",
"1355": "\t \t \tJL \t \tAEIJ",
"1356": "\t \t \tJKLM \t \tABEFIJ",
"1357": "\t \t \tKLM \t \tABCDEFGHI",
"1358": "\t \t \t \t \tCDGH",
"1359": "\t \t \t \t \tG",
"1360.0": "\t08/20\t09/20 \t10/20\t11/20 \t12/20"
};
final List<TableRow> children = (map1.entries.toList().reversed.map((e) {
return TableRow(children: [
TableCell(child: Text(e.key)),
...e.value
.split("\t")
.map(
(e) => TableCell(
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 3),
child: Text(
e.replaceAll(" ", ""),
textScaleFactor: 1,
style: const TextStyle(
fontSize: 12,
wordSpacing: 5,
fontFeatures: [FontFeature.tabularFigures()]),
)),
),
)
.toList()
]);
}).toList());
return ListView(
scrollDirection: Axis.horizontal,
children: [
Table(
defaultColumnWidth: const IntrinsicColumnWidth(),
children: children,
),
],
);
}
}
推荐阅读
- android - Kotlin - 以编程方式创建的 Spinner 箭头丢失
- node.js - 如何将令牌发送到我的后端服务器 node.js?
- html - 在 ionic 4 中编辑 shadow DOM - ion-slides
- flutter - 开关状态不会在点击时改变
- python - 如何在 PyQt5 中将波斯语设置为默认 QTextEdit?
- reportportal - 安装后更改 ReportPortal 数据库配置
- java - 如何在回收站视图中使用按钮?
- python - 如何配置选择字段(wtforms)
- java - 禁用默认 Swagger jaxrs2 openapi url
- r - 当方差分析表明只有因子显着而不它们的交互作用时,我是否必须制作另一个模型来执行 Tukey 检验?