Skip to content

Commit

Permalink
YaruTheme widget: build empty during accent color initialiation (#232)
Browse files Browse the repository at this point in the history
* YaruTheme widget: build empty during accent color initialiation

Fixes: #231

* Use mocked GSettings in all widget tests
  • Loading branch information
jpnurmi authored Dec 14, 2022
1 parent ec1fc6b commit a5ca014
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
8 changes: 5 additions & 3 deletions lib/src/widgets/inherited_theme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,9 @@ class _YaruThemeState extends State<YaruTheme> {
super.initState();
if (widget.data.variant == null && !kIsWeb && widget._platform.isLinux) {
_settings = widget._settings ?? const YaruSettings();
_subscription = _settings!.themeNameChanged.listen((name) {
updateVariant(name);
updateVariant().then((_) {
_subscription = _settings!.themeNameChanged.listen(updateVariant);
});
updateVariant();
}
}

Expand Down Expand Up @@ -221,6 +220,9 @@ class _YaruThemeState extends State<YaruTheme> {

@override
Widget build(BuildContext context) {
if (_settings != null && _subscription == null) {
return const SizedBox.shrink(); // #231
}
final data = resolveData();
return _YaruInheritedTheme(
data: data,
Expand Down
14 changes: 10 additions & 4 deletions test/widget_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -124,33 +124,38 @@ void main() {

group('high contrast', () {
testWidgets('on', (tester) async {
await tester.pumpTheme(highContrast: true);
final settings = createMockSettings();
await tester.pumpTheme(highContrast: true, settings: settings);
final context = tester.element(find.byType(Container));
expect(YaruTheme.of(context).highContrast, isTrue);
});

testWidgets('off', (tester) async {
await tester.pumpTheme(highContrast: false);
final settings = createMockSettings();
await tester.pumpTheme(highContrast: false, settings: settings);
final context = tester.element(find.byType(Container));
expect(YaruTheme.of(context).highContrast, isFalse);
});
});

group('theme mode', () {
testWidgets('light', (tester) async {
await tester.pumpTheme(themeMode: ThemeMode.light);
final settings = createMockSettings();
await tester.pumpTheme(themeMode: ThemeMode.light, settings: settings);
final context = tester.element(find.byType(Container));
expect(YaruTheme.of(context).themeMode, ThemeMode.light);
});

testWidgets('dark', (tester) async {
await tester.pumpTheme(themeMode: ThemeMode.dark);
final settings = createMockSettings();
await tester.pumpTheme(themeMode: ThemeMode.dark, settings: settings);
final context = tester.element(find.byType(Container));
expect(YaruTheme.of(context).themeMode, ThemeMode.dark);
});
});

testWidgets('theme data overrides', (tester) async {
final settings = createMockSettings();
const extensions = <ThemeExtension>[];
const pageTransitionsTheme = PageTransitionsTheme();
const visualDensity = VisualDensity(horizontal: -4, vertical: -4);
Expand All @@ -159,6 +164,7 @@ void main() {
pageTransitionsTheme: pageTransitionsTheme,
useMaterial3: false,
visualDensity: visualDensity,
settings: settings,
);
final context = tester.element(find.byType(Container));
final theme = YaruTheme.of(context);
Expand Down

0 comments on commit a5ca014

Please sign in to comment.