Commit b9fe2174 authored by NguyenTienManh's avatar NguyenTienManh

update 16-2

parent c0c1c56e
......@@ -18,120 +18,112 @@ class CourseWidget extends StatelessWidget {
List<ListData> listData = [];
@override
Widget build(BuildContext context) {
BlocProvider.of<CourseBloc>(context).add(
RequestCourse(context: context));
return
BlocConsumer<CourseBloc, CourseState>(
listener: (context, state) async {},
builder: (context, state) {
return Container(
color: AppColors.background,
child: Column(
return Container(
color: AppColors.background,
child: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('Tham Gia Khoa Hoc Thu',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton(
child: const Text('Xem Them>>'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => SearchWidget(),
const Text('Tham Gia Khoa Hoc Thu',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton(
child: const Text('Xem Them>>'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => SearchWidget(),
)).then((value) {
if (value != null && value is bool && value) {}
});
}
)
],
),
),
BlocBuilder<CourseBloc, CourseState>(
builder: (context, state) {
if(state is CourseInitial){
const CircularProgressIndicator();
}
if(state is CourseLoading){
return const CircularProgressIndicator();
}
if(state is CourseFailed){
return Text(state.message.toString());
}
if(state is CourseSuccess){
listData = state.courseModel.data!.listData!;
)).then((value) {
if (value != null && value is bool && value) {}
});
}
)
],
),
),
BlocBuilder<CourseBloc, CourseState>(
builder: (context, state) {
if(state is CourseInitial){
const CircularProgressIndicator();
}
if(state is CourseLoading){
return const CircularProgressIndicator();
}
if(state is CourseFailed){
return Text(state.message.toString());
}
if(state is CourseSuccess){
listData = state.courseModel.data!.listData!;
return
Swiper(
itemHeight: 340,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
itemBuilder: (BuildContext context, int index) {
return
Swiper(
itemHeight: 340,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
itemBuilder: (BuildContext context, int index) {
return
Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
color: AppColors.primary,
spreadRadius: 1,
),
],
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Column(children: [
Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
color: AppColors.primary,
spreadRadius: 1,
),
],
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Column(children: [
ClipRRect(
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,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
},
),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].type!),
//Text('abc'),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].name!),
),
],),
);
},
ClipRRect(
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,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
},
),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].type!),
//Text('abc'),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].name!),
),
],),
);
},
itemCount: listData.length,
onTap: (index){
itemCount: listData.length,
onTap: (index){
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!=null?listData[index].image!
:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG'),
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!=null?listData[index].image!
:'https://oss.myitsol.com/imes-public/2022/12/11/neymar_145527553.PNG'),
)).then((value) {
if (value != null && value is bool && value) {}
});
},
)).then((value) {
if (value != null && value is bool && value) {}
});
},
);
}
return const Text('CourseFailed');
}
)
],
),
);
}
);
);
}
return const Text('CourseFailed');
}
)
],
),
);
}
}
......@@ -14,29 +14,23 @@ String lessonID;
BlocProvider.of<LessonBloc>(context).add(
RequestLesson(context: context, lessonID: lessonID));
return
BlocConsumer<LessonBloc, LessonState>(
listener: (context, state) async {},
BlocBuilder<LessonBloc, LessonState>(
builder: (context, state) {
return
BlocBuilder<LessonBloc, LessonState>(
builder: (context, state) {
if(state is LessonInitial){
return const Text('LessonInitial');
}
if(state is LessonFailed){
return const Text('LessonFailed');
}
if(state is LessonLoading){
return const CircularProgressIndicator();
}
if(state is LessonSuccess){
return
PlayVideoPage(link: state.lessonModel.data!.length>3?state.lessonModel.data![3].playlist![0].link!:'ES1NU-uwX-Q');
// state.lessonModel.data!.length>3?PlayVideoPage(link: state.lessonModel.data![3].playlist![0].link!):const Text('Xin Loi khong co Video');
}
return const Text('NewFailed');
}
);
if(state is LessonInitial){
return const CircularProgressIndicator();
}
if(state is LessonFailed){
return const Text('LessonFailed');
}
if(state is LessonLoading){
return const CircularProgressIndicator();
}
if(state is LessonSuccess){
return
PlayVideoPage(link: state.lessonModel.data!.length>3?state.lessonModel.data![3].playlist![0].link!:'ES1NU-uwX-Q');
// state.lessonModel.data!.length>3?PlayVideoPage(link: state.lessonModel.data![3].playlist![0].link!):const Text('Xin Loi khong co Video');
}
return const Text('NewFailed');
}
);
}
......
......@@ -2,14 +2,14 @@ import 'package:flutter/material.dart';
import '../model/login_model.dart';
class LoginDetailsPage extends StatelessWidget {
LoginModel loginModels;
LoginDetailsPage(this.loginModels, {Key? key}) : super(key: key);
class LoginDetailPage extends StatelessWidget {
LoginDetailPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Details!')),
body: Text(loginModels.session_state),
body: Text("acssea"),
);
}
}
......@@ -15,94 +15,102 @@ class LoginPage extends StatelessWidget {
return
BlocConsumer<LoginBloc, LoginState>(
listener: (context, state) async {
// if(state is LoginSuccess){
// _userController.text='';
// _passController.text='';
// }
// hàm sẽ đc gọi mỗi khi có sự thay đổi state của Bloc.ví dụ:
// if(state is MyStateSuccess){
// // Thực hiện hành động
// }
},
builder: (context, state) {
return
Container(
color: AppColors.background,
child: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Text('Dang Ky & Tu Van',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 16),),
],
),
),
Padding(
padding: const EdgeInsets.only(left: 60, right: 60),
child:
TextFormField(
decoration: const InputDecoration(
labelText: 'Product Name',
),
controller: _userController,
),
),
Padding(
padding: const EdgeInsets.only(left: 60, right: 60),
child:
TextFormField(
decoration: const InputDecoration(
labelText: 'PassWord',
),
controller: _passController,
),
),
return _buildUI(context);
},
);
}
}
Padding(
padding: const EdgeInsets.all(20.0),
child: OutlinedButton(
style: OutlinedButton.styleFrom(
minimumSize: const Size.fromHeight(50),
backgroundColor: AppColors.primary,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
onPressed: () async {
BlocProvider.of<LoginBloc>(context).add(
RequestLogin(
context: context,
username: _userController.text,
password: _passController.text));
},
child: Text("Dang Nhap".toUpperCase(),
style: const TextStyle(
color: AppColors.white,
fontWeight: FontWeight.bold),)
Widget _buildUI(BuildContext context){
return
Container(
color: AppColors.background,
child: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Text('Dang Ky & Tu Van',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 16),),
],
),
),
Padding(
padding: const EdgeInsets.only(left: 60, right: 60),
child:
TextFormField(
decoration: const InputDecoration(
labelText: 'Product Name',
),
controller: _userController,
),
),
Padding(
padding: const EdgeInsets.only(left: 60, right: 60),
child:
TextFormField(
decoration: const InputDecoration(
labelText: 'PassWord',
),
controller: _passController,
),
),
Padding(
padding: const EdgeInsets.all(20.0),
child: OutlinedButton(
style: OutlinedButton.styleFrom(
minimumSize: const Size.fromHeight(50),
backgroundColor: AppColors.primary,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
if (state is LoginLoading) {
return const CircularProgressIndicator();
}
if (state is LoginFailed) {
return const Text('login false!');
}
if (state is LoginInitial) {
return
const Text('LoginInitial');
}
if (state is LoginSuccess) {
return
const Text('Dang Nhap Thanh Cong');
}
return const CircularProgressIndicator();
}),
],
onPressed: () async {
BlocProvider.of<LoginBloc>(context).add(
RequestLogin(
context: context,
username: _userController.text,
password: _passController.text));
},
child: Text("Dang Nhap".toUpperCase(),
style: const TextStyle(
color: AppColors.white,
fontWeight: FontWeight.bold),)
),
);
},
),
BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
if (state is LoginLoading) {
return const CircularProgressIndicator();
}
if (state is LoginFailed) {
return const Text('login false!');
}
if (state is LoginInitial) {
return
const Text('LoginInitial');
}
if (state is LoginSuccess) {
return
const Text('Dang Nhap Thanh Cong');
}
return const CircularProgressIndicator();
}),
],
),
);
}
}
This diff is collapsed.
......@@ -3,38 +3,85 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
class PlayVideoPage extends StatelessWidget {
class PlayVideoPage extends StatefulWidget {
String link;
PlayVideoPage({required this.link,Key? key}) : super(key: key);
@override
State<PlayVideoPage> createState() => _PlayVideoPageState();
}
class _PlayVideoPageState extends State<PlayVideoPage> {
late YoutubePlayerController _controller;
// late TextEditingController _idController;
// late TextEditingController _seekToController;
// final List<String> _ids = [
// 'nPt8bK2gbaU',
// ];
@override
void initState() {
super.initState();
_controller =
YoutubePlayerController(
// initialVideoId: "nPt8bK2gbaU",
// initialVideoId: widget.link,
initialVideoId: YoutubePlayer.convertUrlToId(widget.link).toString(),
flags: const YoutubePlayerFlags(
mute: false,
autoPlay: true,
disableDragSeek: false,
loop: false,
isLive: false,
forceHD: false,
enableCaption: true,
),
);
}
@override
void deactivate() {
// Pauses video while navigating to next page.
_controller.pause();
super.deactivate();
}
@override
void dispose() {
_controller.dispose();
// _idController.dispose();
// _seekToController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_controller = YoutubePlayerController(
initialVideoId: YoutubePlayer.convertUrlToId(link).toString(),
flags: const YoutubePlayerFlags(
mute: false,
autoPlay: true,
disableDragSeek: false,
loop: false,
isLive: false,
forceHD: false,
enableCaption: true,
),
);
return
YoutubePlayerBuilder(
onExitFullScreen: () {SystemChrome.setPreferredOrientations(DeviceOrientation.values);},
player: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
progressIndicatorColor: Colors.blueAccent,
),
builder: (context, player) => Scaffold(
appBar: AppBar(title: Text(YoutubePlayer.convertUrlToId(link).toString()),),
body: Container(child: player),
),
);
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),
),
);
}
}
......@@ -22,125 +22,116 @@ class SchoolWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
BlocProvider.of<SchoolBloc>(context).add(
RequestSchool(context: context));
return
BlocConsumer<SchoolBloc, SchoolState>(
listener: (context, state) async {},
builder: (context, state) {
return Container(
color: AppColors.background,
child: Column(
return Container(
color: AppColors.background,
child: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
const Text('Tham Gia Khoa Hoc Thu',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton(
child: Text('Xem Them >>'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => SearchWidget(),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('Tham Gia Khoa Hoc Thu',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),),
TextButton(
child: Text('Xem Them >>'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => SearchWidget(),
)).then((value) {
if (value != null && value is bool && value) {}
});
}
)
],
),
),
BlocBuilder<SchoolBloc, SchoolState>(
builder: (context, state) {
if(state is SchoolInitial){
return const Text('SchoolInitial');
}
if(state is SchoolFailed){
const CircularProgressIndicator();
return Text(state.message.toString());
}
if(state is SchoolLoading){
return const CircularProgressIndicator();
}
if(state is SchoolSuccess){
listData = state.schoolModel.data!.listData!;
onData!(listData);
return
Swiper(
itemHeight: 340,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
)).then((value) {
if (value != null && value is bool && value) {}
});
}
)
],
),
),
BlocBuilder<SchoolBloc, SchoolState>(
builder: (context, state) {
if(state is SchoolInitial){
return const Text('SchoolInitial');
}
if(state is SchoolFailed){
const CircularProgressIndicator();
return Text(state.message.toString());
}
if(state is SchoolLoading){
return const CircularProgressIndicator();
}
if(state is SchoolSuccess){
listData = state.schoolModel.data!.listData!;
onData!(listData);
itemBuilder: (BuildContext context, int index) {
return
Swiper(
itemHeight: 340,
itemWidth: double.maxFinite,
layout: SwiperLayout.TINDER,
itemBuilder: (BuildContext context, int index) {
return
Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
color: AppColors.primary,
spreadRadius: 1,
),
],
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Column(children: [
Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
color: AppColors.primary,
spreadRadius: 1,
),
],
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Column(children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child:
Image.network(listData[index].image!,
fit: BoxFit.fill,height: 200,width: double.maxFinite,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
},
),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].type!),
//Text('abc'),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].name!),
//Text('123'),
),
],),
);
},
ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child:
Image.network(listData[index].image!,
fit: BoxFit.fill,height: 200,width: double.maxFinite,
errorBuilder: (BuildContext context, Object exception,
StackTrace? stackTrace) {
return Image.asset(Images.load_err);
},
),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].type!),
//Text('abc'),
),
Padding(
padding: const EdgeInsets.all(10.0),
child:
Text(listData[index].name!),
//Text('123'),
),
],),
);
},
itemCount: listData.length,
onTap: (index){
itemCount: listData.length,
onTap: (index){
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!),
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CourseDetailWidget(listData[index].courseId!,listData[index].image!),
)).then((value) {
if (value != null && value is bool && value) {}
});
},
)).then((value) {
if (value != null && value is bool && value) {}
});
},
);
}
return const Text('SchoolFailed');
}
)
],
),
);
}
);
);
}
return const Text('SchoolFailed');
}
)
],
),
);
}
}
......
......@@ -48,15 +48,15 @@ class MainBloc {
BlocProvider<CounterBloc>(
create: (BuildContext context) => CounterBloc()),
BlocProvider<CourseBloc>(
create: (BuildContext context) => CourseBloc()),
create: (BuildContext context) => CourseBloc()..add(RequestCourse(context: context))),
BlocProvider<SchoolBloc>(
create: (BuildContext context) => SchoolBloc()),
create: (BuildContext context) => SchoolBloc()..add(RequestSchool(context: context))),
BlocProvider<LoginBloc>(
create: (BuildContext context) => LoginBloc()),
BlocProvider<NewBloc>(
create: (BuildContext context) => NewBloc()),
create: (BuildContext context) => NewBloc()..add(RequestNew(context: context))),
BlocProvider<CommentBloc>(
create: (BuildContext context) => CommentBloc()),
create: (BuildContext context) => CommentBloc()..add(RequestComment(context: context))),
BlocProvider<CourseDetailBloc>(
create: (BuildContext context) => CourseDetailBloc()),
BlocProvider<LessonBloc>(
......
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