Commit c0c1c56e authored by NguyenTienManh's avatar NguyenTienManh

update 14-2

parent bc980cbc
...@@ -3,6 +3,7 @@ import '../model/course_model.dart'; ...@@ -3,6 +3,7 @@ import '../model/course_model.dart';
// https://imes-api.myitsol.com/api/v1/public/search-courses // https://imes-api.myitsol.com/api/v1/public/search-courses
// https://imes-api.myitsol.com/api/v1/public/courses/lesson-free?startRecord=0&size=10 // https://imes-api.myitsol.com/api/v1/public/courses/lesson-free?startRecord=0&size=10
// https://imes-api.myitsol.com/api/v1/public/course/02483841-81c4-4d64-b0de-d271654854fe
class RemoteCourse{ class RemoteCourse{
Future<CourseModel?> getCourseModel() async{ Future<CourseModel?> getCourseModel() async{
var dio = Dio(); var dio = Dio();
......
...@@ -68,7 +68,6 @@ class CourseWidget extends StatelessWidget { ...@@ -68,7 +68,6 @@ class CourseWidget extends StatelessWidget {
itemHeight: 340, itemHeight: 340,
itemWidth: double.maxFinite, itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER, layout: SwiperLayout.TINDER,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return return
Container( Container(
...@@ -105,7 +104,6 @@ class CourseWidget extends StatelessWidget { ...@@ -105,7 +104,6 @@ class CourseWidget extends StatelessWidget {
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: child:
Text(listData[index].name!), Text(listData[index].name!),
//Text('123'),
), ),
],), ],),
); );
......
...@@ -2,7 +2,7 @@ import 'package:dio/dio.dart'; ...@@ -2,7 +2,7 @@ import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../model/course_detail_model.dart'; import '../model/course_detail_model.dart';
// https://imes-api.myitsol.com/api/v1/public/course/ef6c4a7b-54f7-46b7-9ffd-99b057baa757 // https://imes-api.myitsol.com/api/v1/public/course/02483841-81c4-4d64-b0de-d271654854fe
class RemoteCourseDetail{ class RemoteCourseDetail{
Future<CourseDetailModel?> getCourseDetailModel({required BuildContext context,required String idCourse}) async{ Future<CourseDetailModel?> getCourseDetailModel({required BuildContext context,required String idCourse}) async{
var dio = Dio(); var dio = Dio();
......
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:ongbut_ntmanh/app/module/coursedetail/model/chapters.dart'; import 'package:ongbut_ntmanh/app/module/coursedetail/model/chapters.dart';
import 'package:ongbut_ntmanh/app/module/coursedetail/model/course_detail_model.dart'; import 'package:ongbut_ntmanh/app/module/coursedetail/model/course_detail_model.dart';
import 'package:ongbut_ntmanh/app/module/coursedetail/model/list_lesson.dart';
import 'package:ongbut_ntmanh/app/module/lession/widgets/lession_widget.dart';
import 'package:ongbut_ntmanh/const/colors.dart'; import 'package:ongbut_ntmanh/const/colors.dart';
import 'package:ongbut_ntmanh/widgets/widgets_util.dart'; import 'package:ongbut_ntmanh/widgets/widgets_util.dart';
import '../../../../res/images/images.dart'; import '../../../../res/images/images.dart';
import '../../lession/widgets/lession_widget.dart'; import '../../playvideo/page/play_video.dart';
import '../bloc/course_detail_bloc.dart'; import '../bloc/course_detail_bloc.dart';
class CourseDetailWidget extends StatelessWidget { class CourseDetailWidget extends StatelessWidget {
...@@ -14,6 +17,7 @@ class CourseDetailWidget extends StatelessWidget { ...@@ -14,6 +17,7 @@ class CourseDetailWidget extends StatelessWidget {
String image; String image;
CourseDetailModel? courseDetailModel; CourseDetailModel? courseDetailModel;
List<Chapters> chapters = []; List<Chapters> chapters = [];
List<ListLesson> listLesion = [];
CourseDetailWidget(this.courseId,this.image, {super.key}); CourseDetailWidget(this.courseId,this.image, {super.key});
...@@ -50,6 +54,7 @@ class CourseDetailWidget extends StatelessWidget { ...@@ -50,6 +54,7 @@ class CourseDetailWidget extends StatelessWidget {
} }
if(state is CourseDetailSuccess){ if(state is CourseDetailSuccess){
chapters = state.courseDetailModel.data!.chapters!; chapters = state.courseDetailModel.data!.chapters!;
if(chapters.isEmpty){ if(chapters.isEmpty){
return const Text('Chua Co Noi Dung Khoa Hoc',style: TextStyle(fontSize: 15,color: AppColors.red_light),); return const Text('Chua Co Noi Dung Khoa Hoc',style: TextStyle(fontSize: 15,color: AppColors.red_light),);
} }
...@@ -73,7 +78,7 @@ class CourseDetailWidget extends StatelessWidget { ...@@ -73,7 +78,7 @@ class CourseDetailWidget extends StatelessWidget {
style: TextStyle(fontSize: 15),)), style: TextStyle(fontSize: 15),)),
// const Text('Thong Tin chi tiet',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),), // const Text('Thong Tin chi tiet',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton( TextButton(
child: Text('Nhan xet ve khoa hoc',style: TextStyle(color: AppColors.black),), child: const Text('Nhan xet ve khoa hoc',style: TextStyle(color: AppColors.black),),
onPressed: () { onPressed: () {
print('Pressed'); print('Pressed');
} }
...@@ -92,10 +97,11 @@ class CourseDetailWidget extends StatelessWidget { ...@@ -92,10 +97,11 @@ class CourseDetailWidget extends StatelessWidget {
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return return
ExpansionTile( ExpansionTile(
title: Text(chapters[index].name!), title: Text(chapters[index].name!),
children: [ children: [
chapters[index].listLesson!.isNotEmpty?LessionWidget( chapters[index].listLesson![0].lessonId!):const Text(''), chapters[index].listLesson!.isNotEmpty?_buildLesion(chapters[index]):const Text(''),
], ],
); );
}, },
...@@ -114,6 +120,54 @@ class CourseDetailWidget extends StatelessWidget { ...@@ -114,6 +120,54 @@ class CourseDetailWidget extends StatelessWidget {
],) ],)
); );
} }
ListView _buildLesion(Chapters chapters){
return
ListView.builder(
shrinkWrap: true,
itemCount: chapters.listLesson!.length,
itemBuilder: (context, index){
return
InkWell(
onTap: (){
chapters.listLesson![0].free == true?
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LessionWidget(lessonID: chapters.listLesson![index].lessonId!)),
):const Text('');
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(30, 3, 0, 3),
child: Image.asset(Images.o,height: 10,width: 10,)),
Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
child:
Container(
width: checkLandscape(context)?getWidth(context)*0.8:getWidth(context)*0.6,
child: Text(chapters.listLesson![index].name!=null?chapters.listLesson![index].name!:'',style: const TextStyle(fontSize: 12),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: chapters.listLesson![0].free == true ?Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: Image.asset(Images.see,height: 20,width: 20,),
):Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: Image.asset(Images.uneye,height: 20,width: 20,),
),
),
],),
);
}
);
}
} }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../../res/images/images.dart';
import '../../playvideo/page/play_video.dart'; import '../../playvideo/page/play_video.dart';
import '../bloc/lesson_bloc.dart'; import '../bloc/lesson_bloc.dart';
import '../model/lesson_model.dart'; import '../model/lesson_model.dart';
class LessionWidget extends StatelessWidget { class LessionWidget extends StatelessWidget {
String lessonID; String lessonID;
LessionWidget({Key? key, required this.lessonID}) : super(key: key);
LessionWidget( this.lessonID, {Key? key}) : super(key: key);
LessonModel? lessonModel; LessonModel? lessonModel;
String pl = 'Playlist video';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
BlocProvider.of<LessonBloc>(context).add( BlocProvider.of<LessonBloc>(context).add(
...@@ -36,45 +31,8 @@ class LessionWidget extends StatelessWidget { ...@@ -36,45 +31,8 @@ class LessionWidget extends StatelessWidget {
} }
if(state is LessonSuccess){ if(state is LessonSuccess){
return return
state.lessonModel.data!.isNotEmpty?ListView.builder( PlayVideoPage(link: state.lessonModel.data!.length>3?state.lessonModel.data![3].playlist![0].link!:'ES1NU-uwX-Q');
shrinkWrap: true, // state.lessonModel.data!.length>3?PlayVideoPage(link: state.lessonModel.data![3].playlist![0].link!):const Text('Xin Loi khong co Video');
itemCount: state.lessonModel.data!.length,
itemBuilder: (context, index){
return
InkWell(
onTap: (){
state.lessonModel.data![index].partType == 'YOUTUBE'?
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PlayVideoPage(link: state.lessonModel.data![index].playlist![0].link!)),
):const Text('---------');
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(30, 3, 0, 3),
child: Image.asset(Images.o,height: 10,width: 10,)),
Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
child:
Text(state.lessonModel.data![index].title!=null?state.lessonModel.data![index].title!:''),
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: state.lessonModel.data![index].partType=='YOUTUBE'?Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: Image.asset(Images.see,height: 20,width: 20,),
):Padding(
padding: const EdgeInsets.fromLTRB(20, 3, 20, 3),
child: Image.asset(Images.uneye,height: 20,width: 20,),
),
),
],),
);
}
):const Text('');
} }
return const Text('NewFailed'); return const Text('NewFailed');
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment