Browse Source

unify select friends contact UI

pull/18/head
Sun 4 years ago
parent
commit
63ffdfdd1c
  1. 76
      lib/apps/assistant/page.dart
  2. 1
      lib/apps/assistant/provider.dart
  3. 73
      lib/apps/chat/detail.dart
  4. 73
      lib/apps/group_chat/detail.dart
  5. 24
      lib/widgets/show_contact.dart

76
lib/apps/assistant/page.dart

@ -9,11 +9,10 @@ import 'package:esse/l10n/localizations.dart'; @@ -9,11 +9,10 @@ import 'package:esse/l10n/localizations.dart';
import 'package:esse/widgets/emoji.dart';
import 'package:esse/widgets/shadow_dialog.dart';
import 'package:esse/widgets/audio_recorder.dart';
import 'package:esse/widgets/user_info.dart';
import 'package:esse/widgets/show_contact.dart';
import 'package:esse/global.dart';
import 'package:esse/options.dart';
import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/assistant/models.dart';
import 'package:esse/apps/assistant/provider.dart';
import 'package:esse/apps/assistant/message.dart';
@ -131,64 +130,24 @@ class _AssistantDetailState extends State<AssistantDetail> { @@ -131,64 +130,24 @@ class _AssistantDetailState extends State<AssistantDetail> {
});
}
void _sendContact(ColorScheme color, AppLocalizations lang, friends) {
_callback(int id) {
context.read<AssistantProvider>().create(MessageType.Contact, "${id}");
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
}
void _sendContact(ColorScheme color, AppLocalizations lang) {
showShadowDialog(
context,
Icons.person_rounded,
'Contact',
Column(children: [
Container(
height: 40.0,
decoration: BoxDecoration(
color: color.surface,
borderRadius: BorderRadius.circular(15.0)),
child: TextField(
autofocus: false,
textInputAction: TextInputAction.search,
textAlignVertical: TextAlignVertical.center,
style: TextStyle(fontSize: 14.0),
onSubmitted: (value) {
toast(context, 'WIP...');
},
decoration: InputDecoration(
hintText: lang.search,
hintStyle: TextStyle(color: color.onPrimary.withOpacity(0.5)),
border: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15.0, right: 15.0, bottom: 15.0),
),
),
),
SizedBox(height: 15.0),
Column(
children: friends.map<Widget>((contact) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () async {
context.read<AssistantProvider>().create(MessageType.Contact, "${contact.id}");
Navigator.of(context).pop();
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
},
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 20.0, vertical: 14.0),
child: Row(
children: [
contact.showAvatar(),
SizedBox(width: 15.0),
Text(contact.name, style: TextStyle(fontSize: 16.0)),
],
),
),
);
}).toList())
]));
lang.contact,
ContactList(callback: _callback, multiple: false)
);
}
@override
@ -424,8 +383,7 @@ class _AssistantDetailState extends State<AssistantDetail> { @@ -424,8 +383,7 @@ class _AssistantDetailState extends State<AssistantDetail> {
ExtensionButton(
icon: Icons.person_rounded,
text: lang.contact,
action: () => _sendContact(color, lang,
context.read<ChatProvider>().friends.values),
action: () => _sendContact(color, lang),
bgColor: color.surface,
iconColor: color.primary),
],

1
lib/apps/assistant/provider.dart

@ -28,7 +28,6 @@ class AssistantProvider extends ChangeNotifier { @@ -28,7 +28,6 @@ class AssistantProvider extends ChangeNotifier {
create(MessageType q_type, String q_content) {
rpc.send('assistant-create', [q_type.toInt(), q_content]);
notifyListeners();
}
/// delete a message.

73
lib/apps/chat/detail.dart

@ -11,6 +11,7 @@ import 'package:esse/widgets/shadow_dialog.dart'; @@ -11,6 +11,7 @@ import 'package:esse/widgets/shadow_dialog.dart';
import 'package:esse/widgets/audio_recorder.dart';
import 'package:esse/widgets/user_info.dart';
import 'package:esse/widgets/chat_message.dart';
import 'package:esse/widgets/show_contact.dart';
import 'package:esse/global.dart';
import 'package:esse/provider.dart';
import 'package:esse/session.dart';
@ -121,64 +122,24 @@ class _ChatDetailState extends State<ChatDetail> { @@ -121,64 +122,24 @@ class _ChatDetailState extends State<ChatDetail> {
});
}
void _sendContact(ColorScheme color, AppLocalizations lang, friends) {
_callback(int id) {
context.read<ChatProvider>().messageCreate(Message(_actived, MessageType.Contact, "${id}"));
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
}
void _sendContact(ColorScheme color, AppLocalizations lang) {
showShadowDialog(
context,
Icons.person_rounded,
'Contact',
Column(children: [
Container(
height: 40.0,
decoration: BoxDecoration(
color: color.surface,
borderRadius: BorderRadius.circular(15.0)),
child: TextField(
autofocus: false,
textInputAction: TextInputAction.search,
textAlignVertical: TextAlignVertical.center,
style: TextStyle(fontSize: 14.0),
onSubmitted: (value) {
toast(context, 'WIP...');
},
decoration: InputDecoration(
hintText: lang.search,
hintStyle: TextStyle(color: color.onPrimary.withOpacity(0.5)),
border: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15.0, right: 15.0, bottom: 15.0),
),
),
),
SizedBox(height: 15.0),
Column(
children: friends.map<Widget>((contact) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () async {
context.read<ChatProvider>().messageCreate(Message(_actived, MessageType.Contact, "${contact.id}"));
Navigator.of(context).pop();
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
},
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 20.0, vertical: 14.0),
child: Row(
children: [
contact.showAvatar(),
SizedBox(width: 15.0),
Text(contact.name, style: TextStyle(fontSize: 16.0)),
],
),
),
);
}).toList())
]));
lang.contact,
ContactList(callback: _callback, multiple: false)
);
}
@override
@ -536,7 +497,7 @@ class _ChatDetailState extends State<ChatDetail> { @@ -536,7 +497,7 @@ class _ChatDetailState extends State<ChatDetail> {
ExtensionButton(
icon: Icons.person_rounded,
text: lang.contact,
action: () => _sendContact(color, lang, context.read<ChatProvider>().friends.values),
action: () => _sendContact(color, lang),
bgColor: color.surface,
iconColor: color.primary),
],

73
lib/apps/group_chat/detail.dart

@ -20,7 +20,6 @@ import 'package:esse/global.dart'; @@ -20,7 +20,6 @@ import 'package:esse/global.dart';
import 'package:esse/provider.dart';
import 'package:esse/apps/primitives.dart';
import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/group_chat/models.dart';
import 'package:esse/apps/group_chat/provider.dart';
@ -127,64 +126,24 @@ class _GroupChatDetailState extends State<GroupChatDetail> { @@ -127,64 +126,24 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
});
}
void _sendContact(ColorScheme color, AppLocalizations lang, friends) {
_callback(int id) {
context.read<GroupChatProvider>().messageCreate(MessageType.Contact, "${id}");
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
}
void _sendContact(ColorScheme color, AppLocalizations lang) {
showShadowDialog(
context,
Icons.person_rounded,
'Contact',
Column(children: [
Container(
height: 40.0,
decoration: BoxDecoration(
color: color.surface,
borderRadius: BorderRadius.circular(15.0)),
child: TextField(
autofocus: false,
textInputAction: TextInputAction.search,
textAlignVertical: TextAlignVertical.center,
style: TextStyle(fontSize: 14.0),
onSubmitted: (value) {
toast(context, 'WIP...');
},
decoration: InputDecoration(
hintText: lang.search,
hintStyle: TextStyle(color: color.onPrimary.withOpacity(0.5)),
border: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15.0, right: 15.0, bottom: 15.0),
),
),
),
SizedBox(height: 15.0),
Column(
children: friends.map<Widget>((contact) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () async {
//context.read<GroupChatProvider>().messageCreate(Message(friend.id, MessageType.Contact, "${contact.id}"));
Navigator.of(context).pop();
setState(() {
textFocus.requestFocus();
emojiShow = false;
sendShow = false;
menuShow = false;
recordShow = false;
});
},
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 20.0, vertical: 14.0),
child: Row(
children: [
contact.showAvatar(),
SizedBox(width: 15.0),
Text(contact.name, style: TextStyle(fontSize: 16.0)),
],
),
),
);
}).toList())
]));
lang.contact,
ContactList(callback: _callback, multiple: false)
);
}
@override
@ -527,7 +486,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> { @@ -527,7 +486,7 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
ExtensionButton(
icon: Icons.person_rounded,
text: lang.contact,
action: () => _sendContact(color, lang, context.read<ChatProvider>().friends.values),
action: () => _sendContact(color, lang),
bgColor: color.surface,
iconColor: color.primary),
],

