Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавлена возможность поделиться постом #410

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions lib/ui/views/main_page/feed/widgets/feed_post.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:intl/intl.dart';
import 'package:unn_mobile/core/misc/app_settings.dart';
import 'package:unn_mobile/core/misc/custom_bb_tags.dart';
import 'package:unn_mobile/core/models/rating_list.dart';
import 'package:unn_mobile/core/viewmodels/attached_file_view_model.dart';
import 'package:unn_mobile/core/viewmodels/feed_post_view_model.dart';
import 'package:unn_mobile/core/viewmodels/profile_view_model.dart';
import 'package:unn_mobile/core/viewmodels/reaction_view_model.dart';
Expand All @@ -18,6 +19,9 @@ import 'package:unn_mobile/ui/views/main_page/feed/widgets/attached_file.dart';
import 'package:unn_mobile/ui/views/main_page/main_page_routing.dart';
import 'package:unn_mobile/ui/widgets/shimmer.dart';
import 'package:unn_mobile/ui/widgets/shimmer_loading.dart';
import 'package:share_plus/share_plus.dart';

import 'dart:io';

const idkWhatColor = Color(0xFF989EA9);

Expand Down Expand Up @@ -246,6 +250,39 @@ class _FeedPostState extends State<FeedPost> {
),
),
),
const SizedBox(width: 12),
GestureDetector(
onTap: () async {
sharePressed(
context,
model.postText,
model.profileViewModel.fullname,
model.postTime,
model.attachedFileViewModels,
);
},
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
).copyWith(right: 8),
decoration: BoxDecoration(
color: idkWhatColor.withOpacity(0.1),
borderRadius: BorderRadius.circular(20),
),
child: const Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
Icons.share,
color: idkWhatColor,
size: 23,
),
SizedBox(width: 6),
],
),
),
),
],
),
],
Expand All @@ -260,6 +297,42 @@ class _FeedPostState extends State<FeedPost> {
}
}

void sharePressed(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я бы сам метод сделал Future<void> sharePressed или даже Future<ShareResult> sharePressed
Перед Share.share и Share.shareXFiles добавил бы await (если сделаешь тип Future<ShareResult> то вообще return await Share.<...>)
И там, где его вызываешь сделал бы await sharePressed. Если будешь делать с ShareResult, то снаружи как-то обработай этот результат.
И наверно не мешало бы отловить исключения, хотя бы самого Share. Но старайся блоком try...catch охватывать как можно меньше кода. И при исключении используй LoggerService для сообщений об ошибке

BuildContext context,
String postText,
String authorName,
DateTime postTime,
List<AttachedFileViewModel> attachedFiles,
) async {
final String text =
'$authorName\n${DateFormat('d MMMM yyyy, HH:mm', 'ru_RU').format(postTime)}\n\n$postText';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Андрею такое точно бы не понравилось :D
Вынеси вызов DateFormat(<...>).format(<...>) в отдельную переменную
И еще для такого сорта строк можно использовать тройные кавычки (''' - три раза по одинарной) и тогда можно будет ставить человеческие энтеры вместо \n

Не уверен, что здесь это прям лучше будет, так что пункт про тройные кавычки - на твоё усмотрение


final List<XFile> xFiles = [];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


for (final fileViewModel in attachedFiles) {
final File? file = await fileViewModel.getFile();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут ведь файлы должны скачиваться, очень долго наверно делиться постами с большим числом файлов. И наверно будет классно, когда несколько раз поделиться нажмёшь, пока они качаются

Надо потестить будет

if (file != null && file.existsSync()) {
xFiles.add(XFile(file.path));
}
}

// ignore: use_build_context_synchronously
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мы обычно это обходим через if (context.mounted)

final RenderBox box = context.findRenderObject() as RenderBox;

if (xFiles.isNotEmpty) {
Share.shareXFiles(
xFiles,
text: text,
sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Namxobick у нас приложение под айпады работает?
image

https://pub.dev/documentation/share_plus/latest/share_plus/Share/shareXFiles.html

);
} else {
Share.share(
text,
sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size,
);
}
}

class _PostHeader extends StatelessWidget {
final DateTime postTime;

Expand Down
19 changes: 7 additions & 12 deletions lib/ui/views/main_page/main_page_navigation_bar.dart
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подозреваю, это из другого реквеста? (из #407 ?)
Вообще, так делать не стоит
Перед работой над новой задачей надо переключаться на develop и уже от неё делать новую ветку

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если хочешь, можешь попробовать посмотреть на git revert, чтобы откатить изменения в этом файле) Хэши коммитов у тебя в гитхабе написаны

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ладно, в той ветке вероятно еще будут изменения, так что настоятельно рекомендую этот один коммит откатить в этой ветке

Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:unn_mobile/core/viewmodels/main_page_view_model.dart';
Expand All @@ -18,17 +17,13 @@ class MainPageNavigationBar extends StatelessWidget {
return Stack(
alignment: Alignment.bottomCenter,
children: [
ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(
sigmaX: 6.0,
sigmaY: 6.0,
),
child: Container(
width: double.maxFinite,
height: 60,
color: Colors.transparent,
),
Positioned(
top: 0,
left: 0,
right: 0,
child: Container(
height: 0.3,
color: Colors.grey.withOpacity(0.5),
),
),
NavigationBar(
Expand Down
6 changes: 4 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@ name: unn_mobile
description: A mobile application for UNN Portal website
publish_to: 'none'

version: 0.2.3+225

version: 0.2.3+226


environment:
sdk: '>=3.1.2 <4.0.0'

dependencies:
flutter:
sdk: flutter

share_plus: ^10.0.2
webview_flutter: ^4.9.0
flutter_secure_storage: ^9.2.2
http: ^1.1.0
Expand Down
Loading