diff --git a/lib/src/app.dart b/lib/src/app.dart index d2352a1..3728f45 100644 --- a/lib/src/app.dart +++ b/lib/src/app.dart @@ -5,9 +5,9 @@ import 'package:twonly/src/providers/download_change_provider.dart'; import 'package:twonly/src/providers/messages_change_provider.dart'; import 'package:twonly/src/providers/settings_change_provider.dart'; import 'package:twonly/src/utils/storage.dart'; -import 'package:twonly/src/views/onboarding_view.dart'; +import 'package:twonly/src/views/onboarding/onboarding_view.dart'; import 'package:twonly/src/views/home_view.dart'; -import 'package:twonly/src/views/register_view.dart'; +import 'package:twonly/src/views/onboarding/register_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; diff --git a/lib/src/components/image_editor/layers/text_layer.dart b/lib/src/components/image_editor/layers/text_layer.dart index 67a7da2..944b9b4 100755 --- a/lib/src/components/image_editor/layers/text_layer.dart +++ b/lib/src/components/image_editor/layers/text_layer.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/src/components/image_editor/data/layer.dart'; -import 'package:twonly/src/views/share_image_editor_view.dart'; +import 'package:twonly/src/views/camera_to_share/share_image_editor_view.dart'; /// Text layer class TextLayer extends StatefulWidget { diff --git a/lib/src/views/permissions_view.dart b/lib/src/components/permissions_view.dart similarity index 100% rename from lib/src/views/permissions_view.dart rename to lib/src/components/permissions_view.dart diff --git a/lib/src/views/camera_preview_view.dart b/lib/src/views/camera_to_share/camera_preview_view.dart similarity index 85% rename from lib/src/views/camera_preview_view.dart rename to lib/src/views/camera_to_share/camera_preview_view.dart index 970ede0..ee495ca 100644 --- a/lib/src/views/camera_preview_view.dart +++ b/lib/src/views/camera_to_share/camera_preview_view.dart @@ -1,10 +1,11 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:camerawesome/camerawesome_plugin.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twonly/src/components/media_view_sizing.dart'; -import 'package:twonly/src/views/permissions_view.dart'; -import 'package:twonly/src/views/share_image_editor_view.dart'; +import 'package:twonly/src/components/permissions_view.dart'; +import 'package:twonly/src/views/camera_to_share/share_image_editor_view.dart'; class CameraPreviewViewPermission extends StatefulWidget { const CameraPreviewViewPermission({super.key}); @@ -46,6 +47,7 @@ class _CameraPreviewViewState extends State { double _lastZoom = 1; double _basePanY = 0; bool sharePreviewIsShown = false; + bool isFlashOn = false; final GlobalKey navigatorKey = GlobalKey(); @override @@ -125,7 +127,7 @@ class _CameraPreviewViewState extends State { }, builder: (cameraState, preview) { return Stack( - alignment: Alignment.bottomCenter, + //alignment: Alignment.bottomCenter, children: [ Positioned.fill( child: GestureDetector( @@ -153,6 +155,49 @@ class _CameraPreviewViewState extends State { }, ), ), + if (!sharePreviewIsShown) + Positioned( + right: 0, + top: 100, + child: Container( + alignment: Alignment.bottomCenter, + padding: const EdgeInsets.symmetric(vertical: 16), + child: SafeArea( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + BottomButton( + icon: FontAwesomeIcons.repeat, + onTap: () async { + cameraState.switchCameraSensor( + aspectRatio: CameraAspectRatios.ratio_16_9); + }, + ), + SizedBox(height: 20), + BottomButton( + icon: FontAwesomeIcons.bolt, + color: isFlashOn + ? const Color.fromARGB(255, 255, 230, 0) + : const Color.fromARGB(158, 255, 255, 255), + onTap: () async { + if (isFlashOn) { + cameraState.sensorConfig + .setFlashMode(FlashMode.none); + isFlashOn = false; + } else { + cameraState.sensorConfig + .setFlashMode(FlashMode.always); + isFlashOn = true; + } + setState(() {}); + //cameraState.sensorConfig.switchCameraFlash(); + }, + ), + ], + ), + ), + ), + ), if (!sharePreviewIsShown) Positioned( bottom: 30, @@ -169,7 +214,6 @@ class _CameraPreviewViewState extends State { cameraState.when( onPhotoMode: (picState) => picState.takePhoto()); - // await takePicture(); }, onLongPress: () async {}, child: Align( diff --git a/lib/src/views/share_image_editor_view.dart b/lib/src/views/camera_to_share/share_image_editor_view.dart similarity index 99% rename from lib/src/views/share_image_editor_view.dart rename to lib/src/views/camera_to_share/share_image_editor_view.dart index 3cc8288..4fa1e7c 100644 --- a/lib/src/views/share_image_editor_view.dart +++ b/lib/src/views/camera_to_share/share_image_editor_view.dart @@ -3,7 +3,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/src/components/media_view_sizing.dart'; import 'package:twonly/src/utils/misc.dart'; -import 'package:twonly/src/views/share_image_view.dart'; +import 'package:twonly/src/views/camera_to_share/share_image_view.dart'; import 'dart:async'; import 'package:flutter/services.dart'; import 'package:twonly/src/components/image_editor/data/image_item.dart'; @@ -322,10 +322,12 @@ class _ShareImageEditorView extends State { class BottomButton extends StatelessWidget { final VoidCallback? onTap, onLongPress; final IconData icon; + final Color color; const BottomButton({ super.key, this.onTap, + this.color = Colors.white, this.onLongPress, required this.icon, }); @@ -341,7 +343,7 @@ class BottomButton extends StatelessWidget { children: [ FaIcon( icon, - color: Colors.white, + color: color, shadows: ShareImageEditorView.iconShadow, ), const SizedBox(height: 8), diff --git a/lib/src/views/share_image_view.dart b/lib/src/views/camera_to_share/share_image_view.dart similarity index 100% rename from lib/src/views/share_image_view.dart rename to lib/src/views/camera_to_share/share_image_view.dart diff --git a/lib/src/views/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart similarity index 99% rename from lib/src/views/chat_item_details_view.dart rename to lib/src/views/chats/chat_item_details_view.dart index 0c4d630..e26ce92 100644 --- a/lib/src/views/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -9,7 +9,7 @@ import 'package:twonly/src/model/messages_model.dart'; import 'package:twonly/src/providers/api/api.dart'; import 'package:twonly/src/providers/download_change_provider.dart'; import 'package:twonly/src/providers/messages_change_provider.dart'; -import 'package:twonly/src/views/media_viewer_view.dart'; +import 'package:twonly/src/views/chats/media_viewer_view.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class ChatListEntry extends StatelessWidget { diff --git a/lib/src/views/chat_list_view.dart b/lib/src/views/chats/chat_list_view.dart similarity index 97% rename from lib/src/views/chat_list_view.dart rename to lib/src/views/chats/chat_list_view.dart index 19d030c..c5f16dd 100644 --- a/lib/src/views/chat_list_view.dart +++ b/lib/src/views/chats/chat_list_view.dart @@ -12,11 +12,11 @@ import 'package:twonly/src/providers/contacts_change_provider.dart'; import 'package:twonly/src/providers/download_change_provider.dart'; import 'package:twonly/src/providers/messages_change_provider.dart'; import 'package:twonly/src/utils/misc.dart'; -import 'package:twonly/src/views/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/media_viewer_view.dart'; +import 'package:twonly/src/views/chats/media_viewer_view.dart'; import 'package:twonly/src/views/profile_view.dart'; -import 'package:twonly/src/views/search_username_view.dart'; +import 'package:twonly/src/views/chats/search_username_view.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter/material.dart'; diff --git a/lib/src/views/chats/media_viewer_view.dart b/lib/src/views/chats/media_viewer_view.dart new file mode 100644 index 0000000..331bd66 --- /dev/null +++ b/lib/src/views/chats/media_viewer_view.dart @@ -0,0 +1,89 @@ +import 'dart:typed_data'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:twonly/src/components/media_view_sizing.dart'; +import 'package:twonly/src/model/contacts_model.dart'; +import 'package:twonly/src/model/messages_model.dart'; +import 'package:twonly/src/providers/api/api.dart'; + +class MediaViewerView extends StatefulWidget { + final Contact otherUser; + final DbMessage message; + const MediaViewerView(this.otherUser, this.message, {super.key}); + + @override + State createState() => _MediaViewerViewState(); +} + +class _MediaViewerViewState extends State { + Uint8List? _imageByte; + + @override + void initState() { + super.initState(); + _initAsync(); + } + + Future _initAsync() async { + List token = widget.message.messageContent!.downloadToken!; + _imageByte = + await getDownloadedMedia(token, widget.message.messageOtherId!); + setState(() {}); + } + + @override + Widget build(BuildContext context) { + if (_imageByte == null) return Container(); + return Scaffold( + body: Stack( + fit: StackFit.expand, + children: [ + MediaViewSizing(Image.memory( + _imageByte!, + fit: BoxFit.contain, + )), + Positioned( + left: 10, + top: 60, + child: Row( + // mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon(Icons.close, size: 30), + color: Colors.white, + onPressed: () async { + Navigator.pop(context); + }, + ), + ], + ), + ), + Positioned( + bottom: 70, + left: 0, + right: 0, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox(width: 20), + FilledButton.icon( + icon: FaIcon(FontAwesomeIcons.solidPaperPlane), + onPressed: () async {}, + style: ButtonStyle( + padding: WidgetStateProperty.all( + EdgeInsets.symmetric(vertical: 10, horizontal: 30), + ), + ), + label: Text( + "Respond", + style: TextStyle(fontSize: 17), + ), + ), + ], + ), + ) + ], + ), + ); + } +} diff --git a/lib/src/views/search_username_view.dart b/lib/src/views/chats/search_username_view.dart similarity index 99% rename from lib/src/views/search_username_view.dart rename to lib/src/views/chats/search_username_view.dart index 908e00c..d3d5cc1 100644 --- a/lib/src/views/search_username_view.dart +++ b/lib/src/views/chats/search_username_view.dart @@ -9,7 +9,7 @@ import 'package:twonly/src/model/contacts_model.dart'; import 'package:twonly/src/model/json/message.dart'; import 'package:twonly/src/providers/contacts_change_provider.dart'; import 'package:twonly/src/providers/api/api.dart'; -import 'package:twonly/src/views/register_view.dart'; +import 'package:twonly/src/views/onboarding/register_view.dart'; // ignore: library_prefixes import 'package:twonly/src/utils/signal.dart' as SignalHelper; diff --git a/lib/src/views/home_view.dart b/lib/src/views/home_view.dart index 21ae353..8905c8f 100644 --- a/lib/src/views/home_view.dart +++ b/lib/src/views/home_view.dart @@ -1,7 +1,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:pie_menu/pie_menu.dart'; -import 'camera_preview_view.dart'; -import 'chat_list_view.dart'; +import 'camera_to_share/camera_preview_view.dart'; +import 'chats/chat_list_view.dart'; import 'package:flutter/material.dart'; Function(int) globalUpdateOfHomeViewPageIndex = (a) {}; @@ -68,7 +68,6 @@ class HomeViewState extends State { children: [ ChatListView(), CameraPreviewViewPermission(), - // ProfileView(settingsController: widget.settingsController) ], ), bottomNavigationBar: BottomNavigationBar( diff --git a/lib/src/views/media_viewer_view.dart b/lib/src/views/media_viewer_view.dart deleted file mode 100644 index 0a376a3..0000000 --- a/lib/src/views/media_viewer_view.dart +++ /dev/null @@ -1,114 +0,0 @@ -import 'dart:typed_data'; - -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:twonly/src/model/contacts_model.dart'; -import 'package:twonly/src/model/messages_model.dart'; -import 'package:twonly/src/providers/api/api.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -class MediaViewerView extends StatefulWidget { - final Contact otherUser; - final DbMessage message; - const MediaViewerView(this.otherUser, this.message, {super.key}); - - @override - State createState() => _MediaViewerViewState(); -} - -class _MediaViewerViewState extends State { - Uint8List? _imageByte; - - @override - void initState() { - super.initState(); - _initAsync(); - } - - Future _initAsync() async { - List token = widget.message.messageContent!.downloadToken!; - _imageByte = - await getDownloadedMedia(token, widget.message.messageOtherId!); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Stack( - fit: StackFit.expand, - children: [ - Positioned( - top: 0, - // bottom: 0, - left: 0, - right: 0, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 50), - child: ClipRRect( - borderRadius: BorderRadius.circular(22), - child: (_imageByte != null) - ? Image.memory( - _imageByte!, - fit: BoxFit.contain, - ) - : Container()), - ), - ), - _imageByte != null - ? Positioned( - left: 10, - top: 60, - child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - children: [ - IconButton( - icon: Icon(Icons.close, size: 30), - color: Colors.white, - onPressed: () async { - Navigator.pop(context); - }, - ), - ], - ), - ) - : Container(), - _imageByte != null - ? Positioned( - bottom: 70, - left: 0, - right: 0, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox(width: 20), - FilledButton.icon( - icon: FaIcon(FontAwesomeIcons.solidPaperPlane), - onPressed: () async { - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (context) => - // ShareImageView(image: widget.image)), - // ); - }, - style: ButtonStyle( - padding: WidgetStateProperty.all( - EdgeInsets.symmetric(vertical: 10, horizontal: 30), - ), - ), - label: Text( - AppLocalizations.of(context)! - .shareImagedEditorShareWith, - style: TextStyle(fontSize: 17), - ), - ), - ], - ), - ) - : Container(), - ], - ), - ); - } -} diff --git a/lib/src/views/onboarding_view.dart b/lib/src/views/onboarding/onboarding_view.dart similarity index 100% rename from lib/src/views/onboarding_view.dart rename to lib/src/views/onboarding/onboarding_view.dart diff --git a/lib/src/views/register_view.dart b/lib/src/views/onboarding/register_view.dart similarity index 100% rename from lib/src/views/register_view.dart rename to lib/src/views/onboarding/register_view.dart