Skip to content

Commit 53616a7

Browse files
committed
content: Fix ordered list layout to handle long numbers in <ol>
Fixes: zulip#1356
1 parent 0c6fda4 commit 53616a7

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

lib/widgets/content.dart

+15-24
Original file line numberDiff line numberDiff line change
@@ -493,33 +493,24 @@ class ListNodeWidget extends StatelessWidget {
493493
case UnorderedListNode(): marker = "• "; break;
494494
case OrderedListNode(:final start): marker = "${start + index}. "; break;
495495
}
496-
return ListItemWidget(marker: marker, nodes: item);
496+
return TableRow(children: [
497+
Align(
498+
alignment: AlignmentDirectional.topEnd,
499+
child: Text(marker)),
500+
BlockContentList(nodes: item),
501+
]);
497502
});
503+
498504
return Padding(
499505
padding: const EdgeInsets.only(top: 2, bottom: 5),
500-
child: Column(children: items));
501-
}
502-
}
503-
504-
class ListItemWidget extends StatelessWidget {
505-
const ListItemWidget({super.key, required this.marker, required this.nodes});
506-
507-
final String marker;
508-
final List<BlockContentNode> nodes;
509-
510-
@override
511-
Widget build(BuildContext context) {
512-
return Row(
513-
mainAxisAlignment: MainAxisAlignment.start,
514-
crossAxisAlignment: CrossAxisAlignment.baseline,
515-
textBaseline: localizedTextBaseline(context),
516-
children: [
517-
SizedBox(
518-
width: 20, // TODO handle long numbers in <ol>, like https://github.com/zulip/zulip/pull/25063
519-
child: Align(
520-
alignment: AlignmentDirectional.topEnd, child: Text(marker))),
521-
Expanded(child: BlockContentList(nodes: nodes)),
522-
]);
506+
child: Table(
507+
defaultVerticalAlignment: TableCellVerticalAlignment.baseline,
508+
textBaseline: localizedTextBaseline(context),
509+
columnWidths: const <int, TableColumnWidth>{
510+
0: IntrinsicColumnWidth(),
511+
1: FlexColumnWidth(),
512+
},
513+
children: items));
523514
}
524515
}
525516

test/widgets/content_test.dart

+16
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,22 @@ void main() {
239239
expect(find.text('third'), findsOneWidget);
240240
expect(find.text('fourth'), findsOneWidget);
241241
});
242+
243+
testWidgets('list uses correct text baseline alignment', (tester) async {
244+
await prepareContent(tester, plainContent(ContentExample.orderedListLargeStart.html));
245+
246+
final table = tester.widget<Table>(find.byType(Table));
247+
check(table.defaultVerticalAlignment).equals(TableCellVerticalAlignment.baseline);
248+
check(table.textBaseline).equals(localizedTextBaseline(tester.element(find.byType(Table))));
249+
250+
await prepareContent(tester, Directionality(
251+
textDirection: TextDirection.rtl,
252+
child: plainContent(ContentExample.orderedListLargeStart.html)));
253+
254+
final tableRtl = tester.widget<Table>(find.byType(Table));
255+
check(tableRtl.defaultVerticalAlignment).equals(TableCellVerticalAlignment.baseline);
256+
check(tableRtl.textBaseline).equals(localizedTextBaseline(tester.element(find.byType(Table))));
257+
});
242258
});
243259

244260
group('Spoiler', () {

0 commit comments

Comments
 (0)