Browse Source

update group chat ui

pull/18/head
Sun 4 years ago
parent
commit
72502aadf4
  1. 40
      lib/apps/group_chat/detail.dart
  2. 21
      lib/apps/group_chat/page.dart
  3. 7
      lib/apps/group_chat/provider.dart

40
lib/apps/group_chat/detail.dart

@ -15,6 +15,7 @@ import 'package:esse/global.dart';
import 'package:esse/provider.dart'; import 'package:esse/provider.dart';
import 'package:esse/apps/chat/provider.dart'; import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/chat/models.dart' show Message;
import 'package:esse/apps/group_chat/models.dart'; import 'package:esse/apps/group_chat/models.dart';
import 'package:esse/apps/group_chat/provider.dart'; import 'package:esse/apps/group_chat/provider.dart';
@ -74,7 +75,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
return; return;
} }
context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.String, textController.text)); //context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.String, textController.text));
setState(() { setState(() {
textController.text = ''; textController.text = '';
textFocus.requestFocus(); textFocus.requestFocus();
@ -93,7 +94,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
void _sendImage() async { void _sendImage() async {
final image = await pickImage(); final image = await pickImage();
if (image != null) { if (image != null) {
context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.Image, image)); //context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.Image, image));
} }
setState(() { setState(() {
textFocus.requestFocus(); textFocus.requestFocus();
@ -107,7 +108,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
void _sendFile() async { void _sendFile() async {
final file = await pickFile(); final file = await pickFile();
if (file != null) { if (file != null) {
context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.File, file)); //context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.File, file));
} }
setState(() { setState(() {
textFocus.requestFocus(); textFocus.requestFocus();
@ -120,7 +121,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
void _sendRecord(int time) async { void _sendRecord(int time) async {
final raw = Message.rawRecordName(time, _recordName); final raw = Message.rawRecordName(time, _recordName);
context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.Record, raw)); //context.read<GroupChatProvider>().messageCreate(Message(group.id, MessageType.Record, raw));
setState(() { setState(() {
textFocus.requestFocus(); textFocus.requestFocus();
@ -165,7 +166,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
return GestureDetector( return GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () async { onTap: () async {
context.read<GroupChatProvider>().messageCreate(Message(friend.id, MessageType.Contact, "${contact.id}")); //context.read<GroupChatProvider>().messageCreate(Message(friend.id, MessageType.Contact, "${contact.id}"));
Navigator.of(context).pop(); Navigator.of(context).pop();
setState(() { setState(() {
textFocus.requestFocus(); textFocus.requestFocus();
@ -273,13 +274,12 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
child: Icon(Icons.more_vert_rounded, color: color.primary), child: Icon(Icons.more_vert_rounded, color: color.primary),
onSelected: (int value) { onSelected: (int value) {
if (value == 1) { if (value == 1) {
Provider.of<GroupChatProvider>(context, listen: false).groupUpdate( //Provider.of<GroupChatProvider>(context, listen: false).groupUpdate(this.group.id, isTop: !this.group.isTop);
this.group.id, isTop: !this.group.isTop);
} else if (value == 2) { } else if (value == 2) {
showShadowDialog( showShadowDialog(
context, context,
Icons.info, Icons.info,
lang.groupInfo, lang.friendInfo,
UserInfo( UserInfo(
id: 'EH' + this.group.gid.toUpperCase(), id: 'EH' + this.group.gid.toUpperCase(),
name: this.group.name, name: this.group.name,
@ -304,8 +304,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
child: Text(lang.ok), child: Text(lang.ok),
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
Provider.of<GroupChatProvider>( //Provider.of<GroupChatProvider>(context, listen: false).groupClose(this.group.id);
context, listen: false).groupClose(this.group.id);
if (!isDesktop) { if (!isDesktop) {
Navigator.pop(context); Navigator.pop(context);
} }
@ -316,14 +315,14 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
}, },
); );
} else if (value == 5) { } else if (value == 5) {
Provider.of<GroupChatProvider>(context, listen: false).requestCreate( // Provider.of<GroupChatProvider>(context, listen: false).requestCreate(
Request(this.group.gid, this.group.addr, this.group.name, lang.fromContactCard(meName))); // Request(this.group.gid, this.group.addr, this.group.name, lang.fromContactCard(meName)));
} else if (value == 6) { } else if (value == 6) {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertDialog(
title: Text(lang.delete + " " + lang.group), title: Text(lang.delete),
content: Text(this.group.name, content: Text(this.group.name,
style: TextStyle(color: Colors.red)), style: TextStyle(color: Colors.red)),
actions: [ actions: [
@ -335,8 +334,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
child: Text(lang.ok), child: Text(lang.ok),
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
Provider.of<GroupChatProvider>( //Provider.of<GroupChatProvider>(context, listen: false).groupDelete(this.group.id);
context, listen: false).groupDelete(this.group.id);
if (!isDesktop) { if (!isDesktop) {
Navigator.pop(context); Navigator.pop(context);
} }
@ -351,12 +349,12 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
itemBuilder: (context) { itemBuilder: (context) {
return <PopupMenuEntry<int>>[ return <PopupMenuEntry<int>>[
_menuItem(Color(0xFF6174FF), 1, Icons.vertical_align_top_rounded, this.group.isTop ? lang.cancelTop : lang.setTop), _menuItem(Color(0xFF6174FF), 1, Icons.vertical_align_top_rounded, this.group.isTop ? lang.cancelTop : lang.setTop),
_menuItem(Color(0xFF6174FF), 2, Icons.qr_code_rounded, lang.groupInfo), // _menuItem(Color(0xFF6174FF), 2, Icons.qr_code_rounded, lang.friendInfo),
//_menuItem(color.primary, 3, Icons.turned_in_rounded, lang.remark), // _menuItem(color.primary, 3, Icons.turned_in_rounded, lang.remark),
this.group.isClosed // this.group.isClosed
? _menuItem(Color(0xFF6174FF), 5, Icons.send_rounded, lang.addGroup) // ? _menuItem(Color(0xFF6174FF), 5, Icons.send_rounded, lang.addGroup)
: _menuItem(Color(0xFF6174FF), 4, Icons.block_rounded, lang.ungroup), // : _menuItem(Color(0xFF6174FF), 4, Icons.block_rounded, lang.unfriend),
_menuItem(Colors.red, 6, Icons.delete_rounded, lang.delete), // _menuItem(Colors.red, 6, Icons.delete_rounded, lang.delete),
]; ];
}, },
) )

21
lib/apps/group_chat/page.dart

@ -7,6 +7,7 @@ import 'package:esse/l10n/localizations.dart';
import 'package:esse/provider.dart'; import 'package:esse/provider.dart';
import 'package:esse/apps/group_chat/add.dart'; import 'package:esse/apps/group_chat/add.dart';
import 'package:esse/apps/group_chat/detail.dart';
import 'package:esse/apps/group_chat/models.dart'; import 'package:esse/apps/group_chat/models.dart';
import 'package:esse/apps/group_chat/provider.dart'; import 'package:esse/apps/group_chat/provider.dart';
@ -59,16 +60,16 @@ class ListChat extends StatelessWidget {
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () { onTap: () {
context.read<GroupChatProvider>().updateActivedGroup(group.id); context.read<GroupChatProvider>().updateActivedGroup(group.id);
// if (!isDesktop) { if (!isDesktop) {
// Navigator.push( Navigator.push(
// context, context,
// MaterialPageRoute( MaterialPageRoute(
// builder: (_) => GroupChatPage(), builder: (_) => GroupChatPage(),
// ), ),
// ); );
// } else { } else {
// context.read<AccountProvider>().updateActivedApp(GroupChatDetail()); context.read<AccountProvider>().updateActivedApp(GroupChatDetail());
// } }
}, },
child: Container( child: Container(
height: 55.0, height: 55.0,

7
lib/apps/group_chat/provider.dart

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:esse/rpc.dart'; import 'package:esse/rpc.dart';
import 'package:esse/apps/group_chat/models.dart'; import 'package:esse/apps/group_chat/models.dart';
import 'package:esse/apps/chat/models.dart' show Message;
class GroupChatProvider extends ChangeNotifier { class GroupChatProvider extends ChangeNotifier {
List<GroupType> createSupported = [GroupType.Encrypted, GroupType.Common, GroupType.Open]; List<GroupType> createSupported = [GroupType.Encrypted, GroupType.Common, GroupType.Open];
@ -15,6 +16,7 @@ class GroupChatProvider extends ChangeNotifier {
SplayTreeMap<int, GroupChat> requests = SplayTreeMap(); SplayTreeMap<int, GroupChat> requests = SplayTreeMap();
int actived; int actived;
SplayTreeMap<int, Message> activedMessages = SplayTreeMap();
GroupChat get activedGroup => this.groups[this.actived]; GroupChat get activedGroup => this.groups[this.actived];
@ -52,6 +54,11 @@ class GroupChatProvider extends ChangeNotifier {
updateActivedGroup(int id) { updateActivedGroup(int id) {
this.actived = id; this.actived = id;
// TODO load
}
clearActivedGroup() {
// TODO
} }
check(String addr) { check(String addr) {

Loading…
Cancel
Save