yearly_list_page.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/repair/provider/repair_page_provider.dart';
  3. import 'package:liftmanager/internal/yearly/model/yearly_count_item.dart';
  4. import 'package:liftmanager/internal/yearly/widgets/yearly_list.dart';
  5. import 'package:liftmanager/net/api_service.dart';
  6. import 'package:liftmanager/res/resources.dart';
  7. import 'package:liftmanager/routers/fluro_navigator.dart';
  8. import 'package:liftmanager/utils/theme_utils.dart';
  9. import 'package:liftmanager/utils/toast.dart';
  10. import 'package:liftmanager/widgets/app_bar.dart';
  11. import 'package:provider/provider.dart' as p;
  12. class YearlyListPage extends StatefulWidget {
  13. YearlyListPage({this.topInto = false});
  14. final bool topInto;
  15. @override
  16. YearlyListPageState createState() => YearlyListPageState();
  17. }
  18. class YearlyListPageState extends State<YearlyListPage>
  19. with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {
  20. RepairPageProvider provider = RepairPageProvider();
  21. TabController _tabController;
  22. PageController _pageController = PageController(initialPage: 0);
  23. YearlyCountItem countItem = YearlyCountItem();
  24. @override
  25. void initState() {
  26. super.initState();
  27. _tabController = new TabController(vsync: this, length: 3);
  28. // if (widget.topInto) {
  29. // _tabController.animateTo(1);
  30. // _pageController = PageController(initialPage: 1);
  31. // } else {
  32. _pageController = PageController(initialPage: 0);
  33. // }
  34. getCount();
  35. }
  36. getCount() {
  37. ApiService(context: context).yearlyCount(onSuccess: (res) {
  38. if (res != null) {
  39. countItem = res;
  40. setState(() {});
  41. }
  42. }, onError: (code, msg) {
  43. toasts(msg);
  44. });
  45. }
  46. @override
  47. void dispose() {
  48. _tabController.dispose();
  49. super.dispose();
  50. }
  51. _onPageChange(int index) {
  52. _tabController.animateTo(index);
  53. provider.setIndex(index);
  54. getCount();
  55. }
  56. @override
  57. Widget build(BuildContext context) {
  58. return p.ChangeNotifierProvider<RepairPageProvider>(
  59. create: (_) => provider,
  60. child: WillPopScope(
  61. onWillPop: () {
  62. NavigatorUtils.goBackWithParams(context, true);
  63. return Future.value(false);
  64. },
  65. child: Scaffold(
  66. appBar: MyAppBar(
  67. centerTitle: "年检管理",
  68. ),
  69. body: Column(
  70. crossAxisAlignment: CrossAxisAlignment.start,
  71. children: <Widget>[
  72. Container(
  73. // 隐藏点击效果
  74. color: ThemeUtils.getTabsBg(context),
  75. child: TabBar(
  76. onTap: (index) {
  77. if (!mounted) {
  78. return;
  79. }
  80. _pageController.jumpToPage(index);
  81. },
  82. isScrollable: false,
  83. controller: _tabController,
  84. labelStyle: TextStyles.textBold18,
  85. indicatorSize: TabBarIndicatorSize.label,
  86. labelPadding: const EdgeInsets.all(0),
  87. unselectedLabelColor: Colours.text_gray,
  88. labelColor: Theme.of(context).primaryColor,
  89. indicatorPadding: EdgeInsets.only(left: 20.0, right: 20.0),
  90. tabs: <Widget>[
  91. _TabView("待开启", "(${countItem.toConfirm})", 0),
  92. _TabView("执行中", "(${countItem.processing})", 1),
  93. _TabView("已完成", "(${countItem.complete})", 2),
  94. ],
  95. ),
  96. ),
  97. Gaps.line,
  98. Expanded(
  99. child: PageView.builder(
  100. key: const Key('pageView'),
  101. itemCount: 3,
  102. onPageChanged: _onPageChange,
  103. controller: _pageController,
  104. itemBuilder: (BuildContext context, int index) {
  105. return Container(
  106. color: ThemeUtils.getBackgroundColor(context),
  107. child: YearlyList(
  108. index: index,
  109. callback: () {
  110. getCount();
  111. }));
  112. },
  113. ),
  114. )
  115. ],
  116. ),
  117. ),
  118. ));
  119. }
  120. @override
  121. bool get wantKeepAlive => true;
  122. }
  123. class _TabView extends StatelessWidget {
  124. const _TabView(this.tabName, this.tabSub, this.index);
  125. final String tabName;
  126. final String tabSub;
  127. final int index;
  128. @override
  129. Widget build(BuildContext context) {
  130. return p.Consumer<RepairPageProvider>(
  131. builder: (_, provider, child) {
  132. bool isDark = ThemeUtils.isDark(context);
  133. return Tab(
  134. child: SizedBox(
  135. child: Row(
  136. crossAxisAlignment: CrossAxisAlignment.center,
  137. mainAxisAlignment: MainAxisAlignment.center,
  138. children: <Widget>[
  139. Text(
  140. tabName,
  141. style: TextStyle(
  142. fontSize: 15,
  143. color: isDark ? Colours.dark_text : Colours.text),
  144. ),
  145. Padding(
  146. padding: const EdgeInsets.only(top: 1.0),
  147. child:
  148. Text(tabSub, style: TextStyle(fontSize: Dimens.font_sp12)),
  149. ),
  150. ],
  151. ),
  152. ));
  153. },
  154. );
  155. }
  156. }