convert_list_widget.dart 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import 'package:ConversionFlutterDemo/models/convert_bean.dart';
  2. import 'package:ConversionFlutterDemo/states/convert_provider.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:open_file/open_file.dart';
  5. import 'package:provider/provider.dart';
  6. class ConvertListWidget extends StatefulWidget {
  7. const ConvertListWidget({Key? key}) : super(key: key);
  8. @override
  9. State<ConvertListWidget> createState() => _ConvertListWidgetState();
  10. }
  11. class _ConvertListWidgetState extends State<ConvertListWidget> {
  12. @override
  13. Widget build(BuildContext context) {
  14. var count =
  15. context.select<ConvertProvider, int>((value) => value.items.length);
  16. return ListView.builder(
  17. itemCount: count,
  18. primary: true,
  19. shrinkWrap: true,
  20. physics: new ClampingScrollPhysics(),
  21. itemBuilder: (BuildContext context, int index) {
  22. //设置子条目
  23. return Builder(builder: (context) {
  24. ConvertBean bean = context.select<ConvertProvider, ConvertBean>(
  25. (value) => value.items[index]);
  26. context.select<ConvertProvider, int>(
  27. (value) => value.items[index].progress);
  28. int status = context.select<ConvertProvider, int>(
  29. (value) => value.items[index].status);
  30. return Column(
  31. children: [
  32. ListTile(
  33. isThreeLine: true,
  34. title: Text(
  35. bean.fileName,
  36. style: const TextStyle(fontSize: 18),
  37. ),
  38. subtitle: Text(
  39. "PDF转${bean.convertType.toUpperCase()} ${bean.outputPath != null ? "\n${bean.outputPath}" : ''}",
  40. style: const TextStyle(fontSize: 12),
  41. ),
  42. trailing: Text(bean.getStatusName()),
  43. // item 直观感受是整体大小
  44. contentPadding:
  45. const EdgeInsets.symmetric(horizontal: 12, vertical: 2),
  46. onTap: () {
  47. if (status == convertSuccess) {
  48. OpenFile.open(bean.outputPath);
  49. }
  50. },
  51. ),
  52. ],
  53. );
  54. });
  55. },
  56. );
  57. }
  58. }