convert_list_widget.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /// convert_list_widget.dart
  2. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  3. ///
  4. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  5. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  6. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  7. /// This notice may not be removed from this file.
  8. import 'package:flutter/material.dart';
  9. import 'package:kmpdfkit_conversion_flutter/models/task_status.dart';
  10. import 'package:open_file/open_file.dart';
  11. import 'package:provider/provider.dart';
  12. import '../models/convert_task.dart';
  13. import '../states/convert_task_queue_provider.dart';
  14. class ConvertListWidget extends StatefulWidget {
  15. const ConvertListWidget({Key? key}) : super(key: key);
  16. @override
  17. State<ConvertListWidget> createState() => _ConvertListWidgetState();
  18. }
  19. class _ConvertListWidgetState extends State<ConvertListWidget> {
  20. @override
  21. Widget build(BuildContext context) {
  22. var count = context.select<ConvertTaskQueueProvider, int>(
  23. (value) => value.taskQueue.length);
  24. return ListView.builder(
  25. itemCount: count,
  26. primary: true,
  27. shrinkWrap: true,
  28. physics: const ClampingScrollPhysics(),
  29. itemBuilder: (BuildContext context, int index) {
  30. return Builder(builder: (context) {
  31. ConvertTask bean =
  32. context.select<ConvertTaskQueueProvider, ConvertTask>(
  33. (value) => value.taskQueue[index]);
  34. context.select<ConvertTaskQueueProvider, int>(
  35. (value) => value.taskQueue[index].progress);
  36. TaskStatus status =
  37. context.select<ConvertTaskQueueProvider, TaskStatus>(
  38. (value) => value.taskQueue[index].status);
  39. return Column(
  40. children: [
  41. ListTile(
  42. isThreeLine: true,
  43. title: Text(
  44. bean.fileName,
  45. style: const TextStyle(fontSize: 18),
  46. ),
  47. subtitle: Text(
  48. "PDF convert ${bean.convertType.name.toUpperCase()} ${bean.outputPath != null ? "\n${bean.outputPath}" : ''}",
  49. style: const TextStyle(fontSize: 12),
  50. ),
  51. trailing: Text(getStatusName(bean)),
  52. contentPadding:
  53. const EdgeInsets.symmetric(horizontal: 12, vertical: 2),
  54. onTap: () async {
  55. if (status == TaskStatus.success) {
  56. OpenFile.open(bean.outputPath);
  57. }
  58. },
  59. )
  60. ],
  61. );
  62. });
  63. },
  64. );
  65. }
  66. String getStatusName(ConvertTask task) {
  67. switch (task.status) {
  68. case TaskStatus.wait:
  69. return "Waiting";
  70. case TaskStatus.start:
  71. return "Start";
  72. case TaskStatus.converting:
  73. return "Converting (${task.progress}%)";
  74. case TaskStatus.success:
  75. return "SUCCESS";
  76. case TaskStatus.fail:
  77. return "FAIL";
  78. case TaskStatus.cancel:
  79. return "task canceled";
  80. default:
  81. return "";
  82. }
  83. }
  84. }