Skip to content

Commit b54291e

Browse files
committed
feat(WebSavSetting): add WebDAV UI achieve
添加了webdav同步功能的UI(无实际功能) 重构了settingItem BREAKING CHANGE: settingItem被重构为了Widget标准类 Signed-off-by: OctagonalStar <[email protected]>
1 parent b556a05 commit b54291e

File tree

6 files changed

+318
-88
lines changed

6 files changed

+318
-88
lines changed

lib/pages/setting_page.dart

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:arabic_learning/sub_pages_builder/setting_pages/data_download_pa
55
import 'package:arabic_learning/sub_pages_builder/setting_pages/item_widget.dart';
66
import 'package:arabic_learning/sub_pages_builder/setting_pages/model_download_page.dart' show ModelDownload;
77
import 'package:arabic_learning/sub_pages_builder/setting_pages/questions_setting_page.dart' show QuestionsSettingLeadingPage;
8+
import 'package:arabic_learning/sub_pages_builder/setting_pages/sync_page.dart' show DataSyncPage;
89
import 'package:arabic_learning/vars/global.dart';
910
import 'package:flutter/foundation.dart' show kIsWeb;
1011
import 'package:file_picker/file_picker.dart';
@@ -22,23 +23,36 @@ class SettingPage extends StatefulWidget {
2223
class _SettingPage extends State<SettingPage> {
2324
@override
2425
Widget build(BuildContext context) {
25-
final mediaQuery = MediaQuery.of(context);
2626
return Consumer<Global>(
2727
builder: (context, value, child) {
2828
var setting = value.settingData;
2929
return ListView(
3030
children: [
31-
settingItem(context, mediaQuery, regularSetting(mediaQuery, context, setting), "常规设置"),
32-
settingItem(context, mediaQuery, dataSetting(mediaQuery, context, setting), "学习设置", withPadding: false),
33-
settingItem(context, mediaQuery, audioSetting(mediaQuery, context, setting), "音频设置", withPadding: false),
34-
settingItem(context, mediaQuery, aboutSetting(mediaQuery, context, setting), "关于", withPadding: false),
31+
SettingItem(
32+
title: "常规设置",
33+
padding: EdgeInsets.all(8.0),
34+
children: regularSetting(context, setting),
35+
),
36+
SettingItem(
37+
title: "学习设置",
38+
children: dataSetting(context, setting),
39+
),
40+
SettingItem(
41+
title: "音频设置",
42+
children: audioSetting(context, setting),
43+
),
44+
SettingItem(
45+
title: "关于",
46+
children: aboutSetting(context, setting),
47+
),
3548
],
3649
);
3750
},
3851
);
3952
}
4053

41-
List<Widget> regularSetting(MediaQueryData mediaQuery, BuildContext context, Map<String, dynamic> setting) {
54+
List<Widget> regularSetting(BuildContext context, Map<String, dynamic> setting) {
55+
MediaQueryData mediaQuery = MediaQuery.of(context);
4256
return [
4357
Row(
4458
children: [
@@ -117,7 +131,8 @@ class _SettingPage extends State<SettingPage> {
117131
];
118132
}
119133

120-
List<Widget> dataSetting(MediaQueryData mediaQuery, BuildContext context, Map<String, dynamic> setting) {
134+
List<Widget> dataSetting(BuildContext context, Map<String, dynamic> setting) {
135+
MediaQueryData mediaQuery = MediaQuery.of(context);
121136
return [
122137
Column(
123138
children: [
@@ -268,11 +283,29 @@ class _SettingPage extends State<SettingPage> {
268283
Icon(Icons.arrow_forward_ios)
269284
],
270285
)
271-
)
286+
),
287+
ElevatedButton(
288+
style: ElevatedButton.styleFrom(
289+
minimumSize: Size.fromHeight(mediaQuery.size.height * 0.08),
290+
backgroundColor: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
291+
shape: RoundedRectangleBorder(borderRadius: BorderRadiusGeometry.vertical(bottom: Radius.circular(25.0)))
292+
),
293+
onPressed: (){
294+
Navigator.of(context).push(MaterialPageRoute(builder: (context) => DataSyncPage()));
295+
},
296+
child: Row(
297+
children: [
298+
Icon(Icons.sync),
299+
Expanded(child: Text("数据备份及同步")),
300+
Icon(Icons.arrow_forward_ios)
301+
],
302+
)
303+
),
272304
];
273305
}
274306

275-
List<Widget> audioSetting(MediaQueryData mediaQuery, BuildContext context, Map<String, dynamic> setting) {
307+
List<Widget> audioSetting(BuildContext context, Map<String, dynamic> setting) {
308+
MediaQueryData mediaQuery = MediaQuery.of(context);
276309
var set = context.read<Global>().settingData;
277310
return [
278311
Column(
@@ -374,7 +407,8 @@ class _SettingPage extends State<SettingPage> {
374407
];
375408
}
376409

377-
List<Widget> aboutSetting(MediaQueryData mediaQuery, BuildContext context, Map<String, dynamic> setting) {
410+
List<Widget> aboutSetting(BuildContext context, Map<String, dynamic> setting) {
411+
MediaQueryData mediaQuery = MediaQuery.of(context);
378412
return [
379413
ElevatedButton(
380414
style: ElevatedButton.styleFrom(

lib/sub_pages_builder/learning_pages/learning_pages_build.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'dart:convert';
21
import 'dart:math';
32

43
import 'package:arabic_learning/funcs/ui.dart';

lib/sub_pages_builder/setting_pages/data_download_page.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class DownloadPage extends StatelessWidget {
1212
const DownloadPage({super.key});
1313
@override
1414
Widget build(BuildContext context) {
15-
final mediaQuery = MediaQuery.of(context);
1615
return Scaffold(
1716
appBar: AppBar(
1817
title: Text("下载在线词库"),
@@ -27,7 +26,10 @@ class DownloadPage extends StatelessWidget {
2726
}
2827
return ListView(
2928
children: [
30-
settingItem(context, mediaQuery, snapshot.data!, "来自 Github @${StaticsVar.onlineDictOwner} 学长的词库 (在此表示感谢)")
29+
SettingItem(
30+
title: "来自 Github @${StaticsVar.onlineDictOwner} 学长的词库 (在此表示感谢)",
31+
children: snapshot.data!,
32+
)
3133
],
3234
);
3335
}
Lines changed: 73 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,79 @@
11
import 'package:arabic_learning/funcs/ui.dart';
22
import 'package:flutter/material.dart';
33

4-
Widget settingItem(BuildContext context, MediaQueryData mediaQuery, List<Widget> list, String title, {bool withPadding = true}) {
5-
List<Container> decoratedContainers = list.map((widget) {
6-
return Container(
7-
width: mediaQuery.size.width * 0.90,
8-
//height: mediaQuery.size.height * 0.08,
9-
padding: withPadding ? EdgeInsets.all(8.0) : EdgeInsets.zero,
10-
decoration: BoxDecoration(
11-
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
12-
borderRadius: BorderRadius.all(Radius.circular(5.0)),
13-
),
14-
child: widget,
15-
);
16-
}).toList();
17-
if(decoratedContainers.length > 1){
18-
decoratedContainers[0] = Container(
19-
width: mediaQuery.size.width * 0.90,
20-
//height: mediaQuery.size.height * 0.08,
21-
margin: decoratedContainers[0].margin,
22-
padding: decoratedContainers[0].padding,
23-
decoration: BoxDecoration(
24-
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
25-
borderRadius: BorderRadius.vertical(top: Radius.circular(25.0), bottom: Radius.circular(5.0)),
26-
),
27-
child: decoratedContainers[0].child,
28-
);
29-
decoratedContainers[decoratedContainers.length - 1] = Container(
30-
width: mediaQuery.size.width * 0.90,
31-
//height: mediaQuery.size.height * 0.08,
32-
margin: decoratedContainers[decoratedContainers.length - 1].margin,
33-
padding: decoratedContainers[decoratedContainers.length - 1].padding,
34-
decoration: BoxDecoration(
35-
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
36-
borderRadius: BorderRadius.vertical(bottom: Radius.circular(25.0), top: Radius.circular(5.0)),
37-
),
38-
child: decoratedContainers[decoratedContainers.length - 1].child,
39-
);
40-
} else {
41-
decoratedContainers[0] = Container(
42-
width: mediaQuery.size.width * 0.90,
43-
//height: mediaQuery.size.height * 0.08,
44-
margin: decoratedContainers[0].margin,
45-
padding: decoratedContainers[0].padding,
46-
decoration: BoxDecoration(
47-
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
48-
borderRadius: BorderRadius.all(Radius.circular(25.0)),
49-
),
50-
child: decoratedContainers[0].child,
51-
);
52-
}
53-
//Add Sizedbox between each item in list
54-
List<Widget> newList = [];
55-
for (var i = 0; i < decoratedContainers.length; i++) {
56-
newList.add(decoratedContainers[i]);
57-
if (i != decoratedContainers.length - 1) {
58-
newList.add(SizedBox(height: mediaQuery.size.height * 0.005));
4+
class SettingItem extends StatelessWidget {
5+
final String title;
6+
final EdgeInsetsGeometry? padding;
7+
final List<Widget> children;
8+
const SettingItem({super.key, required this.children, required this.title, this.padding});
9+
10+
@override
11+
Widget build(BuildContext context) {
12+
MediaQueryData mediaQuery = MediaQuery.of(context);
13+
List<Container> decoratedContainers = children.map((widget) {
14+
return Container(
15+
width: mediaQuery.size.width * 0.90,
16+
padding: padding,
17+
decoration: BoxDecoration(
18+
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
19+
borderRadius: BorderRadius.all(Radius.circular(5.0)),
20+
),
21+
child: widget,
22+
);
23+
}).toList();
24+
25+
if(decoratedContainers.length > 1){
26+
decoratedContainers[0] = Container(
27+
width: mediaQuery.size.width * 0.90,
28+
margin: decoratedContainers[0].margin,
29+
padding: decoratedContainers[0].padding,
30+
decoration: BoxDecoration(
31+
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
32+
borderRadius: BorderRadius.vertical(top: Radius.circular(25.0), bottom: Radius.circular(5.0)),
33+
),
34+
child: decoratedContainers[0].child,
35+
);
36+
decoratedContainers[decoratedContainers.length - 1] = Container(
37+
width: mediaQuery.size.width * 0.90,
38+
margin: decoratedContainers[decoratedContainers.length - 1].margin,
39+
padding: decoratedContainers[decoratedContainers.length - 1].padding,
40+
decoration: BoxDecoration(
41+
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
42+
borderRadius: BorderRadius.vertical(bottom: Radius.circular(25.0), top: Radius.circular(5.0)),
43+
),
44+
child: decoratedContainers[decoratedContainers.length - 1].child,
45+
);
46+
} else {
47+
decoratedContainers[0] = Container(
48+
width: mediaQuery.size.width * 0.90,
49+
margin: decoratedContainers[0].margin,
50+
padding: decoratedContainers[0].padding,
51+
decoration: BoxDecoration(
52+
color: Theme.of(context).colorScheme.onPrimary.withAlpha(150),
53+
borderRadius: BorderRadius.all(Radius.circular(25.0)),
54+
),
55+
child: decoratedContainers[0].child,
56+
);
5957
}
60-
}
61-
return Column(
62-
mainAxisAlignment: MainAxisAlignment.start,
63-
crossAxisAlignment: CrossAxisAlignment.start,
64-
children: [
65-
TextContainer(text: title),
66-
Center(
67-
child: Column(
68-
children: newList,
58+
//Add Sizedbox between each item in list
59+
List<Widget> newList = [];
60+
for (var i = 0; i < decoratedContainers.length; i++) {
61+
newList.add(decoratedContainers[i]);
62+
if (i != decoratedContainers.length - 1) {
63+
newList.add(SizedBox(height: mediaQuery.size.height * 0.005));
64+
}
65+
}
66+
return Column(
67+
mainAxisAlignment: MainAxisAlignment.start,
68+
crossAxisAlignment: CrossAxisAlignment.start,
69+
children: [
70+
TextContainer(text: title),
71+
Center(
72+
child: Column(
73+
children: newList,
74+
),
6975
),
70-
),
71-
]
72-
);
76+
]
77+
);
78+
}
7379
}

0 commit comments

Comments
 (0)