FollowedPage.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/BaseArchitectural.dart';
  3. import 'package:flutter_habit/common/I18N.dart';
  4. import 'package:flutter_habit/common/components/PopMenus.dart';
  5. import 'package:flutter_habit/common/components/UserListTile.dart';
  6. import 'package:flutter_habit/provider/UserProvider.dart';
  7. import 'package:flutter_habit/network/Repository.dart';
  8. import 'package:provider/provider.dart';
  9. class FollowedPage extends StatelessWidget {
  10. @override
  11. Widget build(BuildContext context) {
  12. return MultiProvider(
  13. providers: [
  14. ChangeNotifierProvider<FollowedPageService>(
  15. create: (_) => FollowedPageService(context)),
  16. ChangeNotifierProvider<FollowedPageModel>(
  17. create: (_) => FollowedPageModel(context)),
  18. ],
  19. child: _FollowedPageView(),
  20. );
  21. }
  22. }
  23. // model
  24. class FollowedPageModel extends BaseModel {
  25. FollowedPageModel(BuildContext context) : super(context);
  26. late bool isRequesting;
  27. late List data;
  28. @override
  29. void init(BuildContext context) {
  30. super.init(context);
  31. isRequesting = true;
  32. data = [];
  33. }
  34. @override
  35. Future<void> asyncInit(BuildContext context) async {
  36. UserProvider userProvider =
  37. Provider.of<UserProvider>(context, listen: false);
  38. data.add(userProvider.uid);
  39. data.addAll((await Repository.getInstance()!
  40. .getFollowList(context, userProvider.token, userProvider.uid))!);
  41. isRequesting = false;
  42. refresh();
  43. }
  44. }
  45. // service
  46. class FollowedPageService extends BaseProvider {
  47. FollowedPageService(BuildContext context) : super(context);
  48. Future<void> onUnFollowed(BuildContext context, int? uid) async {
  49. FollowedPageModel model =
  50. Provider.of<FollowedPageModel>(context, listen: false);
  51. UserProvider userProvider =
  52. Provider.of<UserProvider>(context, listen: false);
  53. String? res = await PopMenus.userInfo(context: context, uid: uid);
  54. if (res != null) {
  55. model.data.remove(uid);
  56. model.isRequesting = true;
  57. model.refresh();
  58. model.data.clear();
  59. model.data.add(userProvider.uid);
  60. model.data.addAll((await Repository.getInstance()!
  61. .getFollowList(context, userProvider.token, userProvider.uid))!);
  62. model.isRequesting = false;
  63. model.refresh();
  64. }
  65. }
  66. }
  67. // view
  68. class _FollowedPageView extends StatelessWidget {
  69. @override
  70. Widget build(BuildContext context) {
  71. FollowedPageService service =
  72. Provider.of<FollowedPageService>(context, listen: false);
  73. FollowedPageModel model =
  74. Provider.of<FollowedPageModel>(context, listen: true);
  75. UserProvider userProvider =
  76. Provider.of<UserProvider>(context, listen: true);
  77. return Scaffold(
  78. appBar: AppBar(
  79. title: Text(I18N.of("我的关注")),
  80. ),
  81. body: Padding(
  82. padding: EdgeInsets.all(16),
  83. child: ListView(
  84. children: <Widget>[
  85. model.isRequesting ? LinearProgressIndicator() : Container(),
  86. Column(
  87. children: model.data.map((i) {
  88. return UserListTile(
  89. uid: i,
  90. trailing: i == userProvider.uid
  91. ? null
  92. : Text("${I18N.of("排名")}: ${model.data.indexOf(i)}"),
  93. onPress: () => service.onUnFollowed(context, i),
  94. );
  95. }).toList(),
  96. )
  97. ],
  98. ),
  99. ),
  100. );
  101. }
  102. }