friend_request.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. Navigator.pop(context);
  61. },
  62. ),
  63. TextButton(
  64. child: Text('Yes'),
  65. onPressed: () {
  66. provider.acceptFriend(info.name);
  67. Navigator.pop(context);
  68. },
  69. ),
  70. ],
  71. );
  72. },
  73. );
  74. });
  75. },
  76. physics: BouncingScrollPhysics(),
  77. susItemBuilder: (BuildContext context, int index) {
  78. ContactInfo model = requests[index];
  79. debug('sus item build contact info: name ${model.name} tag ${model.getSuspensionTag()}');
  80. if ('↑' == model.getSuspensionTag()) {
  81. return Container();
  82. }
  83. return Utils.getSusItem(context, model.getSuspensionTag());
  84. },
  85. indexBarData: ['↑', '☆', ...kIndexBarData],
  86. indexBarOptions: IndexBarOptions(
  87. needRebuild: true,
  88. ignoreDragCancel: true,
  89. downTextStyle: TextStyle(fontSize: 12, color: Colors.white),
  90. downItemDecoration: BoxDecoration(shape: BoxShape.circle, color: Colors.green),
  91. indexHintWidth: 120 / 2,
  92. indexHintHeight: 100 / 2,
  93. indexHintDecoration: BoxDecoration(
  94. image: DecorationImage(
  95. image: AssetImage(Utils.getImgPath('ic_index_bar_bubble_gray')),
  96. fit: BoxFit.contain,
  97. ),
  98. ),
  99. indexHintAlignment: Alignment.centerRight,
  100. indexHintChildAlignment: Alignment(-0.25, 0.0),
  101. indexHintOffset: Offset(-20, 0),
  102. ),
  103. ),
  104. onRefresh: () async {});
  105. },
  106. ),
  107. ));
  108. }
  109. }