123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:flutterappfuyou/code/base/YSNetWorking.dart';
- import 'package:flutterappfuyou/code/base/YSTools.dart';
- import '../live/YSLiveAnchor.dart';
- class YSMineLiveAdd extends StatefulWidget {
- const YSMineLiveAdd({Key key}) : super(key: key);
- @override
- _YSMineLiveAddState createState() => _YSMineLiveAddState();
- }
- class _YSMineLiveAddState extends State<YSMineLiveAdd> {
- List _titleArray = [
- {'title':'主题','type':1,'key':'title'},
- {'title':'密码','type':1,'key':'password'},
- {'title':'封面','type':3,'key':'cover'},
- {'title':'预告','type':2,'key':'expect_start','isClose':false},
- ];
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: SingleChildScrollView(
- child: Container(
- width: ysWidth(context),
- height: ysHeight(context),
- decoration: BoxDecoration(
- image: DecorationImage(image: AssetImage('lib/images/图.png'),fit: BoxFit.fill)
- ),
- padding: EdgeInsets.only(top: ysTOP(context),left: 10,right: 10,bottom: 10),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Container(
- padding: EdgeInsets.only(top: 10,left: 10,bottom: 30),
- child: GestureDetector(
- onTap: (){
- Navigator.pop(context);
- },
- child: Icon(Icons.close,size: 30,color: Colors.white,),
- )
- ),
- ListView.separated(
- itemBuilder: (context,index){
- Map item = _titleArray[index];
- bool isColumn = item['title']=='预告';
- bool isMust = item['title']=='主题'||item['title']=='封面';
- bool isClose = item['isClose']??false;
- return Container(
- padding: isColumn?EdgeInsets.all(0):EdgeInsets.only(top: 15,bottom: 15),
- child: LayoutBuilder(
- builder: (context,conSize){
- return isColumn?Column(
- children: [
- Container(
- alignment: Alignment.centerLeft,
- decoration: BoxDecoration(
- border: Border(bottom: BorderSide(color: Colors.white,width: 0.1))
- ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text(item['title'],style: TextStyle(fontSize: 15,color: Colors.white),),
- Switch(value: isClose, onChanged: (value){
- item['isClose'] = !item['isClose'];
- setState(() {});
- },activeColor: Colors.pinkAccent,)
- ],
- ),
- padding: EdgeInsets.only(left: 10,right: 10),
- ),
- if(isClose)Container(
- padding: EdgeInsets.only(left: 10,right: 10),
- alignment: Alignment.center,
- decoration: BoxDecoration(
- border: Border(bottom: BorderSide(color: Colors.white,width: 0.1))
- ),
- child: GestureDetector(
- onTap: (){
- FocusScope.of(context).unfocus();
- ysShowBottomAlertView(context, YSDatePicker(
- choose: (value){
- item['value'] = value;
- setState(() {});
- },
- withTime: true,
- ),isBarr: true);
- },
- behavior: HitTestBehavior.opaque,
- child: Container(
- width: conSize.maxWidth-40,
- child: RichText(
- text: TextSpan(
- text: '${item['value']??'请选择预约时间'} ',
- style: TextStyle(fontSize: 14,color: Colors.white),
- children: [
- WidgetSpan(child: Icon(Icons.calendar_today,size: 20,color: Colors.white,))
- ]
- ),
- ),
- alignment: Alignment.center,
- height: 50,
- ),
- ),
- )
- ],
- ):Row(
- children: [
- Container(
- width: 80,
- child: RichText(
- text: TextSpan(
- style: TextStyle(fontSize: 15,color: Colors.white),
- children: [
- TextSpan(
- text: '*',style: TextStyle(color: isMust?Color(0xFFE26085):Colors.transparent),
- ),
- TextSpan(
- text: item['title'],
- )
- ]
- ),
- ),
- ),
- Container(
- width: conSize.maxWidth-80,
- child: item['title']=='封面'?GestureDetector(
- child: Container(
- height: 80,
- width: 80,
- child: item['url']==null?Icon(
- Icons.add,size: 40,color: Colors.white,
- ):Image.network(
- item['url'],
- fit: BoxFit.cover,
- ),
- decoration: BoxDecoration(
- border: Border.all(color: Colors.white,width: 0.2)
- ),
- ),
- onTap: (){
- ysShowBottomAlertView(context, YSChooseFileView(valueSetter: (value){
- ysUploadFile(context,path: value.path,type: 'diary',setter: (result){
- item['value'] = result['path'];
- item['url'] = result['url'];
- setState(() {});
- });
- },),isBarr: true);
- },
- ):CupertinoTextField(
- placeholder: '请输入${item['title']}',
- decoration: BoxDecoration(
- color: Colors.transparent,
- ),
- style: TextStyle(fontSize: 15,color: Colors.white),
- placeholderStyle: TextStyle(fontSize: 15,color: Colors.white),
- onChanged: (value){
- if(value.isNotEmpty){
- item['value'] = value;
- }else{
- item.remove('value');
- }
- },
- ),
- alignment: Alignment.centerLeft,
- )
- ],
- );
- },
- ),
- );
- },
- separatorBuilder: (context,index){
- return Divider(height: 0.1,thickness: 0.1,color: Colors.white,);
- },
- itemCount: _titleArray.length,
- shrinkWrap: true,
- physics: NeverScrollableScrollPhysics(),
- padding: EdgeInsets.all(0),
- ),
- GestureDetector(
- onTap: () async{
- Map request = {};
- bool isSubmit = true;
- bool isSelect = true;
- _titleArray.forEach((element) {
- if(isSubmit==false)return;
- if(element['title']=='预告'){
- if(element['isClose']==true){
- isSelect = false;
- if(element['value']!=null){
- request['expect_start'] = '${element['value']}:${'${DateTime.now().second}'.padLeft(2,'0')}';
- DateTime time = DateTime.parse('${request['expect_start']}');
- if(time.isBefore(DateTime.now())){
- isSubmit = false;
- ysFlutterToast(context, '开始时间不能早于当前时间');
- return;
- }
- DateTime end = time.add(Duration(hours: 3));
- String endStr = end.year.toString()+'-'+end.month.toString().padLeft(2,'0')+'-'+end.day.toString().padLeft(2,'0')+' '+
- '${end.hour}'.padLeft(2,'0')+':'+'${end.minute}'.padLeft(2,'0')+':'+'${end.second}'.padLeft(2,'0');
- request['expect_end'] = endStr;
- }else{
- isSubmit = false;
- ysFlutterToast(context, '请选择预告时间');
- return;
- }
- }else{
- isSelect = true;
- DateTime start = DateTime.now().add(Duration(seconds: 10));
- String startStr = start.year.toString()+'-'+start.month.toString().padLeft(2,'0')+'-'+start.day.toString().padLeft(2,'0')+' '+
- '${start.hour}'.padLeft(2,'0')+':'+'${start.minute}'.padLeft(2,'0')+':'+'${start.second}'.padLeft(2,'0');
- request['expect_start'] = startStr;
- DateTime time = DateTime.parse('${request['expect_start']}');
- DateTime end = time.add(Duration(hours: 3));
- String endStr = end.year.toString()+'-'+end.month.toString().padLeft(2,'0')+'-'+end.day.toString().padLeft(2,'0')+' '+
- '${end.hour}'.padLeft(2,'0')+':'+'${end.minute}'.padLeft(2,'0')+':'+'${end.second}'.padLeft(2,'0');
- request['expect_end'] = endStr;
- }
- }else if(element['title']=='主题'){
- if(element['value']!=null){
- request[element['key']] = element['value'];
- }else{
- isSubmit = false;
- ysFlutterToast(context, '请输入主题');
- return;
- }
- }else{
- if(element['value']!=null)request[element['key']] = element['value'];
- }
- });
- if(isSubmit==false)return;
- Map dict = await ysRequestHttp(context, requestType.post, 'train/live2/create', request);
- if(dict!=null){
- Map data = dict['data'];
- Navigator.of(context).push(
- CupertinoPageRoute(builder: (context){
- return YSMineLiveAddDone(liveId: data['live_id'],title: request['title'],isSelect: isSelect,);
- })
- );
- }
- },
- behavior: HitTestBehavior.opaque,
- child: Container(
- margin: EdgeInsets.only(top: 100),
- height: 44,
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(5)),
- color: Color(0xFFE36085)
- ),
- alignment: Alignment.center,
- child: Text('创建直播',style: TextStyle(color: Colors.white,fontSize: 18),),
- ),
- )
- ],
- ),
- ),
- ),
- );
- }
- }
- class YSMineLiveAddDone extends StatefulWidget {
- final liveId;
- final String title;
- final bool isSelect;
- const YSMineLiveAddDone({Key key, this.liveId, this.title = '', this.isSelect = false}) : super(key: key);
- @override
- _YSMineLiveAddDoneState createState() => _YSMineLiveAddDoneState();
- }
- class _YSMineLiveAddDoneState extends State<YSMineLiveAddDone> {
- bool _isSelect = false;
- @override
- void initState() {
- _isSelect = widget.isSelect;
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: SingleChildScrollView(
- child: Container(
- width: ysWidth(context),
- height: ysHeight(context),
- decoration: BoxDecoration(
- image: DecorationImage(image: AssetImage('lib/images/图.png'),fit: BoxFit.fill)
- ),
- padding: EdgeInsets.only(top: ysTOP(context),left: 10,right: 10,bottom: 10),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Container(
- padding: EdgeInsets.only(top: 10,left: 10,bottom: 30),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- GestureDetector(
- onTap: (){
- Navigator.pop(context);
- },
- child: Icon(Icons.close,size: 30,color: Colors.white,),
- ),
- Text('创建完成',style: TextStyle(fontSize: 16,color: Colors.white),),
- Icon(Icons.close,size: 30,color: Colors.transparent,),
- ],
- )
- ),
- Container(
- padding: EdgeInsets.only(left: 40,right: 20,top: 300),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text('${widget.title}直播间已创建成功, \n是否进入直播间?',style: TextStyle(fontSize: 18,color: Colors.white,fontWeight: FontWeight.bold),),
- Container(
- padding: EdgeInsets.only(top: 20,bottom: 20),
- child: Row(
- children: [
- GestureDetector(
- child: Icon(_isSelect?Icons.check_box:Icons.check_box_outline_blank,size: 20,color: Colors.white,),
- onTap: (){
- _isSelect = !_isSelect;
- setState(() {});
- },
- ),
- Text(' 立即推流',style: TextStyle(fontSize: 18,color: Colors.white,fontWeight: FontWeight.bold),),
- ],
- ),
- ),
- Text('注意:选择开启推流,则会立即进入直播模式',style: TextStyle(fontSize: 12,color: Colors.white),),
- ],
- )
- ),
- GestureDetector(
- onTap: (){
- Navigator.of(context).push(
- CupertinoPageRoute(builder: (context){
- return YSLiveAnchor(liveId: widget.liveId,isSelect: _isSelect,);
- })
- );
- },
- child: Container(
- margin: EdgeInsets.only(top: 60),
- height: 44,
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(5)),
- color: Color(0xFFE36085)
- ),
- alignment: Alignment.center,
- child: Text('进入直播间',style: TextStyle(color: Colors.white,fontSize: 18),),
- ),
- )
- ],
- ),
- ),
- ),
- );
- }
- }
|