import 'package:flutter/material.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; class SingleStatusMenu extends StatefulWidget { final List statuses; final Lookup initialStatus; final Function(Lookup) onSelect; const SingleStatusMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key); @override _SingleStatusMenuState createState() => _SingleStatusMenuState(); } class _SingleStatusMenuState extends State { Lookup _selectedStatus; @override void setState(VoidCallback fn) { if(mounted) super.setState(fn); } @override void didUpdateWidget(covariant SingleStatusMenu oldWidget) { if(widget.initialStatus != null ){ final result = widget.statuses?.where( (element) { return element == widget.initialStatus; }); if(result.isNotEmpty) { _selectedStatus =result.first; }else{ _selectedStatus =null; } if((widget.initialStatus?.id??"") != (_selectedStatus?.id??"")) { widget.onSelect(_selectedStatus); } } else { _selectedStatus = null; } super.didUpdateWidget(oldWidget); } @override void initState() { if(widget.initialStatus != null){ final result = widget.statuses?.where( (element) { return element == widget.initialStatus; }); if(result.isNotEmpty) _selectedStatus = result.first; if(widget.initialStatus.id != _selectedStatus?.id) { widget.onSelect(_selectedStatus); } } super.initState(); } @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: AColors.inputFieldBackgroundColor, border: Border.all( color: Color(0xffefefef), ), borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), // boxShadow: const [ // AppStyle.boxShadow // ] ), child: DropdownButton( value: _selectedStatus, iconSize: 24, icon: Icon(Icons.keyboard_arrow_down_rounded), elevation: 0, isExpanded: true, hint: Text( "Select", style: Theme.of(context).textTheme.subtitle1, ), style: TextStyle(color: Theme.of(context).primaryColor), underline: SizedBox.shrink(), onChanged: (Lookup newValue) { setState(() { _selectedStatus = newValue; }); widget.onSelect(newValue); }, items: widget.statuses .map>((Lookup value) { return DropdownMenuItem( value: value, child: Text( value.name, style: Theme.of(context).textTheme.subtitle1.copyWith( color: Theme.of(context).primaryColor, fontSize: 11, //fontWeight: FontWeight.bold ), ), ); }).toList(), ), ); } }