mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 11:18:41 +00:00
improve sending image directly to other user
This commit is contained in:
parent
742ad51daf
commit
1d84834a35
9 changed files with 87 additions and 103 deletions
|
|
@ -7,7 +7,6 @@ import 'package:twonly/src/providers/api_provider.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:twonly/src/providers/hive.dart';
|
import 'package:twonly/src/providers/hive.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/providers/settings_change_provider.dart';
|
import 'package:twonly/src/providers/settings_change_provider.dart';
|
||||||
import 'package:twonly/src/services/fcm_service.dart';
|
import 'package:twonly/src/services/fcm_service.dart';
|
||||||
import 'package:twonly/src/services/notification_service.dart';
|
import 'package:twonly/src/services/notification_service.dart';
|
||||||
|
|
@ -45,7 +44,6 @@ void main() async {
|
||||||
runApp(
|
runApp(
|
||||||
MultiProvider(
|
MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(create: (_) => SendNextMediaTo()),
|
|
||||||
ChangeNotifierProvider(create: (_) => settingsController),
|
ChangeNotifierProvider(create: (_) => settingsController),
|
||||||
],
|
],
|
||||||
child: MyApp(),
|
child: MyApp(),
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:pie_menu/pie_menu.dart';
|
import 'package:pie_menu/pie_menu.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/src/database/twonly_database.dart';
|
import 'package:twonly/src/database/twonly_database.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
||||||
import 'package:twonly/src/views/contact/contact_verify_view.dart';
|
import 'package:twonly/src/views/contact/contact_verify_view.dart';
|
||||||
import 'package:twonly/src/views/home_view.dart';
|
import 'package:twonly/src/views/home_view.dart';
|
||||||
|
|
@ -53,9 +52,7 @@ class _UserContextMenuState extends State<UserContextMenu> {
|
||||||
PieAction(
|
PieAction(
|
||||||
tooltip: Text(context.lang.contextMenuSendImage),
|
tooltip: Text(context.lang.contextMenuSendImage),
|
||||||
onSelect: () {
|
onSelect: () {
|
||||||
context
|
globalSendNextMediaToUser = widget.contact;
|
||||||
.read<SendNextMediaTo>()
|
|
||||||
.updateSendNextMediaTo(widget.contact.userId.toInt());
|
|
||||||
globalUpdateOfHomeViewPageIndex(0);
|
globalUpdateOfHomeViewPageIndex(0);
|
||||||
},
|
},
|
||||||
child: const FaIcon(FontAwesomeIcons.camera),
|
child: const FaIcon(FontAwesomeIcons.camera),
|
||||||
|
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
|
|
||||||
// This provider will update the UI on changes in the contact list
|
|
||||||
class SendNextMediaTo with ChangeNotifier, DiagnosticableTreeMixin {
|
|
||||||
int? _sendNextMediaToUserId;
|
|
||||||
|
|
||||||
int? get sendNextMediaToUserId => _sendNextMediaToUserId;
|
|
||||||
void updateSendNextMediaTo(int? userId) {
|
|
||||||
_sendNextMediaToUserId = userId;
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/components/image_editor/action_button.dart';
|
import 'package:twonly/src/components/image_editor/action_button.dart';
|
||||||
import 'package:twonly/src/components/media_view_sizing.dart';
|
import 'package:twonly/src/components/media_view_sizing.dart';
|
||||||
|
|
@ -8,7 +7,6 @@ import 'package:twonly/src/components/notification_badge.dart';
|
||||||
import 'package:twonly/src/database/daos/contacts_dao.dart';
|
import 'package:twonly/src/database/daos/contacts_dao.dart';
|
||||||
import 'package:twonly/src/database/twonly_database.dart';
|
import 'package:twonly/src/database/twonly_database.dart';
|
||||||
import 'package:twonly/src/providers/api/media.dart';
|
import 'package:twonly/src/providers/api/media.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
import 'package:twonly/src/utils/storage.dart';
|
import 'package:twonly/src/utils/storage.dart';
|
||||||
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
|
|
@ -39,6 +37,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
int maxShowTime = 999999;
|
int maxShowTime = 999999;
|
||||||
String? sendNextMediaToUserName;
|
String? sendNextMediaToUserName;
|
||||||
double tabDownPostion = 0;
|
double tabDownPostion = 0;
|
||||||
|
bool sendingImage = false;
|
||||||
|
|
||||||
ImageItem currentImage = ImageItem();
|
ImageItem currentImage = ImageItem();
|
||||||
ScreenshotController screenshotController = ScreenshotController();
|
ScreenshotController screenshotController = ScreenshotController();
|
||||||
|
|
@ -261,11 +260,9 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
pixelRatio = MediaQuery.of(context).devicePixelRatio;
|
pixelRatio = MediaQuery.of(context).devicePixelRatio;
|
||||||
|
|
||||||
int? sendNextMediaToUserId =
|
if (globalSendNextMediaToUser != null) {
|
||||||
context.watch<SendNextMediaTo>().sendNextMediaToUserId;
|
sendNextMediaToUserName =
|
||||||
|
getContactDisplayName(globalSendNextMediaToUser!);
|
||||||
if (sendNextMediaToUserId != null) {
|
|
||||||
updateAsync(sendNextMediaToUserId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
|
@ -410,9 +407,22 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
if (sendNextMediaToUserName != null) SizedBox(width: 10),
|
if (sendNextMediaToUserName != null) SizedBox(width: 10),
|
||||||
if (sendNextMediaToUserName == null) SizedBox(width: 20),
|
if (sendNextMediaToUserName == null) SizedBox(width: 20),
|
||||||
FilledButton.icon(
|
FilledButton.icon(
|
||||||
icon: FaIcon(FontAwesomeIcons.solidPaperPlane),
|
icon: sendingImage
|
||||||
|
? SizedBox(
|
||||||
|
height: 12,
|
||||||
|
width: 12,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
color: Theme.of(context).colorScheme.inversePrimary,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: FaIcon(FontAwesomeIcons.solidPaperPlane),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (sendNextMediaToUserId != null) {
|
if (sendingImage) return;
|
||||||
|
setState(() {
|
||||||
|
sendingImage = true;
|
||||||
|
});
|
||||||
|
if (globalSendNextMediaToUser != null) {
|
||||||
Uint8List? imageBytes = await getMergedImage();
|
Uint8List? imageBytes = await getMergedImage();
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
if (imageBytes == null) {
|
if (imageBytes == null) {
|
||||||
|
|
@ -420,15 +430,13 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sendImage(
|
sendImage(
|
||||||
[sendNextMediaToUserId],
|
[globalSendNextMediaToUser!.userId],
|
||||||
imageBytes,
|
imageBytes,
|
||||||
_isRealTwonly,
|
_isRealTwonly,
|
||||||
maxShowTime,
|
maxShowTime,
|
||||||
);
|
);
|
||||||
Navigator.popUntil(context, (route) => route.isFirst);
|
Navigator.popUntil(context, (route) => route.isFirst);
|
||||||
globalUpdateOfHomeViewPageIndex(1);
|
globalUpdateOfHomeViewPageIndex(1);
|
||||||
|
|
||||||
// send hier...
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Future<Uint8List?> imageBytes = getMergedImage();
|
Future<Uint8List?> imageBytes = getMergedImage();
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import 'dart:collection';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/components/best_friends_selector.dart';
|
import 'package:twonly/src/components/best_friends_selector.dart';
|
||||||
import 'package:twonly/src/components/flame.dart';
|
import 'package:twonly/src/components/flame.dart';
|
||||||
|
|
@ -13,10 +12,11 @@ import 'package:twonly/src/components/verified_shield.dart';
|
||||||
import 'package:twonly/src/database/daos/contacts_dao.dart';
|
import 'package:twonly/src/database/daos/contacts_dao.dart';
|
||||||
import 'package:twonly/src/database/twonly_database.dart';
|
import 'package:twonly/src/database/twonly_database.dart';
|
||||||
import 'package:twonly/src/providers/api/media.dart';
|
import 'package:twonly/src/providers/api/media.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
import 'package:twonly/src/views/home_view.dart';
|
import 'package:twonly/src/views/home_view.dart';
|
||||||
|
|
||||||
|
Contact? globalSendNextMediaToUser;
|
||||||
|
|
||||||
class ShareImageView extends StatefulWidget {
|
class ShareImageView extends StatefulWidget {
|
||||||
const ShareImageView(
|
const ShareImageView(
|
||||||
{super.key,
|
{super.key,
|
||||||
|
|
@ -47,10 +47,8 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
int? sendNextMediaToUserId =
|
if (globalSendNextMediaToUser != null) {
|
||||||
context.read<SendNextMediaTo>().sendNextMediaToUserId;
|
_selectedUserIds.add(globalSendNextMediaToUser!.userId);
|
||||||
if (sendNextMediaToUserId != null) {
|
|
||||||
_selectedUserIds.add(sendNextMediaToUserId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<Contact>> allContacts =
|
Stream<List<Contact>> allContacts =
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import 'dart:collection';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/components/animate_icon.dart';
|
import 'package:twonly/src/components/animate_icon.dart';
|
||||||
import 'package:twonly/src/components/better_text.dart';
|
import 'package:twonly/src/components/better_text.dart';
|
||||||
|
|
@ -16,8 +15,8 @@ import 'package:twonly/src/database/tables/messages_table.dart';
|
||||||
import 'package:twonly/src/json_models/message.dart';
|
import 'package:twonly/src/json_models/message.dart';
|
||||||
import 'package:twonly/src/providers/api/api.dart';
|
import 'package:twonly/src/providers/api/api.dart';
|
||||||
import 'package:twonly/src/providers/api/media.dart';
|
import 'package:twonly/src/providers/api/media.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/services/notification_service.dart';
|
import 'package:twonly/src/services/notification_service.dart';
|
||||||
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
import 'package:twonly/src/views/chats/media_viewer_view.dart';
|
import 'package:twonly/src/views/chats/media_viewer_view.dart';
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
import 'package:twonly/src/views/contact/contact_view.dart';
|
import 'package:twonly/src/views/contact/contact_view.dart';
|
||||||
|
|
@ -25,10 +24,10 @@ import 'package:twonly/src/views/home_view.dart';
|
||||||
|
|
||||||
class ChatListEntry extends StatelessWidget {
|
class ChatListEntry extends StatelessWidget {
|
||||||
const ChatListEntry(
|
const ChatListEntry(
|
||||||
this.message, this.userId, this.lastMessageFromSameUser, this.reactions,
|
this.message, this.contact, this.lastMessageFromSameUser, this.reactions,
|
||||||
{super.key});
|
{super.key});
|
||||||
final Message message;
|
final Message message;
|
||||||
final int userId;
|
final Contact contact;
|
||||||
final bool lastMessageFromSameUser;
|
final bool lastMessageFromSameUser;
|
||||||
final List<Message> reactions;
|
final List<Message> reactions;
|
||||||
|
|
||||||
|
|
@ -71,10 +70,13 @@ class ChatListEntry extends StatelessWidget {
|
||||||
} else {
|
} else {
|
||||||
child = Text(content.text, style: TextStyle(fontSize: 14));
|
child = Text(content.text, style: TextStyle(fontSize: 14));
|
||||||
}
|
}
|
||||||
children.add(Padding(
|
children.insert(
|
||||||
padding: EdgeInsets.only(left: 3),
|
0,
|
||||||
child: child,
|
Padding(
|
||||||
));
|
padding: EdgeInsets.only(left: 3),
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,7 +138,7 @@ class ChatListEntry extends StatelessWidget {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return MediaViewerView(userId);
|
return MediaViewerView(contact);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -354,38 +356,40 @@ class _ChatItemDetailsViewState extends State<ChatItemDetailsView> {
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
if (user != null)
|
||||||
child: ListView.builder(
|
Expanded(
|
||||||
itemCount: messages.length,
|
child: ListView.builder(
|
||||||
reverse: true,
|
itemCount: messages.length,
|
||||||
itemBuilder: (context, i) {
|
reverse: true,
|
||||||
bool lastMessageFromSameUser = false;
|
itemBuilder: (context, i) {
|
||||||
if (i > 0) {
|
bool lastMessageFromSameUser = false;
|
||||||
lastMessageFromSameUser =
|
if (i > 0) {
|
||||||
(messages[i - 1].messageOtherId == null &&
|
lastMessageFromSameUser =
|
||||||
messages[i].messageOtherId == null) ||
|
(messages[i - 1].messageOtherId == null &&
|
||||||
(messages[i - 1].messageOtherId != null &&
|
messages[i].messageOtherId == null) ||
|
||||||
messages[i].messageOtherId != null);
|
(messages[i - 1].messageOtherId != null &&
|
||||||
}
|
messages[i].messageOtherId != null);
|
||||||
Message msg = messages[i];
|
}
|
||||||
List<Message> reactions = [];
|
Message msg = messages[i];
|
||||||
if (reactionsToMyMessages.containsKey(msg.messageId)) {
|
List<Message> reactions = [];
|
||||||
reactions = reactionsToMyMessages[msg.messageId]!;
|
if (reactionsToMyMessages.containsKey(msg.messageId)) {
|
||||||
}
|
reactions = reactionsToMyMessages[msg.messageId]!;
|
||||||
if (msg.messageOtherId != null &&
|
}
|
||||||
reactionsToOtherMessages
|
if (msg.messageOtherId != null &&
|
||||||
.containsKey(msg.messageOtherId!)) {
|
reactionsToOtherMessages
|
||||||
reactions = reactionsToOtherMessages[msg.messageOtherId!]!;
|
.containsKey(msg.messageOtherId!)) {
|
||||||
}
|
reactions =
|
||||||
return ChatListEntry(
|
reactionsToOtherMessages[msg.messageOtherId!]!;
|
||||||
msg,
|
}
|
||||||
widget.userid,
|
return ChatListEntry(
|
||||||
lastMessageFromSameUser,
|
msg,
|
||||||
reactions,
|
user!,
|
||||||
);
|
lastMessageFromSameUser,
|
||||||
},
|
reactions,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: const EdgeInsets.only(
|
||||||
bottom: 30, left: 20, right: 20, top: 10),
|
bottom: 30, left: 20, right: 20, top: 10),
|
||||||
|
|
@ -436,9 +440,7 @@ class _ChatItemDetailsViewState extends State<ChatItemDetailsView> {
|
||||||
: IconButton(
|
: IconButton(
|
||||||
icon: FaIcon(FontAwesomeIcons.camera),
|
icon: FaIcon(FontAwesomeIcons.camera),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
context
|
globalSendNextMediaToUser = user;
|
||||||
.read<SendNextMediaTo>()
|
|
||||||
.updateSendNextMediaTo(widget.userid);
|
|
||||||
globalUpdateOfHomeViewPageIndex(0);
|
globalUpdateOfHomeViewPageIndex(0);
|
||||||
Navigator.popUntil(
|
Navigator.popUntil(
|
||||||
context, (route) => route.isFirst);
|
context, (route) => route.isFirst);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/components/flame.dart';
|
import 'package:twonly/src/components/flame.dart';
|
||||||
import 'package:twonly/src/components/initialsavatar.dart';
|
import 'package:twonly/src/components/initialsavatar.dart';
|
||||||
|
|
@ -13,8 +12,8 @@ import 'package:twonly/src/database/twonly_database.dart';
|
||||||
import 'package:twonly/src/database/tables/messages_table.dart';
|
import 'package:twonly/src/database/tables/messages_table.dart';
|
||||||
import 'package:twonly/src/json_models/message.dart';
|
import 'package:twonly/src/json_models/message.dart';
|
||||||
import 'package:twonly/src/providers/api/media.dart';
|
import 'package:twonly/src/providers/api/media.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
||||||
import 'package:twonly/src/views/chats/media_viewer_view.dart';
|
import 'package:twonly/src/views/chats/media_viewer_view.dart';
|
||||||
import 'package:twonly/src/views/home_view.dart';
|
import 'package:twonly/src/views/home_view.dart';
|
||||||
|
|
@ -277,9 +276,7 @@ class _UserListItem extends State<UserListItem> {
|
||||||
leading: ContactAvatar(contact: widget.user),
|
leading: ContactAvatar(contact: widget.user),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (currentMessage == null) {
|
if (currentMessage == null) {
|
||||||
context
|
globalSendNextMediaToUser = widget.user;
|
||||||
.read<SendNextMediaTo>()
|
|
||||||
.updateSendNextMediaTo(widget.user.userId.toInt());
|
|
||||||
globalUpdateOfHomeViewPageIndex(0);
|
globalUpdateOfHomeViewPageIndex(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -301,7 +298,7 @@ class _UserListItem extends State<UserListItem> {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return MediaViewerView(widget.user.userId);
|
return MediaViewerView(widget.user);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:lottie/lottie.dart';
|
import 'package:lottie/lottie.dart';
|
||||||
import 'package:no_screenshot/no_screenshot.dart';
|
import 'package:no_screenshot/no_screenshot.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/components/animate_icon.dart';
|
import 'package:twonly/src/components/animate_icon.dart';
|
||||||
import 'package:twonly/src/components/media_view_sizing.dart';
|
import 'package:twonly/src/components/media_view_sizing.dart';
|
||||||
|
|
@ -14,17 +13,17 @@ import 'package:twonly/src/database/tables/messages_table.dart';
|
||||||
import 'package:twonly/src/json_models/message.dart';
|
import 'package:twonly/src/json_models/message.dart';
|
||||||
import 'package:twonly/src/providers/api/api.dart';
|
import 'package:twonly/src/providers/api/api.dart';
|
||||||
import 'package:twonly/src/providers/api/media.dart';
|
import 'package:twonly/src/providers/api/media.dart';
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/services/notification_service.dart';
|
import 'package:twonly/src/services/notification_service.dart';
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
||||||
import 'package:twonly/src/views/home_view.dart';
|
import 'package:twonly/src/views/home_view.dart';
|
||||||
|
|
||||||
final _noScreenshot = NoScreenshot.instance;
|
final _noScreenshot = NoScreenshot.instance;
|
||||||
|
|
||||||
class MediaViewerView extends StatefulWidget {
|
class MediaViewerView extends StatefulWidget {
|
||||||
final int userId;
|
final Contact contact;
|
||||||
const MediaViewerView(this.userId, {super.key});
|
const MediaViewerView(this.contact, {super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MediaViewerView> createState() => _MediaViewerViewState();
|
State<MediaViewerView> createState() => _MediaViewerViewState();
|
||||||
|
|
@ -59,8 +58,8 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future asyncLoadNextMedia(bool firstRun) async {
|
Future asyncLoadNextMedia(bool firstRun) async {
|
||||||
Stream<List<Message>> messages =
|
Stream<List<Message>> messages = twonlyDatabase.messagesDao
|
||||||
twonlyDatabase.messagesDao.watchMediaMessageNotOpened(widget.userId);
|
.watchMediaMessageNotOpened(widget.contact.userId);
|
||||||
|
|
||||||
_subscription = messages.listen((messages) {
|
_subscription = messages.listen((messages) {
|
||||||
for (Message msg in messages) {
|
for (Message msg in messages) {
|
||||||
|
|
@ -329,7 +328,7 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
sendTextMessage(
|
sendTextMessage(
|
||||||
widget.userId,
|
widget.contact.userId,
|
||||||
TextMessageContent(
|
TextMessageContent(
|
||||||
text: emoji,
|
text: emoji,
|
||||||
responseToMessageId:
|
responseToMessageId:
|
||||||
|
|
@ -400,7 +399,7 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
});
|
});
|
||||||
encryptAndSendMessage(
|
encryptAndSendMessage(
|
||||||
null,
|
null,
|
||||||
widget.userId,
|
widget.contact.userId,
|
||||||
MessageJson(
|
MessageJson(
|
||||||
kind: MessageKind.storedMediaFile,
|
kind: MessageKind.storedMediaFile,
|
||||||
messageId: allMediaFiles.first.messageId,
|
messageId: allMediaFiles.first.messageId,
|
||||||
|
|
@ -477,7 +476,7 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return ChatItemDetailsView(widget.userId);
|
return ChatItemDetailsView(widget.contact.userId);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
@ -491,9 +490,7 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
IconButton.outlined(
|
IconButton.outlined(
|
||||||
icon: FaIcon(FontAwesomeIcons.camera),
|
icon: FaIcon(FontAwesomeIcons.camera),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
context
|
globalSendNextMediaToUser = widget.contact;
|
||||||
.read<SendNextMediaTo>()
|
|
||||||
.updateSendNextMediaTo(widget.userId.toInt());
|
|
||||||
globalUpdateOfHomeViewPageIndex(0);
|
globalUpdateOfHomeViewPageIndex(0);
|
||||||
Navigator.popUntil(context, (route) => route.isFirst);
|
Navigator.popUntil(context, (route) => route.isFirst);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:pie_menu/pie_menu.dart';
|
import 'package:pie_menu/pie_menu.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
import 'package:twonly/src/providers/send_next_media_to.dart';
|
|
||||||
import 'package:twonly/src/services/notification_service.dart';
|
import 'package:twonly/src/services/notification_service.dart';
|
||||||
|
import 'package:twonly/src/views/camera_to_share/share_image_view.dart';
|
||||||
import 'camera_to_share/camera_preview_view.dart';
|
import 'camera_to_share/camera_preview_view.dart';
|
||||||
import 'chats/chat_list_view.dart';
|
import 'chats/chat_list_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -29,7 +28,7 @@ class HomeViewState extends State<HomeView> {
|
||||||
homeViewPageController = PageController(initialPage: widget.initialPage);
|
homeViewPageController = PageController(initialPage: widget.initialPage);
|
||||||
globalUpdateOfHomeViewPageIndex = (index) {
|
globalUpdateOfHomeViewPageIndex = (index) {
|
||||||
if (index == 1) {
|
if (index == 1) {
|
||||||
context.read<SendNextMediaTo>().updateSendNextMediaTo(null);
|
globalSendNextMediaToUser = null;
|
||||||
}
|
}
|
||||||
homeViewPageController.jumpToPage(index);
|
homeViewPageController.jumpToPage(index);
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
@ -92,7 +91,7 @@ class HomeViewState extends State<HomeView> {
|
||||||
controller: homeViewPageController,
|
controller: homeViewPageController,
|
||||||
onPageChanged: (index) {
|
onPageChanged: (index) {
|
||||||
if (index == 1) {
|
if (index == 1) {
|
||||||
context.read<SendNextMediaTo>().updateSendNextMediaTo(null);
|
globalSendNextMediaToUser = null;
|
||||||
}
|
}
|
||||||
activePageIdx = index;
|
activePageIdx = index;
|
||||||
setState(() {});
|
setState(() {});
|
||||||
|
|
@ -121,7 +120,7 @@ class HomeViewState extends State<HomeView> {
|
||||||
onTap: (int index) {
|
onTap: (int index) {
|
||||||
activePageIdx = index;
|
activePageIdx = index;
|
||||||
if (index == 1) {
|
if (index == 1) {
|
||||||
context.read<SendNextMediaTo>().updateSendNextMediaTo(null);
|
globalSendNextMediaToUser = null;
|
||||||
}
|
}
|
||||||
setState(() {
|
setState(() {
|
||||||
homeViewPageController.animateToPage(
|
homeViewPageController.animateToPage(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue