activity_provider.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'package:news_app/http/http_util.dart';
  3. import 'package:news_app/http/model_parser.dart';
  4. import 'package:news_app/model/activity_banner_model.dart';
  5. import '../constant/api_const.dart';
  6. import '../model/activity_model.dart';
  7. class ActivityProvider extends Notifier<ActivityData> {
  8. @override
  9. ActivityData build() {
  10. return ActivityData();
  11. }
  12. Future<void> fetchActivityBanner() async {
  13. var jsonData = await HttpUtil().get(
  14. apiBannerList,
  15. queryParameters: {"type": "activity"},
  16. );
  17. final newList = ModelParser.parseList<ActivityBannerModel>(
  18. jsonData,
  19. ActivityBannerModel.fromJson,
  20. );
  21. state = state.copyWith(activityBannerList: newList);
  22. }
  23. Future<void> fetchActivityList({required int page}) async {
  24. var jsonData = await HttpUtil().get(
  25. apiActivityList,
  26. queryParameters: {"ps": 10, "pn": page},
  27. );
  28. final response = ModelParser.parseObject<ActivityModel>(
  29. jsonData,
  30. ActivityModel.fromJson,
  31. );
  32. final oldRecords = state.activityList?.records ?? [];
  33. state = state.copyWith(
  34. activityList: response.copyWith(
  35. total: response.total,
  36. size: response.size,
  37. current: response.current,
  38. pages: response.pages,
  39. records:
  40. page == 1
  41. ? response.records
  42. : [...oldRecords, ...?response.records],
  43. ),
  44. );
  45. }
  46. }
  47. class ActivityData {
  48. final List<ActivityBannerModel> activityBannerList;
  49. //final ActivityModel? activityVideoList;
  50. final ActivityModel? activityList;
  51. ActivityData({
  52. this.activityBannerList = const [],
  53. // this.activityVideoList,
  54. this.activityList,
  55. });
  56. ActivityData copyWith({
  57. List<ActivityBannerModel>? activityBannerList,
  58. ActivityModel? activityVideoList,
  59. ActivityModel? activityList,
  60. }) {
  61. return ActivityData(
  62. activityBannerList: activityBannerList ?? this.activityBannerList,
  63. // activityVideoList: activityVideoList ?? this.activityVideoList,
  64. activityList: activityList ?? this.activityList,
  65. );
  66. }
  67. }