Skip to content

Commit

Permalink
feat: adapt mobile extension list (#242)
Browse files Browse the repository at this point in the history
  • Loading branch information
monkeyWie authored Oct 21, 2023
1 parent 74c9491 commit aab4a37
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 13 deletions.
37 changes: 27 additions & 10 deletions ui/flutter/lib/app/modules/extension/views/extension_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import '../../../../api/model/install_extension.dart';
import '../../../../api/model/switch_extension.dart';
import '../../../../util/util.dart';
import '../../../views/icon_button_loading.dart';
import '../../../views/responsive_builder.dart';
import '../controllers/extension_controller.dart';

class ExtensionView extends GetView<ExtensionController> {
Expand Down Expand Up @@ -96,7 +97,7 @@ class ExtensionView extends GetView<ExtensionController> {
itemBuilder: (context, index) {
final extension = controller.extensions[index];
return SizedBox(
height: 112,
height: ResponsiveBuilder.isNarrow(context) ? 152 : 112,
child: Card(
elevation: 4.0,
child: Column(
Expand Down Expand Up @@ -145,23 +146,32 @@ class ExtensionView extends GetView<ExtensionController> {
title: Row(
children: () {
final list = [
Text(extension.title),
ResponsiveBuilder.isNarrow(context)
? Expanded(
child: Text(
extension.title,
overflow:
TextOverflow.ellipsis,
),
)
: Text(extension.title),
const SizedBox(width: 8),
Chip(
label: Text('v${extension.version}'),
)
buildChip('v${extension.version}'),
];
if (extension.devMode) {
list.add(const SizedBox(width: 8));
list.add(Chip(
label: Text('dev'.tr),
backgroundColor: Colors.redAccent,
));
list.add(buildChip('dev'));
}
return list;
}(),
),
subtitle: Text(extension.description),
subtitle: ResponsiveBuilder.isNarrow(context)
? Text(
extension.description,
maxLines: 2,
overflow: TextOverflow.ellipsis,
)
: Text(extension.description),
),
),
Row(
Expand Down Expand Up @@ -233,6 +243,13 @@ class ExtensionView extends GetView<ExtensionController> {
);
}

Widget buildChip(String text) {
return Chip(
padding: const EdgeInsets.all(0),
label: Text(text, style: const TextStyle(fontSize: 12)),
);
}

Future<void> _showSettingDialog(Extension extension) async {
final formKey = GlobalKey<FormBuilderState>();
final confrimController = RoundedLoadingButtonController();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ class FileItem {
FileItem(this.isDirectory, this.path, this.name, this.size);

String get fullPath => "${path == "/" ? path : "$path/"}$name";

String filePath(String optName) {
return optName.isEmpty
? fullPath
: "${path == "/" ? path : "$path/"}$optName";
}
}

class TaskFilesController extends GetxController {
Expand Down
11 changes: 8 additions & 3 deletions ui/flutter/lib/app/modules/task/views/task_files_view.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:open_file/open_file.dart';
import 'package:path/path.dart';
import 'package:share_plus/share_plus.dart';

import '../../../../util/file_icon.dart';
Expand Down Expand Up @@ -52,13 +53,17 @@ class TaskFilesView extends GetView<TaskFilesController> {
itemBuilder: (context, index) {
final meta = controller.task.value!.meta;
final file = fileList[index];
final filePath = Util.safePathJoin(
[meta.opts.path, meta.res!.name, file.fullPath]);
final filePath = Util.safePathJoin([
meta.opts.path,
meta.res!.name,
file.filePath(meta.opts.name)
]);
final fileName = basename(filePath);
return ListTile(
leading: file.isDirectory
? const Icon(Icons.folder)
: Icon(FaIcons.allIcons[findIcon(file.name)]),
title: Text(fileList[index].name),
title: Text(fileName),
subtitle: file.isDirectory
? Text('items'.trParams({
'count': controller
Expand Down
1 change: 1 addition & 0 deletions ui/flutter/lib/util/util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class Util {

static String safePathJoin(List<String> paths) {
return paths
.where((e) => e.isNotEmpty)
.map((e) => safeDir(e))
.join("/")
.replaceAll(RegExp(r'//'), "/");
Expand Down

0 comments on commit aab4a37

Please sign in to comment.