import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class CustomTabSelector extends StatefulWidget { final List options; final int initialIndex; final ValueChanged onChanged; const CustomTabSelector({ Key? key, required this.options, required this.initialIndex, required this.onChanged, }) : super(key: key); @override _CustomTabSelectorState createState() => _CustomTabSelectorState(); } class _CustomTabSelectorState extends State { late int _selectedIndex; @override void initState() { super.initState(); _selectedIndex = widget.initialIndex; } @override Widget build(BuildContext context) { return Container( alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage("sc_images/room/sc_icon_red_envelope_config_tab_bg.png"), fit: BoxFit.fill, ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: widget.options.asMap().entries.map((entry) { final index = entry.key; final title = entry.value; final isSelected = index == _selectedIndex; return GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { setState(() { _selectedIndex = index; }); widget.onChanged(index); }, child: Container( width: 72.w, height: 32.w, decoration: isSelected ? BoxDecoration( image: DecorationImage( image: AssetImage( "sc_images/room/sc_icon_red_envelope_config_tab_item_bg.png", ), fit: BoxFit.fill, ), ) : null, child: Container( alignment: Alignment.center, child: Text( title, textAlign: TextAlign.center, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( color: Colors.white, fontSize: isSelected ? 15.sp : 13.sp, fontFamily: 'MyCustomFont', fontWeight: isSelected ? FontWeight.w600 : FontWeight.w500, ), ), ), ), ); }).toList(), ), ); } }