24
lib/widgets/show_contact.dart

@ -8,7 +8,7 @@ import 'package:esse/apps/chat/provider.dart'; @@ -8,7 +8,7 @@ import 'package:esse/apps/chat/provider.dart';
class ContactList extends StatefulWidget {
final Function callback;
final bool multiple;
const ContactList({Key key, this.callback, this.multiple}): super(key: key);
const ContactList({Key key, this.callback, this.multiple = true}): super(key: key);
@override
_ContactListState createState() => _ContactListState();
@ -34,17 +34,22 @@ class _ContactListState extends State<ContactList> { @@ -34,17 +34,22 @@ class _ContactListState extends State<ContactList> {
Widget _friend(int i, Friend friend) {
return Container(
height: 55.0,
child: ListTile(
child: widget.multiple
? ListTile(
leading: friend.showAvatar(),
title: Text(friend.name),
trailing: Checkbox(
value: _checks[i],
onChanged: (bool value) {
setState(() {
_checks[i] = value;
});
},
),
onChanged: (bool value) => setState(() => _checks[i] = value),
)
)
: ListTile(
onTap: () {
Navigator.pop(context);
widget.callback(friend.id);
},
leading: friend.showAvatar(),
title: Text(friend.name),
)
);
}
@ -54,7 +59,7 @@ class _ContactListState extends State<ContactList> { @@ -54,7 +59,7 @@ class _ContactListState extends State<ContactList> {
final color = Theme.of(context).colorScheme;
final lang = AppLocalizations.of(context);
double maxHeight = (MediaQuery.of(context).size.height - 300);
double maxHeight = (MediaQuery.of(context).size.height - 400);
if (maxHeight < 100.0) {
maxHeight = 100.0;
}
@ -93,6 +98,7 @@ class _ContactListState extends State<ContactList> { @@ -93,6 +98,7 @@ class _ContactListState extends State<ContactList> {
),
const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 10.0),
if (widget.multiple)
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [

Loading…
Cancel
Save