Skip to content

Commit a481db1

Browse files
authored
Dock section: use less space for assets (#239)
1 parent 10ecfb9 commit a481db1

File tree

3 files changed

+105
-63
lines changed

3 files changed

+105
-63
lines changed

lib/view/pages/appearance/appearance_model.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,23 +187,23 @@ class AppearanceModel extends ChangeNotifier {
187187

188188
String getRightSideAsset() {
189189
final _extendDock = extendDock ?? true;
190-
if (!_extendDock) {
190+
if (_extendDock) {
191191
return 'assets/images/appearance/panel-mode/panel-mode-right.svg';
192192
}
193193
return 'assets/images/appearance/dock-mode/dock-mode-right.svg';
194194
}
195195

196196
String getLeftSideAsset() {
197197
final _extendDock = extendDock ?? true;
198-
if (!_extendDock) {
198+
if (_extendDock) {
199199
return 'assets/images/appearance/panel-mode/panel-mode-left.svg';
200200
}
201201
return 'assets/images/appearance/dock-mode/dock-mode-left.svg';
202202
}
203203

204204
String getBottomAsset() {
205205
final _extendDock = extendDock ?? true;
206-
if (!_extendDock) {
206+
if (_extendDock) {
207207
return 'assets/images/appearance/panel-mode/panel-mode-bottom.svg';
208208
}
209209
return 'assets/images/appearance/dock-mode/dock-mode-bottom.svg';

lib/view/pages/appearance/dock_section.dart

Lines changed: 56 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_svg/flutter_svg.dart';
33
import 'package:provider/provider.dart';
44
import 'package:settings/view/pages/appearance/appearance_model.dart';
5+
import 'package:settings/view/selectable_svg_image.dart';
56
import 'package:yaru_widgets/yaru_widgets.dart';
67

78
class DockSection extends StatelessWidget {
@@ -60,6 +61,61 @@ class DockSection extends StatelessWidget {
6061
),
6162
],
6263
),
64+
YaruSection(headline: 'Dock Position', children: [
65+
Row(
66+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
67+
children: [
68+
Column(
69+
crossAxisAlignment: CrossAxisAlignment.start,
70+
children: [
71+
const Padding(
72+
padding: EdgeInsets.all(8.0),
73+
child: Text('Left'),
74+
),
75+
SelectableSvgImage(
76+
padding: 8.0,
77+
path: model.getLeftSideAsset(),
78+
selected: model.getDockPosition() == DockPosition.left,
79+
height: assetHeight,
80+
onTap: () => model.setDockPosition(DockPosition.left),
81+
),
82+
],
83+
),
84+
Column(
85+
crossAxisAlignment: CrossAxisAlignment.start,
86+
children: [
87+
const Padding(
88+
padding: EdgeInsets.all(8.0),
89+
child: Text('Right'),
90+
),
91+
SelectableSvgImage(
92+
padding: 8.0,
93+
path: model.getRightSideAsset(),
94+
selected: model.getDockPosition() == DockPosition.right,
95+
height: assetHeight,
96+
onTap: () => model.setDockPosition(DockPosition.right),
97+
),
98+
],
99+
),
100+
Column(
101+
crossAxisAlignment: CrossAxisAlignment.start,
102+
children: [
103+
const Padding(
104+
padding: EdgeInsets.all(8.0),
105+
child: Text('Bottom'),
106+
),
107+
SelectableSvgImage(
108+
padding: 8.0,
109+
path: model.getBottomAsset(),
110+
selected: model.getDockPosition() == DockPosition.bottom,
111+
height: assetHeight,
112+
onTap: () => model.setDockPosition(DockPosition.bottom),
113+
),
114+
],
115+
),
116+
],
117+
)
118+
]),
63119
YaruSection(
64120
headline: 'Dock options',
65121
children: [
@@ -126,66 +182,6 @@ class DockSection extends StatelessWidget {
126182
),
127183
],
128184
),
129-
YaruSection(headline: 'Dock Position', children: [
130-
YaruRow(
131-
trailingWidget: const Text('Left'),
132-
description: 'Your dock appears on the left side of your screen.',
133-
actionWidget: Radio<DockPosition>(
134-
value: DockPosition.left,
135-
groupValue: model.getDockPosition(),
136-
onChanged: (value) => model.setDockPosition(value!)),
137-
enabled: model.extendDock != null),
138-
Padding(
139-
padding: const EdgeInsets.all(assetPadding),
140-
child: SvgPicture.asset(
141-
model.getLeftSideAsset(),
142-
color: model.getDockPosition() == DockPosition.left
143-
? Theme.of(context).primaryColor.withOpacity(0.1)
144-
: Theme.of(context).backgroundColor,
145-
colorBlendMode: BlendMode.color,
146-
height: assetHeight,
147-
),
148-
),
149-
YaruRow(
150-
trailingWidget: const Text('Right'),
151-
description:
152-
'Your dock appears on the right side of your screen.',
153-
actionWidget: Radio<DockPosition>(
154-
value: DockPosition.bottom,
155-
groupValue: model.getDockPosition(),
156-
onChanged: (value) => model.setDockPosition(value!)),
157-
enabled: model.extendDock != null),
158-
Padding(
159-
padding: const EdgeInsets.all(assetPadding),
160-
child: SvgPicture.asset(
161-
model.getRightSideAsset(),
162-
color: model.getDockPosition() == DockPosition.bottom
163-
? Theme.of(context).primaryColor.withOpacity(0.1)
164-
: Theme.of(context).backgroundColor,
165-
colorBlendMode: BlendMode.color,
166-
height: assetHeight,
167-
),
168-
),
169-
YaruRow(
170-
trailingWidget: const Text('Bottom'),
171-
description: 'Your dock appears on bottom side of your screen.',
172-
actionWidget: Radio<DockPosition>(
173-
value: DockPosition.right,
174-
groupValue: model.getDockPosition(),
175-
onChanged: (value) => model.setDockPosition(value!)),
176-
enabled: model.extendDock != null),
177-
Padding(
178-
padding: const EdgeInsets.all(assetPadding),
179-
child: SvgPicture.asset(
180-
model.getBottomAsset(),
181-
color: model.getDockPosition() == DockPosition.right
182-
? Theme.of(context).primaryColor.withOpacity(0.1)
183-
: Theme.of(context).backgroundColor,
184-
colorBlendMode: BlendMode.color,
185-
height: assetHeight,
186-
),
187-
),
188-
])
189185
],
190186
);
191187
}

lib/view/selectable_svg_image.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_svg/flutter_svg.dart';
3+
4+
class SelectableSvgImage extends StatelessWidget {
5+
const SelectableSvgImage(
6+
{Key? key,
7+
required this.path,
8+
this.onTap,
9+
required this.selected,
10+
required this.height,
11+
this.padding})
12+
: super(key: key);
13+
14+
final String path;
15+
final VoidCallback? onTap;
16+
final bool selected;
17+
final double height;
18+
final double? padding;
19+
20+
@override
21+
Widget build(BuildContext context) {
22+
return InkWell(
23+
borderRadius: BorderRadius.circular(6.0),
24+
onTap: onTap,
25+
child: Container(
26+
decoration: BoxDecoration(
27+
borderRadius: BorderRadius.circular(8.0),
28+
),
29+
child: Padding(
30+
padding: EdgeInsets.all(padding ?? 0.0),
31+
child: ClipRRect(
32+
borderRadius: BorderRadius.circular(4),
33+
child: SvgPicture.asset(
34+
path,
35+
color: selected
36+
? Theme.of(context).primaryColor.withOpacity(0.1)
37+
: Theme.of(context).backgroundColor,
38+
colorBlendMode: BlendMode.color,
39+
height: height,
40+
),
41+
),
42+
),
43+
),
44+
);
45+
}
46+
}

0 commit comments

Comments
 (0)