Commit 9ceeb706 authored by NguyenTienManh's avatar NguyenTienManh

update 16-2

parent b9fe2174
......@@ -23,6 +23,8 @@ class _ApplicationState extends State<Application> {
super.initState();
}
// _counterWidget(context),
// bottomNavigationBar: appBar(),
@override
Widget build(BuildContext context) {
return Scaffold(
......@@ -31,6 +33,8 @@ class _ApplicationState extends State<Application> {
backgroundColor: AppColors.primary,
),
body:
// RefreshIndicator(
// onRefresh: () async{await Future.delayed(const Duration(seconds: 1));}, child:_counterWidget(context),),
_counterWidget(context),
bottomNavigationBar: appBar(),
);
......
......@@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_swiper_view/flutter_swiper_view.dart';
import 'package:ongbut_ntmanh/app/module/course/model/list_data.dart';
import 'package:ongbut_ntmanh/const/colors.dart';
import 'package:ongbut_ntmanh/widgets/widgets_util.dart';
import '../../../../res/images/images.dart';
import '../../../ui/search_page.dart';
import '../../coursedetail/widgets/course_detail.dart';
......@@ -59,7 +59,7 @@ class CourseWidget extends StatelessWidget {
listData = state.courseModel.data!.listData!;
return
Swiper(
itemHeight: 340,
itemHeight: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.4,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
itemBuilder: (BuildContext context, int index) {
......@@ -81,7 +81,7 @@ class CourseWidget extends StatelessWidget {
borderRadius: BorderRadius.circular(8.0),
child:
Image.network(listData[index].image!=null?listData[index].image!:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG',
fit: BoxFit.fill,height: 200,width: double.maxFinite,
fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.28,width: double.maxFinite,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
......@@ -109,7 +109,7 @@ class CourseWidget extends StatelessWidget {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!=null?listData[index].image!
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].name!,listData[index].image!=null?listData[index].image!
:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG'),
)).then((value) {
......
......@@ -13,25 +13,23 @@ import '../bloc/course_detail_bloc.dart';
class CourseDetailWidget extends StatelessWidget {
String courseId;
String image;
String name;
CourseDetailModel? courseDetailModel;
List<Chapters> chapters = [];
List<ListLesson> listLesion = [];
CourseDetailWidget(this.courseId,this.image, {super.key});
CourseDetailWidget(this.courseId,this.name,this.image, {super.key});
@override
Widget build(BuildContext context) {
CourseDetailBloc bloc = CourseDetailBloc()..add(RequestCourseDetail(context: context,idCourse: courseId));
// BlocProvider.of<CourseDetailBloc>(context).add(
// RequestCourseDetail(context: context,idCourse: courseId));
return
Scaffold(
appBar: AppBar(title: const Text('Chi Tiet Khoa Hoc'),),
body:
Column(children: [
Image.network(image, fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.3,width: double.maxFinite,
Image.network(image, fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.26,width: double.maxFinite,
errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
return Image.asset(Images.load_err,fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.3,width: double.maxFinite,);
return Image.asset(Images.load_err,fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.26,width: double.maxFinite,);
},
),
Expanded(
......@@ -62,16 +60,30 @@ class CourseDetailWidget extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Text(name,style: TextStyle(fontSize: 15,fontWeight: FontWeight.bold),),
),
Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
child: Image.asset(Images.rate,height: 20,width: 150,),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// Image.asset(Images.see,height: 20,width: 20,),
TextButton(onPressed: (){},
child: const Text('Thong Tin chi tiet',
style: TextStyle(fontSize: 15),)),
child: Row(
children: [
Text('Thong Tin chi tiet',
style: TextStyle(fontSize: 15),),
],
)),
// const Text('Thong Tin chi tiet',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton(
child: const Text('Nhan xet ve khoa hoc',style: TextStyle(color: AppColors.black),),
......@@ -86,16 +98,18 @@ class CourseDetailWidget extends StatelessWidget {
),
Expanded(
child: Padding(
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
padding: const EdgeInsets.fromLTRB(0, 10, 0, 0),
child:
ListView.builder(
itemCount: chapters.length,
physics: const AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return
ExpansionTile(
title: Text(chapters[index].name!),
textColor: AppColors.primary,
iconColor: AppColors.red_light,
backgroundColor: AppColors.white,
title: Text(chapters[index].name!,style: TextStyle(color: AppColors.semi_grey),),
children: [
chapters[index].listLesson!.isNotEmpty?_buildLesion(chapters[index]):const Text(''),
],
......@@ -143,7 +157,7 @@ class CourseDetailWidget extends StatelessWidget {
child:
Container(
width: checkLandscape(context)?getWidth(context)*0.25:getHeight(context)*0.25,
child: Text(chapters.listLesson![index].name!=null?chapters.listLesson![index].name!:'',style: TextStyle(fontSize: 12, overflow: TextOverflow.ellipsis),
child: Text(chapters.listLesson![index].name!=null?chapters.listLesson![index].name!:'',style: TextStyle(fontSize: 14, overflow: TextOverflow.ellipsis),
softWrap: false,
maxLines: 1,),
),
......
......@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import '../model/lesson_model.dart';
// https://imes-api.myitsol.com/api/v1/student/course/part?lessonId=fb228efa-7b32-419e-98b4-a6d5135f4361
// https://imes-api.myitsol.com/api/v1/student/course/part?lessonId=fb228efa-7b32-419e-98b4-a6d5135f4361
class RemoteLesson{
Future<LessonModel?> getLessonModel({required BuildContext context,required String lessonID}) async{
......
......@@ -4,7 +4,6 @@ import 'package:ongbut_ntmanh/const/colors.dart';
import '../bloc/login_bloc.dart';
import '../model/login_model.dart';
final TextEditingController _userController = TextEditingController();
final TextEditingController _passController = TextEditingController();
LoginModel? loginModels;
......@@ -15,6 +14,19 @@ class LoginPage extends StatelessWidget {
return
BlocConsumer<LoginBloc, LoginState>(
listener: (context, state) async {
if(state is LoginSuccess){
return showCustomDialog(context, 'Dang Nhap Thanh Cong!');
}
if(state is LoginFailed){
return showCustomDialog(context,'Dang Nhap Khong Thanh Cong!');
}
if(_userController.text.isEmpty){
return showCustomDialog(context,'Hay Nhap usename');
}
if(_passController.text.isEmpty){
return showCustomDialog(context,'Hay Nhap pass');
}
// else{return showCustomDialog(context,'');}
// if(state is LoginSuccess){
// _userController.text='';
// _passController.text='';
......@@ -23,9 +35,18 @@ class LoginPage extends StatelessWidget {
// if(state is MyStateSuccess){
// // Thực hiện hành động
// }
// if(state is LoginSuccess){
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (_) => LoginDetailPage(),
//
// ));
// }
},
builder: (context, state) {
return _buildUI(context);
},
);
}
......@@ -83,6 +104,7 @@ Widget _buildUI(BuildContext context){
context: context,
username: _userController.text,
password: _passController.text));
},
child: Text("Dang Nhap".toUpperCase(),
style: const TextStyle(
......@@ -96,21 +118,56 @@ Widget _buildUI(BuildContext context){
return const CircularProgressIndicator();
}
if (state is LoginFailed) {
return const Text('login false!');
return const Text('LoginFailed!');
}
if (state is LoginInitial) {
return
const Text('LoginInitial');
const Text('LoginInitial!');
}
if (state is LoginSuccess) {
return
const Text('Dang Nhap Thanh Cong');
return const Text('LoginSuccess!');
}
return const CircularProgressIndicator();
return const Text('');
}),
],
),
);
}
void showCustomDialog(BuildContext context, String mes) {
showGeneralDialog(
context: context,
barrierLabel: "Barrier",
barrierDismissible: true,
barrierColor: Colors.black.withOpacity(0.5),
transitionDuration: Duration(milliseconds: 700),
pageBuilder: (_, __, ___) {
return Center(
child: Container(
height: 240,
margin: EdgeInsets.symmetric(horizontal: 20),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(40)),
child: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(15, 60, 0, 15),
child: Text(mes,style: const TextStyle(fontSize: 18,color: Colors.black),),
),
Center(
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary,
onPrimary: Colors.black, // foreground
),
onPressed: () => Navigator.pop(context, true),
child: const Text('OK', style: TextStyle(fontSize: 28)),),
)
],
),
),
);
},
);
}
......@@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:ongbut_ntmanh/app/module/new/model/new_model.dart';
import '../../../../const/colors.dart';
import '../../../../res/images/images.dart';
import '../../../../widgets/widgets_util.dart';
......@@ -56,16 +55,9 @@ class NewWidget extends StatelessWidget {
if(state is NewSuccess){
return
Container(
padding: EdgeInsets.fromLTRB(20, 0, 0, 0),
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
// boxShadow: [
// BoxShadow(
// //color: AppColors.primary_light,
// spreadRadius: 1,
// ),
// ],
),
height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.35,
width: double.maxFinite,
......@@ -123,7 +115,6 @@ class NewWidget extends StatelessWidget {
},
),
);
}
return const Text('NewFailed');
}
......
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:ongbut_ntmanh/widgets/widgets_util.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
import '../../../../const/colors.dart';
class PlayVideoPage extends StatefulWidget {
String link;
PlayVideoPage({required this.link,Key? key}) : super(key: key);
bool clicked = true;
PlayVideoPage({required this.link,Key? key}) : super(key: key);
@override
State<PlayVideoPage> createState() => _PlayVideoPageState();
}
class _PlayVideoPageState extends State<PlayVideoPage> {
late YoutubePlayerController _controller;
bool clicked = true;
// late TextEditingController _idController;
// late TextEditingController _seekToController;
......@@ -60,28 +64,143 @@ class _PlayVideoPageState extends State<PlayVideoPage> {
@override
Widget build(BuildContext context) {
return
YoutubePlayerBuilder(
onExitFullScreen: () {
SystemChrome.setPreferredOrientations(DeviceOrientation.values);
},
player: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
progressIndicatorColor: Colors.blueAccent,
// onReady: () {
// _isPlayerReady = true;
// },
// onEnded: (data) {
// _controller
// .load(_ids[(_ids.indexOf(data.videoId) + 1) % _ids.length]);
// },
),
builder: (context, player) => Scaffold(
appBar: AppBar(title: Text(YoutubePlayer.convertUrlToId(widget.link).toString()),),
body: Container(child: player),
),
);
return Scaffold(
appBar: AppBar(title: Text(YoutubePlayer.convertUrlToId(widget.link).toString())),
body: Column(
children: [
Container(
decoration: const BoxDecoration(
color: AppColors.orange,
),
height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.3,
width: double.maxFinite,
child: YoutubePlayerBuilder(
onExitFullScreen: () {
SystemChrome.setPreferredOrientations(DeviceOrientation.values);
},
player: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
progressIndicatorColor: Colors.blueAccent,
// onReady: () {
// _isPlayerReady = true;
// },
// onEnded: (data) {
// _controller
// .load(_ids[(_ids.indexOf(data.videoId) + 1) % _ids.length]);
// },
),
builder: (context, player) => Container(child: player)),
),
Column(children: [
DefaultTabController(
length: 6,
child: TabBar(
indicatorColor: AppColors.primary,
onTap: (index) {
},
tabs: [
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(0),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: const Text('Bai Giang',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: const Text('Vo Viet',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: Text('Bai Tap',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: Text('Dap An',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: Text('ViDeo',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
Tab(
child: Container(
alignment: Alignment.center,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
//color: clicked==true?AppColors.orange:AppColors.primary
),
child: Text('Thao Luan',style: TextStyle(color: AppColors.primary_light,fontSize: 10),
softWrap: false,
maxLines: 1,
overflow: TextOverflow.ellipsis)
),
),
]),
),
Container(
decoration: const BoxDecoration(
color: AppColors.white,
),
height: checkLandscape(context)?getHeight(context)*0.6:getHeight(context)*0.5,
width: double.maxFinite,
)
],)
],),
);
}
}
......@@ -7,6 +7,7 @@ import 'package:ongbut_ntmanh/app/module/school/model/list_data.dart';
import 'package:ongbut_ntmanh/const/colors.dart';
import '../../../../res/images/images.dart';
import '../../../../widgets/widgets_util.dart';
import '../../../ui/search_page.dart';
import '../../coursedetail/widgets/course_detail.dart';
import '../bloc/school_bloc.dart';
......@@ -65,7 +66,7 @@ class SchoolWidget extends StatelessWidget {
onData!(listData);
return
Swiper(
itemHeight: 340,
itemHeight: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.4,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
......@@ -88,7 +89,7 @@ class SchoolWidget extends StatelessWidget {
borderRadius: BorderRadius.circular(8.0),
child:
Image.network(listData[index].image!,
fit: BoxFit.fill,height: 200,width: double.maxFinite,
fit: BoxFit.fill,height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.28,width: double.maxFinite,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
......@@ -117,7 +118,7 @@ class SchoolWidget extends StatelessWidget {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!),
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].name!,listData[index].image!),
)).then((value) {
if (value != null && value is bool && value) {}
......
import 'package:flutter/material.dart';
import 'package:ongbut_ntmanh/widgets/widgets_util.dart';
import '../../../const/colors.dart';
class AccountPage extends StatelessWidget {
const AccountPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold(body: Text('AccountPage'),);
return Scaffold(
body:
Column(children: [
Container(
height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.25,
width: double.maxFinite,
decoration: const BoxDecoration(
color: AppColors.primary_light,
),
),
Container(
height: checkLandscape(context)?getHeight(context)*0.5:getHeight(context)*0.6,
width: double.infinity,
decoration: const BoxDecoration(
color: AppColors.orange,
),
),
],)
);
}
}
......@@ -69,6 +69,7 @@ class _HomePageState extends State<HomePage> {
],
),
);
}
Container buildAppBar() {
return Container(
......@@ -151,7 +152,6 @@ class _HomePageState extends State<HomePage> {
children: [
Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(10, 20, 10, 10),
child: Stack(
......
......@@ -50,7 +50,7 @@ class SearchWidget extends StatelessWidget {
maxCrossAxisExtent: 350,
mainAxisSpacing: 0,
crossAxisSpacing: 0,
childAspectRatio: 0.65,
childAspectRatio: 0.62,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
......@@ -84,7 +84,7 @@ Widget _courseList( listData, BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData.courseId!,listData.image!=null?listData.image!:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG'),
builder: (_) => CourseDetailWidget(listData.courseId!,listData.name!,listData.image!=null?listData.image!:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG'),
)
);
// .then((value) {
......
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