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.

152 lines
4.6KB

  1. import 'package:farm_tpf/custom_model/Supply.dart';
  2. import 'package:farm_tpf/data/repository/repository.dart';
  3. import 'package:farm_tpf/presentation/custom_widgets/bottom_loader.dart';
  4. import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
  5. import 'package:farm_tpf/presentation/screens/resources/bloc/supply_bloc.dart';
  6. import 'package:farm_tpf/presentation/screens/resources/widget_search.dart';
  7. import 'package:farm_tpf/utils/const_string.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:flutter_bloc/flutter_bloc.dart';
  10. import 'package:get/get.dart';
  11. class ResourceHelperScreen extends StatefulWidget {
  12. final String type;
  13. final int selectedId;
  14. final String titleName;
  15. ResourceHelperScreen(
  16. {@required this.type,
  17. @required this.selectedId,
  18. @required this.titleName});
  19. @override
  20. _ResourceHelperScreenState createState() => _ResourceHelperScreenState();
  21. }
  22. class _ResourceHelperScreenState extends State<ResourceHelperScreen> {
  23. @override
  24. Widget build(BuildContext context) {
  25. return BlocProvider(
  26. create: (context) => SupplyBloc(repository: Repository())
  27. ..add(DataFetched(type: widget.type, selectedId: widget.selectedId)),
  28. child: HoldInfinityWidget(
  29. selectedId: widget.selectedId,
  30. type: widget.type,
  31. titleName: widget.titleName,
  32. ),
  33. );
  34. }
  35. }
  36. class HoldInfinityWidget extends StatelessWidget {
  37. final int selectedId;
  38. final String type;
  39. final String titleName;
  40. HoldInfinityWidget(
  41. {@required this.selectedId,
  42. @required this.type,
  43. @required this.titleName});
  44. final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  45. @override
  46. Widget build(BuildContext context) {
  47. return Scaffold(
  48. key: _scaffoldKey,
  49. appBar: AppBar(title: Text("Chọn $titleName")),
  50. body: Column(
  51. children: <Widget>[
  52. WidgetSearch(
  53. type: type,
  54. selectedId: selectedId,
  55. ),
  56. Expanded(
  57. child: InfinityView(
  58. selectedId: selectedId,
  59. type: type,
  60. ))
  61. ],
  62. ));
  63. }
  64. }
  65. class InfinityView extends StatefulWidget {
  66. final int selectedId;
  67. final String type;
  68. InfinityView({@required this.selectedId, @required this.type});
  69. @override
  70. _InfinityViewState createState() => _InfinityViewState();
  71. }
  72. class _InfinityViewState extends State<InfinityView> {
  73. SupplyBloc _supplyBloc;
  74. @override
  75. void initState() {
  76. _supplyBloc = BlocProvider.of<SupplyBloc>(context);
  77. _supplyBloc
  78. .add(DataFetched(type: widget.type, selectedId: widget.selectedId));
  79. super.initState();
  80. }
  81. @override
  82. Widget build(BuildContext context) {
  83. return BlocBuilder<SupplyBloc, SupplyState>(
  84. builder: (context, state) {
  85. if (state is SupplyFailure) {
  86. return Center(child: Text(label_error_get_data));
  87. }
  88. if (state is SupplySuccess) {
  89. if (state.items.isEmpty) {
  90. return Center(child: Text(label_list_empty));
  91. }
  92. return RefreshIndicator(
  93. child: ListView.builder(
  94. itemBuilder: (BuildContext context, int index) {
  95. return index >= state.items.length
  96. ? BottomLoader()
  97. : ItemInfinityWidget(item: state.items[index]);
  98. },
  99. itemCount: state.items.length),
  100. onRefresh: () async {
  101. _supplyBloc.add(OnRefresh(
  102. type: widget.type, selectedId: widget.selectedId));
  103. });
  104. }
  105. return Center(
  106. child: LoadingListPage(),
  107. );
  108. },
  109. );
  110. }
  111. @override
  112. void dispose() {
  113. super.dispose();
  114. }
  115. }
  116. class ItemInfinityWidget extends StatelessWidget {
  117. final Supply item;
  118. const ItemInfinityWidget({Key key, @required this.item}) : super(key: key);
  119. @override
  120. Widget build(BuildContext context) {
  121. return GestureDetector(
  122. child: Card(
  123. child: Material(
  124. child: RadioListTile(
  125. title: Text(item.tbSuppliesName.toString()),
  126. subtitle: Text(item.tbWarehouseName.toString()),
  127. value: item,
  128. groupValue: item.isSelected == false ? null : item,
  129. onChanged: (Supply value) {
  130. if (value.quantity <= 0) {
  131. Get.snackbar("Vật tư đã hết", "Vui lòng chọn vật tư khác",
  132. snackPosition: SnackPosition.BOTTOM);
  133. } else {
  134. Navigator.of(context).pop(value);
  135. }
  136. }),
  137. )),
  138. onTap: () {});
  139. }
  140. }