Files
Vocasia-LMS-Mobile-apps--TA…/lib/screens/detail_course/components/custom_tab_bar.dart

171 lines
5.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:initial_folder/models/detail_course_model.dart';
import 'package:initial_folder/providers/tab_provider.dart';
import 'package:initial_folder/screens/detail_course/components/aktifitas.dart';
import 'package:initial_folder/screens/detail_course/components/deskripsi.dart';
import 'package:initial_folder/screens/detail_course/components/tab_bar_items.dart';
import 'package:initial_folder/screens/detail_course/components/terkait.dart';
import 'package:initial_folder/screens/detail_course/components/ulasan.dart';
import 'package:initial_folder/size_config.dart';
import 'package:provider/provider.dart';
class CustomTabBar extends StatefulWidget {
const CustomTabBar({
Key? key,
required this.dataDetailCourseModel,
this.totalDuration,
this.bio,
this.instructor,
this.rating,
this.review,
this.totalLesson,
this.totalStudent,
this.fotoProfile,
this.headline,
this.resoaktifitas,
this.idCategory,
}) : super(key: key);
final DataDetailCourseModel dataDetailCourseModel;
final String? totalDuration,
bio,
instructor,
review,
totalLesson,
totalStudent,
fotoProfile,
rating,
headline,
resoaktifitas,
idCategory;
@override
State<CustomTabBar> createState() => _CustomTabBarState();
}
class _CustomTabBarState extends State<CustomTabBar> {
@override
Widget build(BuildContext context) {
TabProvider tab = Provider.of<TabProvider>(context);
void _onHorizontalDragEnd(DragEndDetails details) {
double velocity = details.primaryVelocity ?? 0.0;
if (velocity < 0) {
if (tab.currentIndex < 3) {
tab.currentIndex++;
}
} else if (velocity > 0) {
if (tab.currentIndex > 0) {
tab.currentIndex--;
}
}
}
Widget buildContent(int currentIndex) {
switch (currentIndex) {
case 0:
return Desksripsi(
dataDetailCourseModel: widget.dataDetailCourseModel,
video: true,
id: widget.dataDetailCourseModel.id,
instructor: widget.instructor,
bio: widget.bio,
rating: widget.rating,
fotoProfile: widget.fotoProfile,
review: widget.review,
totalLesson: widget.totalLesson,
totalStudent: widget.totalStudent,
headline: widget.headline,
);
case 1:
return Aktifitas(
id: widget.dataDetailCourseModel.id,
totalDuration: widget.totalDuration ?? '',
resoaktifitas: widget.resoaktifitas,
);
case 2:
return Ulasan(
id: widget.dataDetailCourseModel.id,
);
case 3:
return Terkait(
idCategory: widget.idCategory,
);
default:
return Desksripsi(
dataDetailCourseModel: widget.dataDetailCourseModel,
video: true,
id: widget.dataDetailCourseModel.id,
instructor: widget.instructor,
bio: widget.bio,
rating: widget.rating,
fotoProfile: widget.fotoProfile,
review: widget.review,
totalLesson: widget.totalLesson,
totalStudent: widget.totalStudent,
headline: widget.headline,
);
}
}
return Column(
children: [
Container(
width: SizeConfig.screenWidth,
height: getProportionateScreenHeight(29),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
spreadRadius: -12,
blurRadius: 8,
offset: Offset(0, getProportionateScreenHeight(12)),
),
],
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
GestureDetector(
onTap: () => tab.currentIndex = 0,
child: TabBarItems(
index: 0,
title: 'Deskripsi',
),
),
GestureDetector(
onTap: () => tab.currentIndex = 1,
child: TabBarItems(
index: 1,
title: 'Aktivitas',
),
),
GestureDetector(
onTap: () => tab.currentIndex = 2,
child: TabBarItems(
index: 2,
title: 'Ulasan',
),
),
GestureDetector(
onTap: () => tab.currentIndex = 3,
child: TabBarItems(
index: 3,
title: 'Terkait',
),
),
],
),
),
),
GestureDetector(
onHorizontalDragEnd: _onHorizontalDragEnd,
child: buildContent(tab.currentIndex),
),
],
);
}
}