import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:initial_folder/size_config.dart'; import 'package:initial_folder/theme.dart'; class Instruktur extends StatefulWidget { const Instruktur({ Key? key, required this.id, this.instructor, this.bio, this.rating, this.review, this.totalStudent, this.totalLesson, this.video = false, this.fotoProfile, this.headline, }) : super(key: key); final String id; final String? instructor; final String? bio; final String? rating; final String? review; final String? fotoProfile; final String? totalLesson; final String? totalStudent; final String? headline; final bool video; @override State createState() => _InstrukturState(); } class _InstrukturState extends State { bool isExpanded = false; @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Instruktur Kursus', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), ), const SizedBox(height: 10), Container( decoration: BoxDecoration( color: const Color(0xFF212121), borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 16), Container( margin: EdgeInsets.only(left: 10), child: CircleAvatar( radius: 40, backgroundColor: Colors.amber, backgroundImage: widget.fotoProfile == null ? AssetImage("assets/images/Profile Image.png") : NetworkImage(widget.fotoProfile!) as ImageProvider, ), ), const SizedBox(height: 8), Container( margin: EdgeInsets.only(left: 10), child: Text( widget.instructor ?? '', style: TextStyle(fontSize: 15), ), ), SizedBox(height: 2), widget.headline != null ? Container( margin: EdgeInsets.only(left: 10), child: Text( widget.headline!, style: TextStyle(fontSize: 13), ), ) : const SizedBox(), SizedBox(height: 10), Container( margin: EdgeInsets.only(left: 10), child: Row( children: [ RatingBarIndicator( itemSize: 11, rating: double.parse(widget.rating ?? '0'), direction: Axis.horizontal, itemCount: 5, itemBuilder: (context, _) => const FaIcon( FontAwesomeIcons.solidStar, color: Colors.amber, ), ), SizedBox(width: 4), Text( double.parse(widget.rating ?? '0').toString(), style: TextStyle(fontSize: 10), ), SizedBox(width: 4), Text( '(${widget.review ?? '0'})', style: TextStyle(fontSize: 10), ), ], ), ), Container( height: 40, margin: EdgeInsets.only(left: 10, top: 1), child: Row( children: [ Text( '${widget.totalStudent ?? '0'} Murid', style: primaryTextStyle.copyWith( color: secondaryColor, fontSize: getProportionateScreenWidth(10), letterSpacing: 0.5), ), SizedBox(width: 10), Text( '${widget.totalLesson ?? ''} Pelajaran', style: primaryTextStyle.copyWith( color: secondaryColor, fontSize: getProportionateScreenWidth(10), letterSpacing: 0.5), ) ], ), ), if (widget.bio == null || widget.bio!.isEmpty) Padding( padding: EdgeInsets.only( left: getProportionateScreenHeight(10), right: getProportionateScreenHeight(10), bottom: getProportionateScreenHeight(10)), child: Text( '*Instruktur belum mencantumkan profil*', style: TextStyle( fontSize: getProportionateScreenWidth(10), fontWeight: reguler, fontFamily: 'Noto Sans', color: secondaryColor, ), ), ) else Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only( left: getProportionateScreenHeight(5), right: getProportionateScreenHeight(10)), child: isExpanded ? Html( data: widget.bio, style: { "body": Style( fontSize: FontSize(12), fontWeight: reguler, fontFamily: 'Noto Sans', color: secondaryColor), }, ) : Html( data: widget.bio != null && widget.bio!.length > 200 ? widget.bio!.substring(0, 200) : widget.bio!, style: { "body": Style( fontSize: FontSize(12), fontWeight: reguler, fontFamily: 'Noto Sans', color: secondaryColor), }, ), ), if (widget.bio!.isNotEmpty && (widget.bio!.length > 70 || widget.bio!.length > 200)) Padding( padding: EdgeInsets.only( left: getProportionateScreenHeight(7)), child: TextButton( onPressed: () { setState(() { isExpanded = !isExpanded; }); }, child: Text( isExpanded ? 'Tampilkan Lebih Sedikit' : 'Tampilkan Lebih Banyak', style: primaryTextStyle.copyWith( fontWeight: semiBold, color: primaryColor, fontSize: getProportionateScreenWidth(12), ), ), ), ), ], ), ], ) ], ), ), const SizedBox(height: 30) ], ), ); } }