reason

temp

......@@ -41,18 +41,6 @@
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<activity
android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<meta-data
android:name="flutterEmbedding"
......@@ -63,17 +51,6 @@
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.com.shekarmudaliyar.social_share"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
<queries>
......@@ -87,4 +64,8 @@
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
</manifest>
......
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'package:Parlando/account/account_router.dart';
import 'package:Parlando/events/trans_event.dart';
import 'package:Parlando/home/models/home_entity.dart';
......@@ -10,6 +7,7 @@ import 'package:Parlando/net/dio_utils.dart';
import 'package:Parlando/net/http_api.dart';
import 'package:Parlando/util/toast_utils.dart';
import 'package:animated_radial_menu/animated_radial_menu.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:Parlando/category/category_router.dart';
import 'package:Parlando/poem/poem_router.dart';
......@@ -25,12 +23,12 @@ import 'package:Parlando/tiktok/widgets/tiktok_video_button_column.dart';
import 'package:Parlando/tiktok/widgets/tiktok_video_poem.dart';
import 'package:Parlando/widgets/bars/home_types_bar.dart';
import 'package:Parlando/widgets/my_app_bar.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easy_permission/easy_permissions.dart';
import 'package:getwidget/getwidget.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart';
import 'package:screenshot/screenshot.dart';
import 'package:social_share/social_share.dart';
import 'package:share_plus/share_plus.dart';
import 'package:video_player/video_player.dart';
import 'poem_detail.dart';
......@@ -60,6 +58,22 @@ class PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
bool isFav = false;
bool isPraise = false;
bool isSharing = false;
static const permissions = [
Permissions.CAMERA,
Permissions.READ_EXTERNAL_STORAGE,
Permissions.RECORD_AUDIO,
Permissions.WRITE_EXTERNAL_STORAGE
];
static const permissionGroup = [
PermissionGroup.Camera,
PermissionGroup.Camera,
PermissionGroup.Microphone
];
late FlutterEasyPermission _easyPermission;
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
......@@ -73,12 +87,41 @@ class PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
WidgetsBinding.instance.removeObserver(this);
_videoListController.currentPlayer.pause();
bus.cancel();
_easyPermission.dispose();
super.dispose();
}
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
FlutterEasyPermission.has(perms: permissions, permsGroup: permissionGroup)
.then((value) {
if (value) {
FlutterEasyPermission.request(
perms: permissions,
permsGroup: permissionGroup,
rationale: "需要使用如下权限");
}
});
_easyPermission = FlutterEasyPermission()
..addPermissionCallback(onGranted: (requestCode, perms, perm) {
debugPrint("android获得授权:$perms");
debugPrint("iOS获得授权:$perm");
}, onDenied: (requestCode, perms, perm, isPermanent) {
if (isPermanent) {
FlutterEasyPermission.showAppSettingsDialog(title: "Camera");
} else {
debugPrint("android授权失败:$perms");
debugPrint("iOS授权失败:$perm");
}
}, onSettingsReturned: () {
FlutterEasyPermission.has(perms: permissions, permsGroup: []).then(
(value) => value
? debugPrint("已获得授权:$permissions")
: debugPrint("未获得授权:$permissions"));
});
isLoading = true;
DioUtils.instance.asyncRequestNetwork<HomeEntity>(
Method.get,
......@@ -165,7 +208,6 @@ class PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
Widget? currentPage;
double a = MediaQuery.of(context).size.aspectRatio;
bool hasBottomPadding = a < 0.55;
ScreenshotController screenshotController = ScreenshotController();
var detailPage = PoemDetailPage(
onPop: () {
tkController.animateToMiddle();
......@@ -270,7 +312,21 @@ class PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
);
},
onShare: () async {
showShareView(context);
isSharing = true;
setState(() {});
var appDocDir = await getTemporaryDirectory();
String savePath = "${appDocDir.path}/temp.mp4";
await Dio().download(
"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",
savePath);
final result =
await ImageGallerySaver.saveFile(savePath);
print(result);
isSharing = false;
setState(() {});
await Share.shareFiles(
["/media/external/video/media/79"],
text: '一言一世界 临境不蹉跎');
},
);
Widget poem = TikTokVidePoem(
......@@ -400,106 +456,6 @@ class PoemPageState extends State<PoemPage> with WidgetsBindingObserver {
);
}
static showShareView(BuildContext context) {
final List buttonTitles = [
"Twitter",
"Facebook",
];
final List buttonImages = [
"jiguang_socialize_twitter.png",
"jiguang_socialize_facebook.png",
];
showModalBottomSheet(
context: context,
backgroundColor: Colors.white.withAlpha(0),
elevation: 2,
builder: (BuildContext context) {
return ClipRRect(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10), topRight: Radius.circular(10)),
child: Container(
width: double.infinity,
height: 180,
color: const Color.fromRGBO(255, 255, 255, 1),
child: Stack(
children: [
Padding(
padding:
const EdgeInsets.only(top: 14, left: 15, right: 15),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: const [
Text(
"分享到",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color.fromRGBO(51, 51, 51, 1)),
),
],
)),
Padding(
padding: const EdgeInsets.only(left: 0, right: 0, top: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(buttonTitles.length, (index) {
return Container(
child: buttonWidget(context, buttonTitles[index],
buttonImages[index], index),
);
}).toList(),
),
)
],
),
),
);
});
}
static buttonWidget(
BuildContext context, String title, String imageName, int index) {
return GestureDetector(
onTap: () {
switch (index) {
case 0:
dismiss(context);
SocialShare.shareTwitter(
"This is Social Share twitter example",
hashtags: ["hello", "world", "foo", "bar"],
url: "https://google.com/#/hello",
trailingText: "\nhello",
).then((data) {
print(data);
});
break;
case 1: //Facebook
print("朋友圈");
dismiss(context);
break;
default:
break;
}
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/images/share/$imageName",
height: 64,
width: 64,
),
Padding(
padding: const EdgeInsets.only(top: 5),
child: Text(title,
style: const TextStyle(
fontSize: 12, color: Color.fromRGBO(51, 51, 51, 1))),
)
],
),
);
}
static dismiss(BuildContext context) {
Navigator.pop(context);
}
......
import 'package:flutter/material.dart';
import 'package:Parlando/tiktok/style/style.dart';
import 'package:getwidget/getwidget.dart';
import 'package:tapped/tapped.dart';
import 'package:Parlando/extension/int_extension.dart';
......@@ -8,6 +9,7 @@ class TikTokButtonColumn extends StatelessWidget {
final double? bottomPadding;
final bool isPraise;
final bool isCollect;
final bool isSharing;
final Function? onPraise;
final Function? onCollect;
final Function? onShare;
......@@ -22,6 +24,7 @@ class TikTokButtonColumn extends StatelessWidget {
this.isPraise = false,
this.isCollect = false,
this.onAvatar,
this.isSharing = false,
}) : super(key: key);
@override
......@@ -44,11 +47,13 @@ class TikTokButtonColumn extends StatelessWidget {
onCollect: onCollect,
isCollect: isCollect,
),
_IconButton(
icon: IconToText(Icons.share, size: 20.px),
text: '分享',
onTap: onShare,
),
isSharing
? const GFLoader()
: _IconButton(
icon: IconToText(Icons.share, size: 20.px),
text: '分享',
onTap: onShare,
),
],
),
);
......
......@@ -28,16 +28,13 @@ class HomeTypesHeader extends StatelessWidget {
//交叉轴的布局方式,对于column来说就是水平方向的布局方式
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 60.0,
child: TextButton(
onPressed: () => funcLeft!(),
child: Text(
"临境",
style: TextStyle(
color: color ?? Colors.white,
fontSize: 15.px,
),
TextButton(
onPressed: () => funcLeft!(),
child: Text(
"临境",
style: TextStyle(
color: color ?? Colors.white,
fontSize: 15.px,
),
),
),
......
This diff is collapsed. Click to expand it.
......@@ -119,9 +119,10 @@ dependencies:
flutter_inapp_purchase: ^5.3.0
jpush_flutter: ^2.2.9
social_share: ^2.2.1
screenshot: ^1.2.3
share_plus: ^4.0.10
image_gallery_saver: ^1.7.1
flutter_easy_permission: ^1.1.2
dependency_overrides:
decimal: 1.5.0
......