cpdf_bota_page.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import 'package:compdfkit_flutter/common/util/Strings.dart';
  2. import 'package:compdfkit_flutter/core/cpdf_view_ctrl.dart';
  3. import 'package:compdfkit_flutter/theme/colors.dart';
  4. import 'package:compdfkit_flutter/theme/themes.dart';
  5. import 'package:compdfkit_flutter/widgets/common/views/cpdf_scaffold.dart';
  6. import 'package:compdfkit_flutter/widgets/viewer/pdfbota/pdfoutline/cpdf_outline_page.dart';
  7. import 'package:compdfkit_flutter/widgets/viewer/pdfbota/pdfthumbnail/cpdf_thumbnail_page.dart';
  8. import 'package:flutter/material.dart';
  9. import '../../common/views/cpdf_tool_bar.dart';
  10. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  11. ///
  12. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  13. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  14. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  15. /// This notice may not be removed from this file.
  16. enum CPDFBotaType { thumbnails, outline, annotations, bookmarks }
  17. class CPDFBotaPage extends StatefulWidget {
  18. final bool isDark;
  19. final List<CPDFBotaType> types;
  20. final CPDFViewCtrl ctrl;
  21. const CPDFBotaPage(
  22. {super.key,
  23. required this.ctrl,
  24. this.isDark = false,
  25. required this.types});
  26. @override
  27. State<CPDFBotaPage> createState() => _CPDFBotaPageState();
  28. }
  29. class _CPDFBotaPageState extends State<CPDFBotaPage>
  30. with SingleTickerProviderStateMixin {
  31. late TabController _tabController;
  32. final ValueNotifier<String> _title = ValueNotifier('');
  33. @override
  34. void initState() {
  35. super.initState();
  36. _title.value = titles()[0];
  37. _tabController = TabController(length: widget.types.length, vsync: this);
  38. _tabController.addListener(() {
  39. if (!_tabController.indexIsChanging) {
  40. _title.value = titles()[_tabController.index];
  41. }
  42. });
  43. }
  44. @override
  45. void dispose() {
  46. _title.dispose();
  47. _tabController.dispose();
  48. super.dispose();
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. return CPDFScaffold(
  53. isDark: widget.isDark,
  54. appBar: CPDFToolbar(
  55. bottom: widget.types.length > 1
  56. ? TabBar(controller: _tabController, tabs: _tabItems())
  57. : null,
  58. leadingIcon: IconButton(
  59. onPressed: () {
  60. Navigator.pop(context);
  61. },
  62. icon: Icon(Icons.arrow_back,
  63. color: Theme.of(context).colorScheme.onBackground)),
  64. title: ValueListenableBuilder(
  65. builder: (BuildContext context, String title, Widget? child) {
  66. return Text(title,
  67. style: const TextStyle(
  68. fontFamily: 'sans-serif-medium', fontSize: 22));
  69. },
  70. valueListenable: _title,
  71. ),
  72. ),
  73. body: TabBarView(
  74. controller: _tabController,
  75. children: _pages(),
  76. ));
  77. }
  78. List<String> titles() {
  79. List<String> titles = widget.types.map((e) {
  80. switch (e) {
  81. case CPDFBotaType.annotations:
  82. return Strings.Annotations;
  83. case CPDFBotaType.bookmarks:
  84. return Strings.Bookmarks;
  85. case CPDFBotaType.outline:
  86. return Strings.Outlines;
  87. default:
  88. return Strings.Thumbnails;
  89. }
  90. }).toList();
  91. return titles;
  92. }
  93. List<Widget> _tabItems() {
  94. return titles().map((e) => Tab(text: e)).toList();
  95. }
  96. List<Widget> _pages() {
  97. return widget.types.map((e) {
  98. switch (e) {
  99. case CPDFBotaType.thumbnails:
  100. return CPDFThumbnailPage(
  101. document: widget.ctrl.document,
  102. currentPageIndex: widget.ctrl.currentPageIndex,
  103. );
  104. // case CPDFBotaType.annotations:
  105. // return Strings.Annotations;
  106. // case CPDFBotaType.bookmarks:
  107. // return Strings.Bookmarks;
  108. case CPDFBotaType.outline:
  109. return CPDFOutlinePage(document: widget.ctrl.document);
  110. default:
  111. return Text(e.name);
  112. }
  113. }).toList();
  114. }
  115. }