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.

138 lines
4.1KB

  1. import 'package:farm_tpf/data/repository/repository.dart';
  2. import 'package:farm_tpf/models/Supply.dart';
  3. import 'package:farm_tpf/models/index.dart';
  4. import 'package:farm_tpf/presentation/custom_widgets/bottom_loader.dart';
  5. import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
  6. import 'package:farm_tpf/presentation/screens/resources/bloc/supply_bloc.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. class ResourceHelperScreen extends StatefulWidget {
  11. final String type;
  12. final int selectedId;
  13. final String titleName;
  14. ResourceHelperScreen(
  15. {@required this.type,
  16. @required this.selectedId,
  17. @required this.titleName});
  18. @override
  19. _ResourceHelperScreenState createState() => _ResourceHelperScreenState();
  20. }
  21. class _ResourceHelperScreenState extends State<ResourceHelperScreen> {
  22. @override
  23. Widget build(BuildContext context) {
  24. return BlocProvider(
  25. create: (context) => SupplyBloc(repository: Repository())
  26. ..add(DataFetched(type: widget.type, selectedId: widget.selectedId)),
  27. child: HoldInfinityWidget(
  28. selectedId: widget.selectedId,
  29. type: widget.type,
  30. titleName: widget.titleName,
  31. ),
  32. );
  33. }
  34. }
  35. class HoldInfinityWidget extends StatelessWidget {
  36. final int selectedId;
  37. final String type;
  38. final String titleName;
  39. HoldInfinityWidget(
  40. {@required this.selectedId,
  41. @required this.type,
  42. @required this.titleName});
  43. final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  44. @override
  45. Widget build(BuildContext context) {
  46. return Scaffold(
  47. key: _scaffoldKey,
  48. appBar: AppBar(title: Text("Chọn $titleName")),
  49. body: InfinityView(
  50. selectedId: selectedId,
  51. type: type,
  52. ));
  53. }
  54. }
  55. class InfinityView extends StatefulWidget {
  56. final int selectedId;
  57. final String type;
  58. InfinityView({@required this.selectedId, @required this.type});
  59. @override
  60. _InfinityViewState createState() => _InfinityViewState();
  61. }
  62. class _InfinityViewState extends State<InfinityView> {
  63. SupplyBloc _supplyBloc;
  64. @override
  65. void initState() {
  66. _supplyBloc = BlocProvider.of<SupplyBloc>(context);
  67. _supplyBloc
  68. .add(DataFetched(type: widget.type, selectedId: widget.selectedId));
  69. super.initState();
  70. }
  71. @override
  72. Widget build(BuildContext context) {
  73. return BlocBuilder<SupplyBloc, SupplyState>(
  74. builder: (context, state) {
  75. if (state is SupplyFailure) {
  76. return Center(child: Text(label_error_get_data));
  77. }
  78. if (state is SupplySuccess) {
  79. if (state.items.isEmpty) {
  80. return Center(child: Text(label_list_empty));
  81. }
  82. return RefreshIndicator(
  83. child: ListView.builder(
  84. itemBuilder: (BuildContext context, int index) {
  85. return index >= state.items.length
  86. ? BottomLoader()
  87. : ItemInfinityWidget(item: state.items[index]);
  88. },
  89. itemCount: state.items.length),
  90. onRefresh: () async {
  91. _supplyBloc.add(OnRefresh(
  92. type: widget.type, selectedId: widget.selectedId));
  93. });
  94. }
  95. return Center(
  96. child: LoadingListPage(),
  97. );
  98. },
  99. );
  100. }
  101. @override
  102. void dispose() {
  103. super.dispose();
  104. }
  105. }
  106. class ItemInfinityWidget extends StatelessWidget {
  107. final Supply item;
  108. const ItemInfinityWidget({Key key, @required this.item}) : super(key: key);
  109. @override
  110. Widget build(BuildContext context) {
  111. return GestureDetector(
  112. child: Card(
  113. child: Material(
  114. child: RadioListTile(
  115. title: Text(item.name.toString()),
  116. subtitle: Text(item.manufacturer.toString()),
  117. value: item,
  118. groupValue: item.isSelected ? item : null,
  119. onChanged: (Supply value) {
  120. print("selected value: ${value.id}");
  121. Navigator.of(context).pop(value.id);
  122. }),
  123. )),
  124. onTap: () {});
  125. }
  126. }