move files

This commit is contained in:
otsmr 2025-02-02 23:58:45 +01:00
parent 6a342380b3
commit 8bffd39bc1
14 changed files with 151 additions and 131 deletions

View file

@ -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/messages_change_provider.dart';
import 'package:twonly/src/providers/settings_change_provider.dart'; import 'package:twonly/src/providers/settings_change_provider.dart';
import 'package:twonly/src/utils/storage.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/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/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';

View file

@ -1,7 +1,7 @@
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:twonly/src/components/image_editor/data/layer.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 /// Text layer
class TextLayer extends StatefulWidget { class TextLayer extends StatefulWidget {

View file

@ -1,10 +1,11 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:camerawesome/camerawesome_plugin.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:path_provider/path_provider.dart';
import 'package:twonly/src/components/media_view_sizing.dart'; import 'package:twonly/src/components/media_view_sizing.dart';
import 'package:twonly/src/views/permissions_view.dart'; import 'package:twonly/src/components/permissions_view.dart';
import 'package:twonly/src/views/share_image_editor_view.dart'; import 'package:twonly/src/views/camera_to_share/share_image_editor_view.dart';
class CameraPreviewViewPermission extends StatefulWidget { class CameraPreviewViewPermission extends StatefulWidget {
const CameraPreviewViewPermission({super.key}); const CameraPreviewViewPermission({super.key});
@ -46,6 +47,7 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
double _lastZoom = 1; double _lastZoom = 1;
double _basePanY = 0; double _basePanY = 0;
bool sharePreviewIsShown = false; bool sharePreviewIsShown = false;
bool isFlashOn = false;
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
@override @override
@ -125,7 +127,7 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
}, },
builder: (cameraState, preview) { builder: (cameraState, preview) {
return Stack( return Stack(
alignment: Alignment.bottomCenter, //alignment: Alignment.bottomCenter,
children: [ children: [
Positioned.fill( Positioned.fill(
child: GestureDetector( child: GestureDetector(
@ -153,6 +155,49 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
}, },
), ),
), ),
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: <Widget>[
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) if (!sharePreviewIsShown)
Positioned( Positioned(
bottom: 30, bottom: 30,
@ -169,7 +214,6 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
cameraState.when( cameraState.when(
onPhotoMode: (picState) => onPhotoMode: (picState) =>
picState.takePhoto()); picState.takePhoto());
// await takePicture();
}, },
onLongPress: () async {}, onLongPress: () async {},
child: Align( child: Align(

View file

@ -3,7 +3,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/src/components/media_view_sizing.dart'; import 'package:twonly/src/components/media_view_sizing.dart';
import 'package:twonly/src/utils/misc.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 'dart:async';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:twonly/src/components/image_editor/data/image_item.dart'; import 'package:twonly/src/components/image_editor/data/image_item.dart';
@ -322,10 +322,12 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
class BottomButton extends StatelessWidget { class BottomButton extends StatelessWidget {
final VoidCallback? onTap, onLongPress; final VoidCallback? onTap, onLongPress;
final IconData icon; final IconData icon;
final Color color;
const BottomButton({ const BottomButton({
super.key, super.key,
this.onTap, this.onTap,
this.color = Colors.white,
this.onLongPress, this.onLongPress,
required this.icon, required this.icon,
}); });
@ -341,7 +343,7 @@ class BottomButton extends StatelessWidget {
children: [ children: [
FaIcon( FaIcon(
icon, icon,
color: Colors.white, color: color,
shadows: ShareImageEditorView.iconShadow, shadows: ShareImageEditorView.iconShadow,
), ),
const SizedBox(height: 8), const SizedBox(height: 8),

View file

@ -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/api/api.dart';
import 'package:twonly/src/providers/download_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/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'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class ChatListEntry extends StatelessWidget { class ChatListEntry extends StatelessWidget {

View file

@ -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/download_change_provider.dart';
import 'package:twonly/src/providers/messages_change_provider.dart'; import 'package:twonly/src/providers/messages_change_provider.dart';
import 'package:twonly/src/utils/misc.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/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/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_gen/gen_l10n/app_localizations.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View file

@ -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<MediaViewerView> createState() => _MediaViewerViewState();
}
class _MediaViewerViewState extends State<MediaViewerView> {
Uint8List? _imageByte;
@override
void initState() {
super.initState();
_initAsync();
}
Future _initAsync() async {
List<int> 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>(
EdgeInsets.symmetric(vertical: 10, horizontal: 30),
),
),
label: Text(
"Respond",
style: TextStyle(fontSize: 17),
),
),
],
),
)
],
),
);
}
}

View file

@ -9,7 +9,7 @@ import 'package:twonly/src/model/contacts_model.dart';
import 'package:twonly/src/model/json/message.dart'; import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/providers/contacts_change_provider.dart'; import 'package:twonly/src/providers/contacts_change_provider.dart';
import 'package:twonly/src/providers/api/api.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 // ignore: library_prefixes
import 'package:twonly/src/utils/signal.dart' as SignalHelper; import 'package:twonly/src/utils/signal.dart' as SignalHelper;

View file

@ -1,7 +1,7 @@
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 'camera_preview_view.dart'; import 'camera_to_share/camera_preview_view.dart';
import 'chat_list_view.dart'; import 'chats/chat_list_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
Function(int) globalUpdateOfHomeViewPageIndex = (a) {}; Function(int) globalUpdateOfHomeViewPageIndex = (a) {};
@ -68,7 +68,6 @@ class HomeViewState extends State<HomeView> {
children: [ children: [
ChatListView(), ChatListView(),
CameraPreviewViewPermission(), CameraPreviewViewPermission(),
// ProfileView(settingsController: widget.settingsController)
], ],
), ),
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(

View file

@ -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<MediaViewerView> createState() => _MediaViewerViewState();
}
class _MediaViewerViewState extends State<MediaViewerView> {
Uint8List? _imageByte;
@override
void initState() {
super.initState();
_initAsync();
}
Future _initAsync() async {
List<int> 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>(
EdgeInsets.symmetric(vertical: 10, horizontal: 30),
),
),
label: Text(
AppLocalizations.of(context)!
.shareImagedEditorShareWith,
style: TextStyle(fontSize: 17),
),
),
],
),
)
: Container(),
],
),
);
}
}