同步ios的功能

This commit is contained in:
jyuesong
2022-05-30 14:14:49 +08:00
parent bd77beb60a
commit 665a51f962
15 changed files with 126 additions and 51 deletions

View File

@ -44,3 +44,20 @@ iOS端暂无上架打算用户自行下载main分支源码编译安装
### 不支持的功能
>* 应用设置
>* 通知设置
版本更新通知 https://t.me/qinglongapp
用于生成app的图标
flutter pub run flutter_launcher_icons:main
生成原生的启动页面
flutter pub run flutter_native_splash:create
修改app名称
flutter pub run flutter_app_name
生成json.jc.dart文件
flutter pub run build_runner build --delete-conflicting-outputs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 18 KiB

BIN
assets/images/ql_splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -551,4 +551,4 @@
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
}

View File

@ -86,7 +86,7 @@ class _EnvPageState extends State<EnvPage> {
},
model: envProvider,
onReady: (viewModel) {
viewModel.loadData(context);
viewModel.loadData();
},
);
}

View File

@ -125,15 +125,9 @@ class _LoginPageState extends ConsumerState<LoginPage> {
}
WidgetsBinding.instance?.endOfFrame;
},
child: ColorFiltered(
colorFilter: ColorFilter.mode(
ref.watch(themeProvider).primaryColor,
BlendMode.srcIn,
),
child: Image.asset(
"assets/images/ql.png",
height: 45,
),
child: Image.asset(
"assets/images/ql.png",
height: 45,
),
),
],

View File

@ -6,20 +6,30 @@ class TaskLogBean {
String? name;
bool? isDir;
List<String>? files;
List<Children>? children;
TaskLogBean({this.name, this.isDir, this.files});
TaskLogBean({this.name, this.files});
TaskLogBean.fromJson(Map<String, dynamic> json) {
name = json['name'];
isDir = json['isDir'];
files = json['files'].cast<String>();
name = json['name'] ?? json['title'];
isDir = json['isDir'] ?? (json['type'] == "directory");
files = json['files']?.cast<String>();
if (json['children'] != null) {
children = <Children>[];
json['children'].forEach((v) {
children!.add(Children.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['isDir'] = this.isDir;
data['files'] = this.files;
if (this.children != null) {
data['children'] = this.children!.map((v) => v.toJson()).toList();
}
return data;
}
@ -27,3 +37,31 @@ class TaskLogBean {
return TaskLogBean.fromJson(json);
}
}
class Children {
String? title;
String? value;
String? type;
String? key;
String? parent;
Children({this.title, this.value, this.type, this.key, this.parent});
Children.fromJson(Map<String, dynamic> json) {
title = json['title'];
value = json['value'];
type = json['type'];
key = json['key'];
parent = json['parent'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['title'] = this.title;
data['value'] = this.value;
data['type'] = this.type;
data['key'] = this.key;
data['parent'] = this.parent;
return data;
}
}

View File

@ -43,40 +43,66 @@ class _TaskLogPageState extends ConsumerState<TaskLogPage> with LazyLoadState<Ta
color: ref.watch(themeProvider).themeColor.settingBgColor(),
child: (item.isDir ?? false)
? ExpansionTile(
title: Text(
item.name ?? "",
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 16,
),
),
children: item.files!
.map((e) => ListTile(
onTap: () {
Navigator.of(context).pushNamed(Routes.routeTaskLogDetail, arguments: item.name! + "/" + e);
},
title: Text(
e,
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 14,
),
),
))
.toList(),
)
: ListTile(
onTap: () {
Navigator.of(context).pushNamed(Routes.routeTaskLogDetail, arguments: item.name);
},
title: Text(
item.name ?? "",
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 16,
),
),
title: Text(
item.name ?? "",
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 16,
),
),
children: (item.files?.isNotEmpty ?? false)
? item.files!
.map((e) => ListTile(
onTap: () {
Navigator.of(context).pushNamed(Routes.routeTaskLogDetail, arguments: {
"path": item.name,
"title": e,
});
},
title: Text(
e,
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 14,
),
),
))
.toList()
: (item.children ?? [])
.map((e) => ListTile(
onTap: () {
Navigator.of(context).pushNamed(Routes.routeTaskLogDetail, arguments: {
"path": item.name,
"title": e.title,
});
},
title: Text(
e.title ?? "",
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 14,
),
),
))
.toList(),
)
: ListTile(
onTap: () {
if (item.isDir ?? false) {
"该文件夹为空".toast();
return;
}
Navigator.of(context).pushNamed(Routes.routeTaskLogDetail, arguments: item.name);
},
title: Text(
item.name ?? "",
style: TextStyle(
color: ref.watch(themeProvider).themeColor.titleColor(),
fontSize: 16,
),
),
),
);
},
itemCount: list.length,

View File

@ -41,7 +41,7 @@ class _TaskPageState extends ConsumerState<TaskPage> {
},
model: taskProvider,
onReady: (viewModel) {
viewModel.loadData(context);
viewModel.loadData();
},
);
}

View File

@ -63,7 +63,7 @@ flutter:
assets:
- assets/images/
flutter_app_name:
name: "青龙"
name: "青龙客户端"
flutter_icons:
image_path_android: "assets/images/ql.png"