测试直播页面

master
laiiihz 5 years ago
parent ac35352886
commit 9e524380ac

@ -0,0 +1,94 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/widgets/recook_back_button.dart';
class LiveBlurPage extends StatefulWidget {
LiveBlurPage({Key key}) : super(key: key);
@override
_LiveBlurPageState createState() => _LiveBlurPageState();
}
class _LiveBlurPageState extends State<LiveBlurPage> {
@override
Widget build(BuildContext context) {
return BackdropFilter(
filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: Scaffold(
backgroundColor: Color(0xFF232323).withOpacity(0.78),
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.transparent,
leading: SizedBox(),
actions: [
IconButton(
icon: Icon(Icons.clear),
onPressed: () {
Navigator.pop(context);
Navigator.pop(context);
},
),
],
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'直播已结束',
style: TextStyle(
color: Colors.white,
fontSize: rSP(20),
),
),
rHBox(40),
ClipRRect(
borderRadius: BorderRadius.circular(rSize(80 / 2)),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image:
Api.getImgUrl(UserManager.instance.user.info.headImgUrl),
height: rSize(80),
width: rSize(80),
),
),
rHBox(55),
Row(
children: [],
),
rHBox(50),
MaterialButton(
height: rSize(40),
minWidth: rSize(209),
child: Text(
'关注',
style: TextStyle(
color: Colors.white,
fontSize: rSP(18),
),
),
onPressed: () {},
color: Color(0xFFDB2D2D),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(rSize(20)),
),
),
rHBox(16),
Text(
'关注主播,不错过更多精彩内容',
style: TextStyle(
color: Color(0xFF999999),
fontSize: rSP(12),
),
),
],
),
),
),
);
}
}

@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
class LivePage extends StatefulWidget {
LivePage({Key key}) : super(key: key);
@override
_LivePageState createState() => _LivePageState();
}
class _LivePageState extends State<LivePage> {
LivePusher _livePusher;
@override
void initState() {
super.initState();
}
@override
void dispose() {
_livePusher?.stopPreview();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey,
body: Stack(
children: [
CloudVideo(
onCloudVideoCreated: (controller) async {
_livePusher = await LivePusher.create();
_livePusher.startPreview(controller);
},
),
Positioned(
right: 0,
top: 0,
child: FlatButton(
onPressed: () {
_livePusher.switchCamera();
},
child: Text('test'),
),
),
],
),
);
}
}

@ -1,8 +1,11 @@
import 'package:flutter/material.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/pages/live/live_stream/live_blur_page.dart';
import 'package:recook/pages/live/widget/live_user_bar.dart';
import 'package:recook/pages/live/widget/more_people.dart';
import 'package:recook/utils/custom_route.dart';
import 'package:recook/widgets/custom_image_button.dart';
import 'package:tencent_live_fluttify/tencent_live_fluttify.dart';
class LiveStreamViewPage extends StatefulWidget {
LiveStreamViewPage({Key key}) : super(key: key);
@ -13,6 +16,23 @@ class LiveStreamViewPage extends StatefulWidget {
class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
bool _showTools = true;
LivePlayer _livePlayer;
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 10), () {
_livePlayer?.pausePlay();
CRoute.transparent(context, LiveBlurPage());
});
}
@override
void dispose() {
_livePlayer?.stopPlay();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -25,15 +45,28 @@ class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
child: Container(
height: MediaQuery.of(context).size.height,
color: Colors.black54,
child: Placeholder(),
child: CloudVideo(
onCloudVideoCreated: (controller) async {
_livePlayer = await LivePlayer.create();
await _livePlayer.setPlayerView(controller);
_livePlayer
.startPlay('rtmp://58.200.131.2:1935/livetv/cctv1');
},
),
),
),
GestureDetector(
onTap: () {
setState(() {
_showTools = !_showTools;
});
},
Positioned(
left: 0,
top: 0,
right: 0,
bottom: 0,
child: InkWell(
onTap: () {
setState(() {
_showTools = !_showTools;
});
},
),
),
//
AnimatedPositioned(

@ -13,6 +13,7 @@ import 'package:recook/constants/styles.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/pages/business/business_page.dart';
import 'package:recook/pages/home/home_page.dart';
import 'package:recook/pages/live/live_stream/live_page.dart';
import 'package:recook/pages/live/video/add_video_page.dart';
import 'package:recook/pages/live/pages/discovery_page.dart';
import 'package:recook/pages/live/widget/live_fab_location.dart';
@ -22,6 +23,7 @@ import 'package:recook/pages/user/user_page.dart';
import 'package:recook/third_party/bugly_helper.dart';
import 'package:recook/utils/app_router.dart';
import 'package:recook/utils/custom_route.dart';
import 'package:recook/utils/permission_tool.dart';
import 'package:recook/utils/print_util.dart';
import 'package:recook/utils/versionInfo/version_tool.dart';
import 'package:recook/widgets/cache_tab_bar_view.dart';
@ -140,7 +142,11 @@ class _TabBarWidgetState extends State<TabBarWidget>
verticalButton(
'直播',
R.ASSETS_LIVE_ADD_STREAM_PNG,
onTap: () {},
onTap: () {
PermissionTool.haveCameraPermission()
.then((value) {});
CRoute.push(context, LivePage());
},
),
verticalButton(
'视频',

@ -29,4 +29,16 @@ class CRoute {
return;
}
}
///
static transparent(BuildContext context, Widget child) {
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondAnimation) {
return FadeTransition(opacity: animation, child: child);
},
opaque: false,
));
}
}

@ -24,6 +24,15 @@ class PermissionTool{
}
}
static Future<bool> haveAudioPermission() async {
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.microphone]);
if (permissions[PermissionGroup.photos] == PermissionStatus.granted) {
return true;
}else{
return false;
}
}
static showOpenPermissionDialog(BuildContext context, String message,{Function open}){
showCupertinoDialog<int>(
context: context,

Loading…
Cancel
Save