From 2a68a03f7743eeed720829bff47e1c1109cdf751 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Fri, 30 Oct 2020 16:36:43 +0800 Subject: [PATCH] ... --- android/app/build.gradle | 18 +-- assets/live/live_animal.png | Bin 0 -> 33414 bytes ios/Podfile.lock | 40 ++--- lib/pages/live/live_stream/live_page.dart | 85 ++++++++++- .../live_stream/live_stream_view_page.dart | 139 +++++++++++++++--- lib/pages/live/pages/goods_window_page.dart | 8 +- .../user_home/user_activity_view.dart | 5 +- .../user_home/user_playback_view.dart | 5 +- lib/pages/live/sub_page/user_home_page.dart | 28 +++- pubspec.yaml | 2 +- 10 files changed, 273 insertions(+), 57 deletions(-) create mode 100644 assets/live/live_animal.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 80ddade..474630c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -81,19 +81,19 @@ android { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug - ndk { - //设置支持的SO库架构 - abiFilters 'armeabi-v7a', 'x86'//, 'arm64-v8a', 'x86', 'x86_64' - } + // ndk { + // //设置支持的SO库架构 + // abiFilters "armeabi","armeabi-v7a","arm64-v8a"//, 'arm64-v8a', 'x86', 'x86_64' + // } } debug { signingConfig signingConfigs.debug - ndk { - abiFilters "armeabi","armeabi-v7a","arm64-v8a", "x86" - //设置支持的SO库架构 -// abiFilters 'armeabi-v7a', 'x86'//, 'arm64-v8a', 'x86', 'x86_64' - } +// ndk { +// abiFilters "armeabi","armeabi-v7a","arm64-v8a" +// //设置支持的SO库架构 +// // abiFilters 'armeabi-v7a', 'x86'//, 'arm64-v8a', 'x86', 'x86_64' +// } } } diff --git a/assets/live/live_animal.png b/assets/live/live_animal.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fdb86d80a2037b0cb1c08b0a9cee4db10c9f0b GIT binary patch literal 33414 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 3.5.0) - - mob_sharesdk (4.3.13.1): - - mob_sharesdk/ShareSDK (= 4.3.13.1) + - mob_sharesdk (4.3.14): + - mob_sharesdk/ShareSDK (= 4.3.14) - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDK (4.3.13.1): + - mob_sharesdk/ShareSDK (4.3.14): - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKExtension (4.3.13.1): + - mob_sharesdk/ShareSDKExtension (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/Douyin (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/Douyin (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/Facebook (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/Facebook (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/KuaiShou (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/KuaiShou (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/Line (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/Line (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/Oasis (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/Oasis (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/QQ (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/QQ (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/SinaWeibo (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/SinaWeibo (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/SnapChat (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/SnapChat (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/Twitter (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/Twitter (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/WatermelonVideo (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/WatermelonVideo (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKPlatforms/WeChatFull (4.3.13.1): + - mob_sharesdk/ShareSDKPlatforms/WeChatFull (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKRestoreScene (4.3.13.1): + - mob_sharesdk/ShareSDKRestoreScene (4.3.14): - mob_sharesdk/ShareSDKExtension - MOBFoundation (>= 3.2.9) - - mob_sharesdk/ShareSDKUI (4.3.13.1): + - mob_sharesdk/ShareSDKUI (4.3.14): - mob_sharesdk/ShareSDK - MOBFoundation (>= 3.2.9) - - MOBFoundation (3.2.19) + - MOBFoundation (3.2.21) - mobile-ffmpeg-min (4.3.1.LTS) - openinstall_flutter_plugin (0.0.1): - Flutter @@ -420,8 +420,8 @@ SPEC CHECKSUMS: Mantle: 863ddda5376b35174cd7676e381d448aa52cc5e7 Meiqia: f4bb24e7a785e100957e6702d19853434dcb486e meiqia_plugin: bff6743de1eb5e1f7c6b2142a5953e18c4abbbe7 - mob_sharesdk: a83dd0b129a3f954c9a639d5c33fd3d2cd41e887 - MOBFoundation: 606bc4c10ff4c6ac573c09f5081a39c75316bc7b + mob_sharesdk: 55e3cbbf594f1abf4a23e198922bcc11ce86ddbb + MOBFoundation: 7b690d8d42c2c08e33bb3e4d38411bf761bf9f5f mobile-ffmpeg-min: d5d22dcef5c8ec56f771258f1f5be245d914f193 openinstall_flutter_plugin: e6b8486f834eb60b336546442a8b747d4b664cf4 package_info: 48b108e75b8802c2d5e126f208ef540561c98aef diff --git a/lib/pages/live/live_stream/live_page.dart b/lib/pages/live/live_stream/live_page.dart index 2bde28f..b276356 100644 --- a/lib/pages/live/live_stream/live_page.dart +++ b/lib/pages/live/live_stream/live_page.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:oktoast/oktoast.dart'; import 'package:recook/constants/api.dart'; import 'package:recook/constants/header.dart'; @@ -53,7 +54,7 @@ class LivePage extends StatefulWidget { _LivePageState createState() => _LivePageState(); } -class _LivePageState extends State { +class _LivePageState extends State with WidgetsBindingObserver { LivePusher _livePusher; File _imageFile; TopicListModel _topicModel; @@ -79,13 +80,42 @@ class _LivePageState extends State { @override void initState() { super.initState(); + WidgetsBinding.instance.addObserver(this); Wakelock.enable(); _editingController.text = '${UserManager.instance.user.info.nickname}的直播'; } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if (_isStream) + switch (state) { + case AppLifecycleState.inactive: + _livePusher.setPauseConfig( + 300, + 5, + AssetImage(R.ASSETS_LIVE_LIVE_ANIMAL_PNG), + ImageConfiguration(), + ); + _livePusher.pausePush(); + + break; + case AppLifecycleState.resumed: + _livePusher.resumePush(); + break; + case AppLifecycleState.paused: + print('paused'); + break; + case AppLifecycleState.detached: + print('detached'); + break; + } + super.didChangeAppLifecycleState(state); + } + @override void dispose() { + WidgetsBinding.instance.removeObserver(this); PickCart.picked.clear(); Wakelock.disable(); _livePusher?.stopPush(); @@ -116,6 +146,59 @@ class _LivePageState extends State { onCloudVideoCreated: (controller) async { _livePusher = await LivePusher.create(); _livePusher.startPreview(controller); + _livePusher.setOnEventListener( + onWaringNetBusy: () { + print(''); + }, + onWaringReconnect: () { + print(''); + }, + onWaringHardwareAccelerationFail: () { + print(''); + }, + onWaringDNSFail: () { + print(''); + }, + onWaringServerConnFail: () { + print(''); + }, + onWaringShakeFail: () { + print(''); + }, + onWaringServerDisconnect: () { + print(''); + }, + onEventConnectSucc: () { + print(''); + }, + onEventPushBegin: () { + print(''); + }, + onEventOpenCameraSuccess: () { + print(''); + }, + onErrorOpenCameraFail: () { + showToast('相机打开失败'); + }, + onErrorOpenMicFail: () { + print(''); + }, + onErrorVideoEncodeFail: () { + print(''); + }, + onErrorAudioEncodeFail: () { + print(''); + }, + onErrorUnsupportedResolution: () { + print(''); + }, + onErrorUnsupportedSampleRate: () { + print(''); + }, + onErrorNetDisconnect: () { + print(''); + }, + ); _livePusher.setBeautyFilter( BeautyFilter.NATURE, whiteningLevel: 6, diff --git a/lib/pages/live/live_stream/live_stream_view_page.dart b/lib/pages/live/live_stream/live_stream_view_page.dart index 19f240c..017eed5 100644 --- a/lib/pages/live/live_stream/live_stream_view_page.dart +++ b/lib/pages/live/live_stream/live_stream_view_page.dart @@ -1,4 +1,6 @@ +import 'dart:async'; import 'dart:convert'; +import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:many_like/many_like.dart'; @@ -71,9 +73,14 @@ class _LiveStreamViewPageState extends State { FocusNode _focusNode = FocusNode(); + Timer _liveTimer; + bool _waitSignal = false; + int _livePauseTimeStamp = 0; + @override void initState() { super.initState(); + Wakelock.enable(); // Future.delayed(Duration(seconds: 10), () { // _livePlayer?.pausePlay(); @@ -228,6 +235,14 @@ class _LiveStreamViewPageState extends State { ); setState(() {}); break; + case 'Play': + int holdTimeStamp = data['time']; + if (holdTimeStamp > _livePauseTimeStamp) { + setState(() { + _waitSignal = data['type'] == 'pause'; + }); + } + break; } } } else { @@ -289,8 +304,22 @@ class _LiveStreamViewPageState extends State { } } + reconnectToLive() { + _liveTimer?.cancel(); + _liveTimer = Timer(Duration(milliseconds: 5000), () { + _livePlayer.isPlaying().then((value) { + setState(() { + _waitSignal = !value; + }); + }); + // _livePlayer.push + _livePlayer.startPlay(_streamInfoModel.playUrl, type: PlayType.RTMP); + }); + } + @override void dispose() { + _liveTimer?.cancel(); _livePlayer?.stopPlay(); TencentImPlugin.quitGroup(groupId: _streamInfoModel.groupId); TencentImPlugin.removeListener(parseMessage); @@ -301,6 +330,47 @@ class _LiveStreamViewPageState extends State { super.dispose(); } + _buildWait() { + return _waitSignal + ? BackdropFilter( + filter: ImageFilter.blur( + sigmaX: 5, + sigmaY: 5, + ), + child: Container( + color: Colors.black54, + child: Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + R.ASSETS_LIVE_LIVE_ANIMAL_PNG, + height: rSize(107), + width: rSize(35), + ), + rHBox(15), + Text( + '主播暂时离开', + style: TextStyle( + color: Colors.white, + fontSize: rSP(20), + ), + ), + rHBox(10), + Text( + '休息片刻,阿库陪你一起等待精彩', + style: TextStyle( + color: Color(0xFF999999), + fontSize: rSP(14), + ), + ), + ], + ), + ), + ) + : SizedBox(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -321,31 +391,58 @@ class _LiveStreamViewPageState extends State { await _livePlayer.setPlayerView(controller); _livePlayer.startPlay(_streamInfoModel.playUrl, type: PlayType.RTMP); - _livePlayer - ..setOnEventListener( - onEventPlayEnd: () { - print('end'); - }, - onEventPlayBegin: () { - print('begin'); - }, - onWarningServerConnFail: () { - print('server conn fail'); - }, - onWarningReconnect: () { - print('reconn'); - }, - onWarningVideoPlayLag: () { - print('video'); - }, - onWarningRecvDataLag: () { - print('data'); - }, - ); + _livePlayer.setOnEventListener( + onWarningReconnect: () { + reconnectToLive(); + }, + onWarningVideoDecodeFail: () { + print(''); + }, + onWarningAudioDecodeFail: () { + print(''); + }, + onWarningRecvDataLag: () { + print(''); + }, + onWarningVideoPlayLag: () { + print(''); + }, + onWarningHwAccelerationFail: () { + print(''); + }, + onWarningVideoDiscontinuity: () { + print(''); + }, + onWarningDNSFail: () { + print(''); + }, + onWarningServerConnFail: () { + print(''); + }, + onWarningShakeFail: () { + print(''); + }, + onEventRcvFirstIFrame: () { + print(''); + }, + onEventPlayBegin: () { + print('1'); + }, + onEventPlayEnd: () { + print('`'); + }, + ); }, ), ), ), + Positioned( + left: 0, + right: 0, + bottom: 0, + top: 0, + child: _buildWait(), + ), Positioned( left: 0, top: 0, diff --git a/lib/pages/live/pages/goods_window_page.dart b/lib/pages/live/pages/goods_window_page.dart index 484ccee..38a3fe7 100644 --- a/lib/pages/live/pages/goods_window_page.dart +++ b/lib/pages/live/pages/goods_window_page.dart @@ -19,7 +19,7 @@ class _GoodsWindowPageState extends State { List models = []; List displayModels = []; - List _selectedIds = []; + List _selectedIds = []; int page = 1; bool _isManager = false; @@ -129,12 +129,16 @@ class _GoodsWindowPageState extends State { }); }, onLoadMore: () { + page++; getGoodsWindowModels().then((model) { setState(() { models.add(model); displayModels.addAll(model.list); }); - _controller.loadComplete(); + if (model.list.isEmpty) + _controller.loadNoData(); + else + _controller.loadComplete(); }).catchError((_) { _controller.loadFailed(); }); diff --git a/lib/pages/live/sub_page/user_home/user_activity_view.dart b/lib/pages/live/sub_page/user_home/user_activity_view.dart index 1c606fe..b8101f8 100644 --- a/lib/pages/live/sub_page/user_home/user_activity_view.dart +++ b/lib/pages/live/sub_page/user_home/user_activity_view.dart @@ -13,11 +13,13 @@ class UserActivityView extends StatefulWidget { final int id; final LiveBaseInfoModel userModel; final bool initAttention; + final VoidCallback onRefresh; UserActivityView( {Key key, @required this.id, @required this.userModel, - @required this.initAttention}) + @required this.initAttention, + this.onRefresh}) : super(key: key); @override @@ -51,6 +53,7 @@ class _UserActivityViewState extends State controller: _controller, onRefresh: () { _page = 1; + widget.onRefresh(); getActivityModels().then((models) { setState(() { activityListModels = models; diff --git a/lib/pages/live/sub_page/user_home/user_playback_view.dart b/lib/pages/live/sub_page/user_home/user_playback_view.dart index 5632d70..5e9c988 100644 --- a/lib/pages/live/sub_page/user_home/user_playback_view.dart +++ b/lib/pages/live/sub_page/user_home/user_playback_view.dart @@ -9,7 +9,9 @@ import 'package:recook/widgets/refresh_widget.dart'; class UserPlaybackView extends StatefulWidget { final int userId; - UserPlaybackView({Key key, @required this.userId}) : super(key: key); + final VoidCallback onRefresh; + UserPlaybackView({Key key, @required this.userId, this.onRefresh}) + : super(key: key); @override _UserPlaybackViewState createState() => _UserPlaybackViewState(); @@ -43,6 +45,7 @@ class _UserPlaybackViewState extends State controller: _controller, onRefresh: () { _page = 1; + widget.onRefresh(); getActivityVideoList().then((models) { setState(() { _videoModels = models; diff --git a/lib/pages/live/sub_page/user_home_page.dart b/lib/pages/live/sub_page/user_home_page.dart index e2ff5b0..6d74248 100644 --- a/lib/pages/live/sub_page/user_home_page.dart +++ b/lib/pages/live/sub_page/user_home_page.dart @@ -216,8 +216,34 @@ class _UserHomePageState extends State id: widget.userId, userModel: model, initAttention: selfFlag ? true : widget.initAttention, + onRefresh: () { + HttpManager.post(LiveAPI.baseInfo, { + 'findUserId': widget.userId, + }).then((resultData) { + if (resultData?.data['data'] != null) { + setState(() { + model = + LiveBaseInfoModel.fromJson(resultData.data['data']); + }); + } + }); + }, + ), + UserPlaybackView( + userId: widget.userId, + onRefresh: () { + HttpManager.post(LiveAPI.baseInfo, { + 'findUserId': widget.userId, + }).then((resultData) { + if (resultData?.data['data'] != null) { + setState(() { + model = + LiveBaseInfoModel.fromJson(resultData.data['data']); + }); + } + }); + }, ), - UserPlaybackView(userId: widget.userId), ], ), ), diff --git a/pubspec.yaml b/pubspec.yaml index b46bc22..803c241 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: recook description: Recook Market App. publish_to: "none" -version: 1.3.0+190 +version: 1.3.1+191 # sdk min version to 2.2.2 # to support ... feature