fix(fonts): markdown prose + links honour the live UI font (T-475)
The markdown span builders are context-free statics, so they pinned the bundled clideUiFamily const and ignored the Appearance UI-font setting — Claude's conversation prose stayed on the default face regardless of the pick. Thread the resolved UI family through the same ClideMarkdownHooks carrier already used for mono (T-472): build() resolves it from context and every prose/link span reads hooks.ui. Adds a regression test asserting prose and inline code follow the families from the ClideSettingsScope. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
library;
|
||||
|
||||
import 'package:clide/widgets/widgets.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import '../../helpers/kernel_fixture.dart';
|
||||
@@ -71,4 +72,29 @@ void main() {
|
||||
await tester.pump();
|
||||
expect(find.textContaining('[image: http://x/y.png]'), findsOneWidget);
|
||||
});
|
||||
|
||||
// T-475 (UI) / T-472 (mono): the static span builders take no BuildContext,
|
||||
// so they used to pin the bundled const families and ignore the live font
|
||||
// settings. They now read the resolved families from the ClideSettingsScope.
|
||||
testWidgets('prose and inline code honour the live UI + mono families from the scope', (tester) async {
|
||||
await tester.pumpWidget(harness(f, const ClideSettingsScope(ui: 'TestUiFace', mono: 'TestMonoFace', child: ClideMarkdown('hello `snippet` world'))));
|
||||
await tester.pump();
|
||||
|
||||
final families = <String?>{};
|
||||
void collect(InlineSpan span) {
|
||||
if (span is TextSpan) {
|
||||
families.add(span.style?.fontFamily);
|
||||
for (final child in span.children ?? const <InlineSpan>[]) {
|
||||
collect(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (final t in tester.widgetList<Text>(find.byType(Text))) {
|
||||
final span = t.textSpan;
|
||||
if (span != null) collect(span);
|
||||
}
|
||||
expect(families, contains('TestUiFace')); // prose paragraph
|
||||
expect(families, contains('TestMonoFace')); // inline `code`
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user