You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.7KB

  1. import 'package:farm_tpf/data/repository/repository.dart';
  2. import 'package:farm_tpf/presentation/custom_widgets/bottom_loader.dart';
  3. import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
  4. import 'package:farm_tpf/presentation/screens/plot/widget_search.dart';
  5. import 'package:farm_tpf/presentation/screens/plot_detail/sc_plot_detail.dart';
  6. import 'package:farm_tpf/utils/pref.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:flutter_bloc/flutter_bloc.dart';
  9. import 'package:farm_tpf/utils/const_string.dart';
  10. import 'bloc/plot_bloc.dart';
  11. import 'widgets/item_plot.dart';
  12. class PlotListScreen extends StatefulWidget {
  13. @override
  14. _PlotListScreenState createState() => _PlotListScreenState();
  15. }
  16. class _PlotListScreenState extends State<PlotListScreen> {
  17. var pref = LocalPref();
  18. var token;
  19. var client;
  20. String pushkey = "";
  21. String currentFullName = "";
  22. @override
  23. void initState() {
  24. super.initState();
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. return BlocProvider(
  29. create: (context) => PlotBloc(repository: Repository())..add(DataFetched()),
  30. child: HoldInfinityWidget(),
  31. );
  32. }
  33. }
  34. class HoldInfinityWidget extends StatelessWidget {
  35. final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  36. @override
  37. Widget build(BuildContext context) {
  38. return Scaffold(backgroundColor: Colors.white, key: _scaffoldKey, body: SafeArea(child: InfinityView()));
  39. }
  40. }
  41. class InfinityView extends StatefulWidget {
  42. @override
  43. _InfinityViewState createState() => _InfinityViewState();
  44. }
  45. class _InfinityViewState extends State<InfinityView> {
  46. final _scrollController = ScrollController();
  47. final _scrollThreshold = 250.0;
  48. PlotBloc? _plotBloc;
  49. @override
  50. void initState() {
  51. _scrollController.addListener(() {
  52. final maxScroll = _scrollController.position.maxScrollExtent;
  53. final currentScroll = _scrollController.position.pixels;
  54. if (maxScroll - currentScroll < _scrollThreshold) {
  55. _plotBloc?.add(DataFetched());
  56. }
  57. });
  58. _plotBloc = BlocProvider.of<PlotBloc>(context);
  59. super.initState();
  60. }
  61. @override
  62. Widget build(BuildContext context) {
  63. return Column(
  64. crossAxisAlignment: CrossAxisAlignment.start,
  65. children: <Widget>[
  66. SizedBox(
  67. height: 8,
  68. ),
  69. Container(
  70. padding: EdgeInsets.all(8),
  71. color: Colors.white,
  72. child: Text(
  73. 'Danh sách lô trồng',
  74. style: TextStyle(fontWeight: FontWeight.w500, fontSize: 22),
  75. ),
  76. ),
  77. WidgetSearch(
  78. searchController: TextEditingController(),
  79. onPressed: (value) {
  80. FocusScope.of(context).requestFocus(FocusNode());
  81. BlocProvider.of<PlotBloc>(context).add(OnSearch(searchString: value));
  82. },
  83. ),
  84. Expanded(child: BlocBuilder<PlotBloc, PlotState>(
  85. builder: (context, state) {
  86. if (state is PlotFailure) {
  87. return Center(child: Text(state.errorString));
  88. }
  89. if (state is PlotSuccess) {
  90. if ((state.items ?? []).isEmpty) {
  91. return Center(child: Text(label_list_empty));
  92. }
  93. return RefreshIndicator(
  94. child: ListView.builder(
  95. physics: AlwaysScrollableScrollPhysics(),
  96. itemBuilder: (BuildContext context, int index) {
  97. return index >= (state.items ?? []).length
  98. ? BottomLoader()
  99. : ItemPlot(
  100. item: state.items?[index],
  101. onPressed: () {
  102. Navigator.push(
  103. context,
  104. MaterialPageRoute(
  105. builder: (BuildContext context) => PlotDetailScreen(
  106. cropId: state.items?[index].id ?? -1,
  107. initialIndex: 0,
  108. cropType: state.items?[index].tbCropTypeId ?? -1,
  109. ),
  110. ),
  111. );
  112. },
  113. );
  114. },
  115. itemCount: (state.hasReachedMax ?? false) ? (state.items ?? []).length : (state.items ?? []).length + 1,
  116. controller: _scrollController,
  117. ),
  118. onRefresh: () async {
  119. _plotBloc?.add(OnRefresh());
  120. },
  121. );
  122. }
  123. return Center(
  124. child: LoadingListPage(),
  125. );
  126. },
  127. ))
  128. ],
  129. );
  130. }
  131. @override
  132. void dispose() {
  133. _scrollController.dispose();
  134. super.dispose();
  135. }
  136. }