Skip to content

Commit 4cb86b3

Browse files
Feichtmeierjpnurmi
andauthored
Adapt to yaru.dart changes (#324)
* Adapt to yaru.dart changes * Typo * Wrap YaruTheme around YaruMasterDetailsPage * Restore theme mode watch * Use a list of variants * Update AppTheme test Co-authored-by: J-P Nurmi <[email protected]>
1 parent 5480902 commit 4cb86b3

File tree

10 files changed

+128
-206
lines changed

10 files changed

+128
-206
lines changed

lib/app.dart

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter_localized_locales/flutter_localized_locales.dart';
23
import 'package:provider/provider.dart';
34
import 'package:settings/l10n/l10n.dart';
45
import 'package:settings/view/app_theme.dart';
56
import 'package:settings/view/pages/page_items.dart';
7+
import 'package:yaru/yaru.dart';
68
import 'package:yaru_icons/yaru_icons.dart';
79
import 'package:yaru_widgets/yaru_widgets.dart';
8-
import 'package:flutter_localized_locales/flutter_localized_locales.dart';
910

1011
class UbuntuSettingsApp extends StatefulWidget {
1112
const UbuntuSettingsApp({
@@ -45,25 +46,27 @@ class _UbuntuSettingsAppState extends State<UbuntuSettingsApp> {
4546
onGenerateTitle: (context) => context.l10n.appTitle,
4647
routes: {
4748
Navigator.defaultRouteName: (context) {
48-
return YaruMasterDetailPage(
49-
leftPaneWidth: 280,
50-
pageItems: _filteredItems.isNotEmpty ? _filteredItems : pageItems,
51-
previousIconData: YaruIcons.go_previous,
52-
appBar: YaruSearchAppBar(
53-
searchHint: context.l10n.searchHint,
54-
clearSearchIconData: YaruIcons.window_close,
55-
searchController: _searchController,
56-
onChanged: (v) => _onSearchChanged(v, context),
57-
onEscape: _onEscape,
58-
appBarHeight: 48,
59-
searchIconData: YaruIcons.search,
49+
return YaruTheme(
50+
data: YaruThemeData(
51+
themeMode: context.watch<AppTheme>().value,
52+
),
53+
child: YaruMasterDetailPage(
54+
leftPaneWidth: 280,
55+
pageItems: _filteredItems.isNotEmpty ? _filteredItems : pageItems,
56+
previousIconData: YaruIcons.go_previous,
57+
appBar: YaruSearchAppBar(
58+
searchHint: context.l10n.searchHint,
59+
clearSearchIconData: YaruIcons.window_close,
60+
searchController: _searchController,
61+
onChanged: (v) => _onSearchChanged(v, context),
62+
onEscape: _onEscape,
63+
appBarHeight: 48,
64+
searchIconData: YaruIcons.search,
65+
),
6066
),
6167
);
6268
},
6369
},
64-
theme: context.watch<LightTheme>().value,
65-
darkTheme: context.watch<DarkTheme>().value,
66-
themeMode: context.watch<AppTheme>().value,
6770
supportedLocales: AppLocalizations.supportedLocales,
6871
localizationsDelegates: AppLocalizations.localizationsDelegates +
6972
[const LocaleNamesLocalizationsDelegate()],

lib/main.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import 'package:settings/services/settings_service.dart';
1717
import 'package:settings/view/app_theme.dart';
1818
import 'package:udisks/udisks.dart';
1919
import 'package:upower/upower.dart';
20-
import 'package:yaru/yaru.dart';
2120

2221
void main() async {
2322
final themeSettings = Settings(schemaInterface);
@@ -28,10 +27,6 @@ void main() async {
2827
runApp(
2928
MultiProvider(
3029
providers: [
31-
ChangeNotifierProvider(create: (_) => LightTheme(yaruLight)),
32-
ChangeNotifierProvider(create: (_) => DarkTheme(yaruDark)),
33-
ChangeNotifierProvider(create: (_) => LightGtkTheme('Yaru')),
34-
ChangeNotifierProvider(create: (_) => DarkGtkTheme('Yaru-dark')),
3530
ChangeNotifierProvider(
3631
create: (_) => AppTheme(themeSettings),
3732
),

lib/view/app_theme.dart

Lines changed: 23 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ class AppTheme extends ValueNotifier<ThemeMode> {
77

88
final Settings _settings;
99

10-
void apply(Brightness brightness, String lightGtkTheme, String darkGtkTheme) {
10+
void apply(Brightness brightness, YaruVariant variant) {
1111
switch (brightness) {
1212
case Brightness.dark:
1313
value = ThemeMode.dark;
14-
_settings.setValue('gtk-theme', darkGtkTheme);
14+
_settings.setValue('gtk-theme', variant.gtkThemeNameDark);
1515
_settings.setValue('color-scheme', 'prefer-dark');
16-
_settings.setValue('icon-theme', darkGtkTheme);
16+
_settings.setValue('icon-theme', variant.gtkThemeNameDark);
1717
break;
1818
case Brightness.light:
1919
value = ThemeMode.light;
20-
_settings.setValue('gtk-theme', lightGtkTheme);
20+
_settings.setValue('gtk-theme', variant.gtkThemeName);
2121
_settings.setValue('color-scheme', 'default');
22-
_settings.setValue('icon-theme', lightGtkTheme);
22+
_settings.setValue('icon-theme', variant.gtkThemeName);
2323
break;
2424
}
2525
}
@@ -31,107 +31,25 @@ class AppTheme extends ValueNotifier<ThemeMode> {
3131
}
3232
}
3333

34-
class LightTheme extends ValueNotifier<ThemeData> {
35-
LightTheme(ThemeData value) : super(value);
36-
}
37-
38-
class DarkTheme extends ValueNotifier<ThemeData> {
39-
DarkTheme(ThemeData value) : super(value);
40-
}
41-
42-
class LightGtkTheme extends ValueNotifier<String> {
43-
LightGtkTheme(String value) : super(value);
44-
}
45-
46-
class DarkGtkTheme extends ValueNotifier<String> {
47-
DarkGtkTheme(String value) : super(value);
48-
}
49-
50-
final List<GlobalTheme> globalThemeList = [
51-
GlobalTheme(
52-
lightTheme: yaruLight,
53-
darkTheme: yaruDark,
54-
lightGtkTheme: 'Yaru',
55-
darkGtkTheme: 'Yaru-dark',
56-
primaryColor: YaruColors.ubuntuOrange,
57-
),
58-
GlobalTheme(
59-
lightTheme: yaruSageLight,
60-
darkTheme: yaruSageDark,
61-
lightGtkTheme: 'Yaru-sage',
62-
darkGtkTheme: 'Yaru-sage-dark',
63-
primaryColor: sageMaterialColor,
64-
),
65-
GlobalTheme(
66-
lightTheme: yaruBarkLight,
67-
darkTheme: yaruBarkDark,
68-
lightGtkTheme: 'Yaru-bark',
69-
darkGtkTheme: 'Yaru-bark-dark',
70-
primaryColor: barkMaterialColor,
71-
),
72-
GlobalTheme(
73-
lightTheme: yaruOliveLight,
74-
darkTheme: yaruOliveDark,
75-
lightGtkTheme: 'Yaru-olive',
76-
darkGtkTheme: 'Yaru-olive-dark',
77-
primaryColor: oliveMaterialColor,
78-
),
79-
GlobalTheme(
80-
lightTheme: yaruViridianLight,
81-
darkTheme: yaruViridianDark,
82-
lightGtkTheme: 'Yaru-viridian',
83-
darkGtkTheme: 'Yaru-viridian-dark',
84-
primaryColor: viridianMaterialColor,
85-
),
86-
GlobalTheme(
87-
lightTheme: yaruPrussianGreenLight,
88-
darkTheme: yaruPrussianGreenDark,
89-
lightGtkTheme: 'Yaru-prussiangreen',
90-
darkGtkTheme: 'Yaru-prussiangreen-dark',
91-
primaryColor: prussianGreenMaterialColor,
92-
),
93-
GlobalTheme(
94-
lightTheme: yaruBlueLight,
95-
darkTheme: yaruBlueDark,
96-
lightGtkTheme: 'Yaru-blue',
97-
darkGtkTheme: 'Yaru-blue-dark',
98-
primaryColor: blueMaterialColor,
99-
),
100-
GlobalTheme(
101-
lightTheme: yaruPurpleLight,
102-
darkTheme: yaruPurpleDark,
103-
lightGtkTheme: 'Yaru-purple',
104-
darkGtkTheme: 'Yaru-purple-dark',
105-
primaryColor: purpleMaterialColor,
106-
),
107-
GlobalTheme(
108-
lightTheme: yarMagentaLight,
109-
darkTheme: yaruMagentaDark,
110-
lightGtkTheme: 'Yaru-magenta',
111-
darkGtkTheme: 'Yaru-magenta-dark',
112-
primaryColor: magentaMaterialColor,
113-
),
114-
GlobalTheme(
115-
lightTheme: yaruRedLight,
116-
darkTheme: yaruRedDark,
117-
lightGtkTheme: 'Yaru-red',
118-
darkGtkTheme: 'Yaru-red-dark',
119-
primaryColor: lightRedMaterialColor,
120-
),
34+
const List<YaruVariant> globalThemeList = [
35+
YaruVariant.orange,
36+
YaruVariant.bark,
37+
YaruVariant.sage,
38+
YaruVariant.olive,
39+
YaruVariant.viridian,
40+
YaruVariant.prussianGreen,
41+
YaruVariant.blue,
42+
YaruVariant.purple,
43+
YaruVariant.magenta,
44+
YaruVariant.red,
12145
];
12246

123-
class GlobalTheme {
124-
final ThemeData lightTheme;
125-
final ThemeData darkTheme;
126-
final String lightGtkTheme;
127-
final String darkGtkTheme;
128-
final MaterialColor primaryColor;
47+
extension YaruVariantName on YaruVariant {
48+
String get gtkThemeName {
49+
return this == YaruVariant.orange ? 'Yaru' : 'Yaru-${name.toLowerCase()}';
50+
}
12951

130-
GlobalTheme({
131-
required this.lightTheme,
132-
required this.darkTheme,
133-
required this.lightGtkTheme,
134-
required this.darkGtkTheme,
135-
required this.primaryColor,
136-
});
52+
String get gtkThemeNameDark {
53+
return '$gtkThemeName-dark';
54+
}
13755
}

lib/view/pages/appearance/theme_section.dart

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:linux_system_info/linux_system_info.dart';
33
import 'package:provider/provider.dart';
44
import 'package:settings/constants.dart';
55
import 'package:settings/view/app_theme.dart';
6+
import 'package:yaru/yaru.dart';
67
import 'package:yaru_icons/yaru_icons.dart';
78
import 'package:yaru_widgets/yaru_widgets.dart';
89

@@ -24,10 +25,6 @@ class _ThemeSectionState extends State<ThemeSection> {
2425
@override
2526
Widget build(BuildContext context) {
2627
final theme = context.watch<AppTheme>();
27-
final lightTheme = context.watch<LightTheme>();
28-
final darkTheme = context.watch<DarkTheme>();
29-
final lightGtkTheme = context.watch<LightGtkTheme>();
30-
final darkGtkTheme = context.watch<DarkGtkTheme>();
3128

3229
return YaruSection(
3330
width: kDefaultWidth,
@@ -55,8 +52,7 @@ class _ThemeSectionState extends State<ThemeSection> {
5552
Theme.of(context).brightness == Brightness.dark
5653
? Brightness.light
5754
: Brightness.dark,
58-
lightGtkTheme.value,
59-
darkGtkTheme.value);
55+
YaruTheme.of(context).variant ?? YaruVariant.orange);
6056
}),
6157
if (int.parse(_osVersion.substring(0, 2)) >= 22)
6258
Row(
@@ -65,16 +61,10 @@ class _ThemeSectionState extends State<ThemeSection> {
6561
for (var globalTheme in globalThemeList)
6662
YaruColorDisk(
6763
onPressed: () {
68-
lightTheme.value = globalTheme.lightTheme;
69-
darkTheme.value = globalTheme.darkTheme;
70-
lightGtkTheme.value = globalTheme.lightGtkTheme;
71-
darkGtkTheme.value = globalTheme.darkGtkTheme;
72-
theme.apply(Theme.of(context).brightness,
73-
lightGtkTheme.value, darkGtkTheme.value);
64+
theme.apply(Theme.of(context).brightness, globalTheme);
7465
},
75-
color: globalTheme.primaryColor,
76-
selected: Theme.of(context).primaryColor ==
77-
globalTheme.primaryColor),
66+
color: globalTheme.color,
67+
selected: YaruTheme.of(context).variant == globalTheme),
7868
],
7969
)
8070
],

lib/view/pages/power/battery_section.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:settings/constants.dart';
44
import 'package:settings/view/pages/power/battery_model.dart';
55
import 'package:settings/view/pages/power/battery_widgets.dart';
66
import 'package:upower/upower.dart';
7-
import 'package:yaru/yaru.dart';
7+
import 'package:yaru_colors/yaru_colors.dart';
88
import 'package:yaru_widgets/yaru_widgets.dart';
99

1010
class BatterySection extends StatefulWidget {
@@ -42,10 +42,10 @@ class _BatterySectionState extends State<BatterySection> {
4242
child: YaruLinearProgressIndicator(
4343
value: model.percentage / 100.0,
4444
color: model.percentage > 80.0
45-
? YaruColors.green
45+
? YaruColors.success
4646
: model.percentage < 30.0
47-
? YaruColors.red
48-
: YaruColors.yellow),
47+
? YaruColors.error
48+
: YaruColors.warning),
4949
),
5050
Padding(
5151
padding: const EdgeInsets.all(8.0),

lib/view/pages/power/power_profile_section.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:settings/constants.dart';
44
import 'package:settings/services/power_profile_service.dart';
55
import 'package:settings/view/pages/power/power_profile_model.dart';
66
import 'package:settings/view/pages/power/power_profile_widgets.dart';
7-
import 'package:yaru/yaru.dart';
7+
import 'package:yaru_colors/yaru_colors.dart';
88
import 'package:yaru_icons/yaru_icons.dart';
99
import 'package:yaru_widgets/yaru_widgets.dart';
1010

@@ -41,7 +41,7 @@ class _PowerProfileSectionState extends State<PowerProfileSection> {
4141
title: const ProfileModeTitle(
4242
icon: Icon(
4343
YaruIcons.meter_5,
44-
color: YaruColors.red,
44+
color: YaruColors.error,
4545
),
4646
title: Text('Performance')),
4747
subtitle: const Text('High performance and power usage.'),
@@ -63,7 +63,7 @@ class _PowerProfileSectionState extends State<PowerProfileSection> {
6363
title: const ProfileModeTitle(
6464
icon: Icon(
6565
YaruIcons.meter_1,
66-
color: YaruColors.green,
66+
color: YaruColors.success,
6767
),
6868
title: Text('Power save')),
6969
subtitle: const Text('Reduced performance and power usage.'),

linux/flutter/generated_plugins.cmake

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
88
url_launcher_linux
99
)
1010

11-
list(APPEND FLUTTER_FFI_PLUGIN_LIST
12-
)
13-
1411
set(PLUGIN_BUNDLED_LIBRARIES)
1512

1613
foreach(plugin ${FLUTTER_PLUGIN_LIST})
@@ -19,8 +16,3 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST})
1916
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
2017
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
2118
endforeach(plugin)
22-
23-
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
24-
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
25-
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
26-
endforeach(ffi_plugin)

0 commit comments

Comments
 (0)