import 'package:eatvio_app/features/diary/presentation/bloc/diary_cubit.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_svg/flutter_svg.dart'; class SatietyRatingWidget extends StatefulWidget { final double currentSelectedSatietyRating; const SatietyRatingWidget({ super.key, required this.currentSelectedSatietyRating, }); @override State createState() => _SatietyRatingWidgetState(); } class _SatietyRatingWidgetState extends State { @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(top: 24), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( 'Ваша сытость после приёма пищи', style: TextStyle( fontSize: 16, ), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SvgPicture.asset( 'assets/icons/satiety_emoji_left.svg', height: 32, width: 32, ), RatingBar.builder( initialRating: 3, itemCount: 6, itemSize: MediaQuery.of(context).size.width / 6 - (124 / 6), updateOnDrag: true, itemBuilder: (context, index) { switch (index) { case 0: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 1 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFFC82222), border: widget.currentSelectedSatietyRating == 1 ? Border.all( width: 2, color: Color(0xFFAA3333), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 1 ? BorderRadius.horizontal( left: Radius.circular(8), right: Radius.circular(2), ) : BorderRadius.horizontal( left: Radius.circular(8), ), ), ); case 1: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 2 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFFFF3E3E), border: widget.currentSelectedSatietyRating == 2 ? Border.all( width: 2, color: Color(0xFF550000), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 2 ? BorderRadius.circular(2) : null, ), ); case 2: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 3 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFFF8C926), border: widget.currentSelectedSatietyRating == 3 ? Border.all( width: 2, color: Color(0xFF8C5D00), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 3 ? BorderRadius.circular(2) : null, ), ); case 3: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 4 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFFFFF3BF), border: widget.currentSelectedSatietyRating == 4 ? Border.all( width: 2, color: Color(0xFFB5911B), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 4 ? BorderRadius.circular(2) : null, ), ); case 4: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 5 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFF62E833), border: widget.currentSelectedSatietyRating == 5 ? Border.all( width: 2, color: Color(0xFF276918), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 5 ? BorderRadius.circular(2) : null, ), ); default: return Container( width: MediaQuery.of(context).size.width / 6, height: 24, margin: widget.currentSelectedSatietyRating == 6 ? EdgeInsets.symmetric(horizontal: 2) : null, decoration: BoxDecoration( color: Color(0xFF4DCE20), border: widget.currentSelectedSatietyRating == 6 ? Border.all( width: 2, color: Color(0xFF184D12), strokeAlign: BorderSide.strokeAlignOutside, ) : null, borderRadius: widget.currentSelectedSatietyRating == 6 ? BorderRadius.horizontal( left: Radius.circular(2), right: Radius.circular(8), ) : BorderRadius.horizontal( right: Radius.circular(8), ), ), ); } }, onRatingUpdate: (value) => context.read().updateCurrentSelectedSatietyRating(value), ), SvgPicture.asset( 'assets/icons/satiety_emoji_right.svg', height: 32, width: 32, ), ], ), ], ), ); } }