|
|
@@ -0,0 +1,114 @@
|
|
|
+import 'package:e2ee_chat/azlistview/azlistview.dart';
|
|
|
+import 'package:e2ee_chat/common/api.dart';
|
|
|
+import 'package:e2ee_chat/common/global.dart';
|
|
|
+import 'package:e2ee_chat/l10n/localization_intl.dart';
|
|
|
+import 'package:e2ee_chat/model/contact_info.dart';
|
|
|
+import 'package:e2ee_chat/model/message.dart';
|
|
|
+import 'package:e2ee_chat/model/user.dart';
|
|
|
+import 'package:e2ee_chat/presenter/contact_list.dart';
|
|
|
+import 'package:e2ee_chat/presenter/chat_list.dart';
|
|
|
+import 'package:e2ee_chat/presenter/friend_request.dart';
|
|
|
+import 'package:e2ee_chat/presenter/login.dart';
|
|
|
+import 'package:e2ee_chat/presenter/user_chat.dart';
|
|
|
+import 'package:e2ee_chat/view/user_chat.dart';
|
|
|
+import 'package:e2ee_chat/widgets/utils.dart';
|
|
|
+import 'package:flutter/material.dart';
|
|
|
+import 'package:provider/provider.dart';
|
|
|
+
|
|
|
+
|
|
|
+class FriendRequestListView extends StatefulWidget {
|
|
|
+ @override
|
|
|
+ _FriendRequestListViewState createState() => _FriendRequestListViewState();
|
|
|
+}
|
|
|
+
|
|
|
+class _FriendRequestListViewState extends State<FriendRequestListView> {
|
|
|
+ final presenter = FriendRequestPresenter();
|
|
|
+ String _choice = 'Nothing';
|
|
|
+
|
|
|
+ @override
|
|
|
+ void initState() {
|
|
|
+ super.initState();
|
|
|
+ presenter.flushFriendRequest().then((_) => setState(() {}));
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Widget build(BuildContext context) {
|
|
|
+ return ChangeNotifierProvider<FriendRequestPresenter>(
|
|
|
+ create: (context) => presenter,
|
|
|
+ child: Scaffold(
|
|
|
+ appBar: AppBar(
|
|
|
+ title: Text(GmLocalizations.of(context).friendRequest),
|
|
|
+ ),
|
|
|
+ body: Builder(
|
|
|
+ builder: (context) {
|
|
|
+ final provider = Provider.of<FriendRequestPresenter>(context);
|
|
|
+ final requests = provider.requests;
|
|
|
+ return RefreshIndicator(
|
|
|
+ child: AzListView(
|
|
|
+ data: requests,
|
|
|
+ itemCount: requests.length,
|
|
|
+ itemBuilder: (context, index) {
|
|
|
+ ContactInfo info = requests[index];
|
|
|
+ return Utils.getWeChatListItem(context, info, defHeaderBgColor: Color(0xFFE5E5E5), onTap: () async {
|
|
|
+ //TODO: 弹窗 接受 拒绝
|
|
|
+ await showDialog(
|
|
|
+ context: context,
|
|
|
+ barrierDismissible: false,//// user must tap button!
|
|
|
+ builder: (BuildContext context) {
|
|
|
+ return AlertDialog(
|
|
|
+ title: Text('Confirm'),
|
|
|
+ content: Text('Accept?'),
|
|
|
+ actions: <Widget>[
|
|
|
+ TextButton(
|
|
|
+ child: Text('No'),
|
|
|
+ onPressed: () {
|
|
|
+ Navigator.pop(context);
|
|
|
+ },
|
|
|
+ ),
|
|
|
+ TextButton(
|
|
|
+ child: Text('Yes'),
|
|
|
+ onPressed: () {
|
|
|
+ provider.acceptFriend(info.name);
|
|
|
+ Navigator.pop(context);
|
|
|
+ },
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ );
|
|
|
+ },
|
|
|
+ );
|
|
|
+ });
|
|
|
+ },
|
|
|
+ physics: BouncingScrollPhysics(),
|
|
|
+ susItemBuilder: (BuildContext context, int index) {
|
|
|
+ ContactInfo model = requests[index];
|
|
|
+ debug('sus item build contact info: name ${model.name} tag ${model.getSuspensionTag()}');
|
|
|
+ if ('↑' == model.getSuspensionTag()) {
|
|
|
+ return Container();
|
|
|
+ }
|
|
|
+ return Utils.getSusItem(context, model.getSuspensionTag());
|
|
|
+ },
|
|
|
+ indexBarData: ['↑', '☆', ...kIndexBarData],
|
|
|
+ indexBarOptions: IndexBarOptions(
|
|
|
+ needRebuild: true,
|
|
|
+ ignoreDragCancel: true,
|
|
|
+ downTextStyle: TextStyle(fontSize: 12, color: Colors.white),
|
|
|
+ downItemDecoration: BoxDecoration(shape: BoxShape.circle, color: Colors.green),
|
|
|
+ indexHintWidth: 120 / 2,
|
|
|
+ indexHintHeight: 100 / 2,
|
|
|
+ indexHintDecoration: BoxDecoration(
|
|
|
+ image: DecorationImage(
|
|
|
+ image: AssetImage(Utils.getImgPath('ic_index_bar_bubble_gray')),
|
|
|
+ fit: BoxFit.contain,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ indexHintAlignment: Alignment.centerRight,
|
|
|
+ indexHintChildAlignment: Alignment(-0.25, 0.0),
|
|
|
+ indexHintOffset: Offset(-20, 0),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ onRefresh: () async {});
|
|
|
+ },
|
|
|
+ ),
|
|
|
+ ));
|
|
|
+ }
|
|
|
+}
|