friend_request.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'package:e2ee_chat/azlistview/azlistview.dart';
  2. import 'package:e2ee_chat/common/api.dart';
  3. import 'package:e2ee_chat/common/global.dart';
  4. import 'package:e2ee_chat/l10n/localization_intl.dart';
  5. import 'package:e2ee_chat/model/contact_info.dart';
  6. import 'package:e2ee_chat/model/message.dart';
  7. import 'package:e2ee_chat/model/user.dart';
  8. import 'package:e2ee_chat/presenter/contact_list.dart';
  9. import 'package:e2ee_chat/presenter/chat_list.dart';
  10. import 'package:e2ee_chat/presenter/friend_request.dart';
  11. import 'package:e2ee_chat/presenter/login.dart';
  12. import 'package:e2ee_chat/presenter/user_chat.dart';
  13. import 'package:e2ee_chat/view/user_chat.dart';
  14. import 'package:e2ee_chat/widgets/utils.dart';
  15. import 'package:flutter/material.dart';
  16. import 'package:provider/provider.dart';
  17. class FriendRequestListView extends StatefulWidget {
  18. @override
  19. _FriendRequestListViewState createState() => _FriendRequestListViewState();
  20. }
  21. class _FriendRequestListViewState extends State<FriendRequestListView> {
  22. final presenter = FriendRequestPresenter();
  23. String _choice = 'Nothing';
  24. @override
  25. void initState() {
  26. super.initState();
  27. presenter.flushFriendRequest().then((_) => setState(() {}));
  28. }
  29. @override
  30. Widget build(BuildContext context) {
  31. return ChangeNotifierProvider<FriendRequestPresenter>(
  32. create: (context) => presenter,
  33. child: Scaffold(
  34. appBar: AppBar(
  35. title: Text(GmLocalizations.of(context).friendRequest),
  36. ),
  37. body: Builder(
  38. builder: (context) {
  39. final provider = Provider.of<FriendRequestPresenter>(context);
  40. final requests = provider.requests;
  41. return RefreshIndicator(
  42. child: AzListView(
  43. data: requests,
  44. itemCount: requests.length,
  45. itemBuilder: (context, index) {
  46. ContactInfo info = requests[index];
  47. return Utils.getWeChatListItem(context, info, defHeaderBgColor: Color(0xFFE5E5E5), onTap: () async {
  48. //TODO: 弹窗 接受 拒绝
  49. await showDialog(
  50. context: context,
  51. barrierDismissible: false,//// user must tap button!
  52. builder: (BuildContext context) {
  53. return AlertDialog(
  54. title: Text('Confirm'),
  55. content: Text('Accept?'),
  56. actions: <Widget>[
  57. TextButton(
  58. child: Text('No'),
  59. onPressed: () {
  60. provider.refuseFriend(info.name);
  61. Navigator.pop(context);
  62. },
  63. ),
  64. TextButton(
  65. child: Text('Yes'),
  66. onPressed: () {
  67. provider.acceptFriend(info.name);
  68. Navigator.pop(context);
  69. },
  70. ),
  71. ],
  72. );
  73. },
  74. );
  75. });
  76. },
  77. physics: BouncingScrollPhysics(),
  78. susItemBuilder: (BuildContext context, int index) {
  79. ContactInfo model = requests[index];
  80. debug('sus item build contact info: name ${model.name} tag ${model.getSuspensionTag()}');
  81. if ('↑' == model.getSuspensionTag()) {
  82. return Container();
  83. }
  84. return Utils.getSusItem(context, model.getSuspensionTag());
  85. },
  86. indexBarData: ['↑', '☆', ...kIndexBarData],
  87. indexBarOptions: IndexBarOptions(
  88. needRebuild: true,
  89. ignoreDragCancel: true,
  90. downTextStyle: TextStyle(fontSize: 12, color: Colors.white),
  91. downItemDecoration: BoxDecoration(shape: BoxShape.circle, color: Colors.green),
  92. indexHintWidth: 120 / 2,
  93. indexHintHeight: 100 / 2,
  94. indexHintDecoration: BoxDecoration(
  95. image: DecorationImage(
  96. image: AssetImage(Utils.getImgPath('ic_index_bar_bubble_gray')),
  97. fit: BoxFit.contain,
  98. ),
  99. ),
  100. indexHintAlignment: Alignment.centerRight,
  101. indexHintChildAlignment: Alignment(-0.25, 0.0),
  102. indexHintOffset: Offset(-20, 0),
  103. ),
  104. ),
  105. onRefresh: () async {});
  106. },
  107. ),
  108. ));
  109. }
  110. }