Skip to content

Commit 27bcd5c

Browse files
Merge pull request #13 from IgorKhramtsov/IK_share
Sharing
2 parents 86df1ea + 3a1add1 commit 27bcd5c

File tree

8 files changed

+67
-29
lines changed

8 files changed

+67
-29
lines changed

android/app/src/main/AndroidManifest.xml

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
<action android:name="android.intent.action.MAIN"/>
3232
<category android:name="android.intent.category.LAUNCHER"/>
3333
</intent-filter>
34+
<!-- Deep linking -->
35+
<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
36+
<intent-filter android:autoVerify="true">
37+
<action android:name="android.intent.action.VIEW" />
38+
<category android:name="android.intent.category.DEFAULT" />
39+
<category android:name="android.intent.category.BROWSABLE" />
40+
<data android:scheme="devour" />
41+
</intent-filter>
3442
</activity>
3543
<!-- Don't delete the meta-data below.
3644
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->

lib/presentation/screens/accounts/accounts_screen.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:devour/application/navigator/routes.dart';
33
import 'package:devour/injection.dart';
44
import 'package:devour/presentation/widgets/platform/platform_button.dart';
55
import 'package:devour/presentation/widgets/platform/platform_scaffold.dart';
6+
import 'package:devour/presentation/widgets/platform/platform_theme.dart';
67
import 'package:flutter/cupertino.dart';
78
import 'package:flutter/material.dart';
89
import 'package:flutter/widgets.dart';
@@ -74,7 +75,7 @@ class AccountScreen extends StatelessWidget {
7475
required String text,
7576
required bool isEmpty,
7677
}) {
77-
TextStyle textStyle = CupertinoTheme.of(context).textTheme.textStyle;
78+
TextStyle textStyle = PlatformTheme.getTextStyle(context);
7879
textStyle = textStyle.copyWith(color: textStyle.color!.withOpacity(.8));
7980
return Row(
8081
mainAxisSize: MainAxisSize.min,

lib/presentation/screens/feed/post_widget.dart

+32-21
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import 'package:devour/domain/misc/helper.dart';
77
import 'package:devour/injection.dart';
88
import 'package:devour/presentation/screens/feed/feed_image_widget.dart';
99
import 'package:devour/presentation/widgets/platform/platform_icon_button.dart';
10+
import 'package:devour/presentation/widgets/platform/platform_theme.dart';
1011
import 'package:flutter/cupertino.dart';
1112
import 'package:flutter/material.dart';
1213
import 'package:flutter/widgets.dart';
1314
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
15+
import 'package:share_plus/share_plus.dart';
1416

1517
/// Widget to show post information like description and likes and image,
1618
/// to create illusion of selecting meme from list.
@@ -50,27 +52,27 @@ class _PostWidgetState extends State<PostWidget> {
5052
height: box?.size.height,
5153
child: IgnorePointer(
5254
child: AnimatedSwitcher(
53-
duration: const Duration(milliseconds: 100),
54-
layoutBuilder: (curr, prev) {
55-
return Stack(
56-
alignment: Alignment.center,
57-
children: <Widget>[
58-
// ...prev,
59-
if (curr != null) curr,
60-
],
61-
);
62-
},
63-
child: FeedImage(
64-
key: Key(widget.state.currentMemeModel.imageLink),
65-
imageProvider: CachedNetworkImageProvider(
66-
widget.state.currentMemeModel.imageLink,
67-
errorListener: () => print(
68-
'error (${widget.state.currentMemeModel.imageLink})'),
69-
cacheManager: serviceLocator<CacheManager>(),
70-
),
71-
constraints: widget.constraints,
55+
duration: const Duration(milliseconds: 100),
56+
layoutBuilder: (curr, prev) {
57+
return Stack(
58+
alignment: Alignment.center,
59+
children: <Widget>[
60+
// ...prev,
61+
if (curr != null) curr,
62+
],
63+
);
64+
},
65+
child: FeedImage(
66+
key: Key(widget.state.currentMemeModel.imageLink),
67+
imageProvider: CachedNetworkImageProvider(
68+
widget.state.currentMemeModel.imageLink,
69+
errorListener: () => print(
70+
'error (${widget.state.currentMemeModel.imageLink})'),
71+
cacheManager: serviceLocator<CacheManager>(),
7272
),
73+
constraints: widget.constraints,
7374
),
75+
),
7476
),
7577
),
7678
Positioned.fill(
@@ -96,6 +98,7 @@ class _PostWidgetState extends State<PostWidget> {
9698
}
9799

98100
class PostActionsWidget extends StatelessWidget {
101+
/// Column with actions, showed to user for certain post
99102
const PostActionsWidget({
100103
Key? key,
101104
required this.currentPost,
@@ -123,7 +126,7 @@ class PostActionsWidget extends StatelessWidget {
123126
text: currentPost.comments.toShortString(),
124127
),
125128
PlatformIconButton(
126-
onPressed: () => null,
129+
onPressed: share,
127130
icon: CupertinoIcons.share,
128131
size: 42,
129132
color: CupertinoColors.white,
@@ -132,6 +135,14 @@ class PostActionsWidget extends StatelessWidget {
132135
],
133136
);
134137
}
138+
139+
void share() async {
140+
final cacheManager = serviceLocator<CacheManager>();
141+
final file = await cacheManager.getSingleFile(currentPost.imageLink);
142+
// TODO: currentPost.isVideo ? mimeType: 'video/*'
143+
144+
Share.shareFiles([file.path], mimeTypes: ['image/*']);
145+
}
135146
}
136147

137148
class PostDescriptionWidget extends StatelessWidget {
@@ -145,7 +156,7 @@ class PostDescriptionWidget extends StatelessWidget {
145156
@override
146157
Widget build(BuildContext context) {
147158
final textStyle =
148-
CupertinoTheme.of(context).textTheme.textStyle.copyWith(fontSize: 19);
159+
PlatformTheme.getTextStyle(context).copyWith(fontSize: 19);
149160
return Column(
150161
crossAxisAlignment: CrossAxisAlignment.start,
151162
children: [

lib/presentation/screens/home_screen.dart

+2
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ class HomeScreen extends StatelessWidget {
3535
BottomNavigationBarItem(
3636
icon: Icon(CupertinoIcons.house),
3737
activeIcon: Icon(CupertinoIcons.house_fill),
38+
label: 'feed',
3839
),
3940
BottomNavigationBarItem(
4041
icon: Icon(CupertinoIcons.person),
4142
activeIcon: Icon(CupertinoIcons.person_fill),
43+
label: 'accounts',
4244
),
4345
],
4446
tabBuilder: (BuildContext context, int index) =>

lib/presentation/widgets/platform/platform_button.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,8 @@ class PlatformButton
3939
ElevatedButton buildMaterial(BuildContext context) {
4040
return ElevatedButton(
4141
onPressed: onPressed,
42-
child: Padding(
43-
padding: padding,
44-
child: child,
45-
),
42+
style: ButtonStyle(padding: MaterialStateProperty.all(padding)),
43+
child: child,
4644
);
4745
}
4846
}

lib/presentation/widgets/platform/platform_icon_button.dart

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:devour/presentation/widgets/platform/abstract_platform_widget.dart';
2+
import 'package:devour/presentation/widgets/platform/platform_theme.dart';
23
import 'package:flutter/cupertino.dart';
34
import 'package:flutter/material.dart';
45

@@ -29,15 +30,16 @@ class PlatformIconButton
2930
@override
3031
IconButton buildMaterial(BuildContext context) {
3132
return IconButton(
33+
padding: EdgeInsets.zero,
34+
iconSize: size * 1.75, // approximately
3235
icon: _buildContent(context),
3336
onPressed: onPressed,
3437
);
3538
}
3639

3740
Widget _buildContent(BuildContext context) {
38-
final textStyle = CupertinoTheme.of(context)
39-
.textTheme
40-
.actionTextStyle
41+
final textStyle = PlatformTheme.getTextStyle(context)
42+
// .actionTextStyle
4143
.copyWith(color: color);
4244
const List<Shadow> shadows = [
4345
Shadow(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'dart:io';
2+
3+
import 'package:flutter/cupertino.dart';
4+
import 'package:flutter/material.dart';
5+
import 'package:flutter/widgets.dart';
6+
7+
class PlatformTheme {
8+
static TextStyle getTextStyle(BuildContext context) {
9+
if (Platform.isAndroid) {
10+
return Theme.of(context).textTheme.bodyText2!;
11+
} else {
12+
return CupertinoTheme.of(context).textTheme.textStyle;
13+
}
14+
}
15+
}

pubspec.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ dependencies:
3333
rive: ^0.7.28
3434
rxdart: ^0.27.2
3535
scrollable_positioned_list: ^0.2.0-nullsafety.0
36+
share_plus: ^3.0.2
3637
synchronized: ^3.0.0
3738
url_launcher: ^6.0.10
3839

0 commit comments

Comments
 (0)