convert_list_widget.dart 3.7 KB

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