|
@@ -25,8 +25,8 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
_RRMultiSelectedState();
|
|
|
final String _value = '';
|
|
|
String? _selectedItemView = '';
|
|
|
- List<String>? _items = [];
|
|
|
- final List<String>? _selectedItems = [];
|
|
|
+ List<String> _items = [];
|
|
|
+ List<String> _selectedItems = [];
|
|
|
double _width = 0.0;
|
|
|
MulitiSelectedInfo? _mulitiSelectedInfo;
|
|
|
|
|
@@ -66,7 +66,7 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
}
|
|
|
|
|
|
List<DropdownMenuItem<String>> buildItems() {
|
|
|
- return _items!.map((String e) {
|
|
|
+ return _items.map((String e) {
|
|
|
final active = e == _value;
|
|
|
return DropdownMenuItem<String>(
|
|
|
child: _OptionRow(
|
|
@@ -76,41 +76,39 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
height: 22,
|
|
|
onTap: () {
|
|
|
setState(() {
|
|
|
- if (_selectedItems!.contains(e)) {
|
|
|
- _selectedItems!.remove(e);
|
|
|
- } else {
|
|
|
- _selectedItems!.add(e);
|
|
|
- }
|
|
|
- String text = '';
|
|
|
- for (var element in _selectedItems!) {
|
|
|
- final index = _selectedItems!.indexOf(element);
|
|
|
- if (index > 0) {
|
|
|
- text = text + ',' + element;
|
|
|
- } else if (index == 0) {
|
|
|
- text = element;
|
|
|
- } else if (_selectedItems!.isEmpty) {
|
|
|
- text = '';
|
|
|
- }
|
|
|
- }
|
|
|
- _selectedItemView = text;
|
|
|
- final width = TextSizeConvert.getTextSize(text, _textStyle).width;
|
|
|
- if (_width < width - 25) {
|
|
|
- // _width = width - 25;
|
|
|
- }
|
|
|
+ _onSelectedItem(e);
|
|
|
});
|
|
|
if (_mulitiSelectedInfo != null) {
|
|
|
_mulitiSelectedInfo!.selectedItems = _selectedItems;
|
|
|
}
|
|
|
},
|
|
|
- isSelected: _selectedItems!.contains(e),
|
|
|
+ isSelected: _selectedItems.contains(e),
|
|
|
),
|
|
|
value: e,
|
|
|
);
|
|
|
}).toList();
|
|
|
}
|
|
|
|
|
|
+ _onSelectedItem(String value) {
|
|
|
+ setState(() {
|
|
|
+ if (_selectedItems.contains(value)) {
|
|
|
+ _selectedItems.remove(value);
|
|
|
+ } else {
|
|
|
+ _selectedItems.add(value);
|
|
|
+ }
|
|
|
+ String text = '';
|
|
|
+ _getSelectedItems();
|
|
|
+ final width =
|
|
|
+ TextSizeConvert.getTextSize(_selectedItemView ?? '', _textStyle)
|
|
|
+ .width;
|
|
|
+ if (_width < width - 25) {
|
|
|
+ // _width = width - 25;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
Widget _buildDropdownButton() {
|
|
|
- if (_items!.isEmpty) {
|
|
|
+ if (_items.isEmpty) {
|
|
|
return const SizedBox();
|
|
|
}
|
|
|
var buttonDecoration = BoxDecoration(
|
|
@@ -140,7 +138,7 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
buttonDecoration: buttonDecoration,
|
|
|
offset: const Offset(0, -4),
|
|
|
selectedItemHighlightColor: Theme.of(context).secondaryHeaderColor,
|
|
|
- selectedItemBuilder: (_) => _selectedItems!.map((e) {
|
|
|
+ selectedItemBuilder: (_) => _selectedItems.map((e) {
|
|
|
return SizedBox(
|
|
|
width: _width - 34,
|
|
|
child: Text(
|
|
@@ -161,10 +159,19 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
final multiSelected = widget.multiSelected;
|
|
|
final selectInfo = ReportInfo.instance.getElementInfo(multiSelected);
|
|
|
if (selectInfo != null && _mulitiSelectedInfo != selectInfo) {
|
|
|
+ if (_mulitiSelectedInfo != null) {
|
|
|
+ _mulitiSelectedInfo!.onSelectedChange.dispose();
|
|
|
+ }
|
|
|
_mulitiSelectedInfo = selectInfo as MulitiSelectedInfo;
|
|
|
+ _mulitiSelectedInfo!.onSelectedChange.addListener((sender, e) {
|
|
|
+ setState(() {
|
|
|
+ _selectedItems = e;
|
|
|
+ _getSelectedItems();
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
if (multiSelected.items!.isNotEmpty) {
|
|
|
- _items = multiSelected.items;
|
|
|
+ _items = multiSelected.items!;
|
|
|
}
|
|
|
_width = PtToPxConverter.ptToPx(multiSelected.lineWidth);
|
|
|
final fontColor = multiSelected.fontColor ?? RTColor.Black;
|
|
@@ -174,6 +181,21 @@ class _RRMultiSelectedState extends State<RMultiSelected> {
|
|
|
fontSize: PtToPxConverter.ptToPx(multiSelected.fontSize),
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ void _getSelectedItems() {
|
|
|
+ String text = '';
|
|
|
+ for (var element in _selectedItems) {
|
|
|
+ final index = _selectedItems.indexOf(element);
|
|
|
+ if (index > 0) {
|
|
|
+ text = text + ',' + element;
|
|
|
+ } else if (index == 0) {
|
|
|
+ text = element;
|
|
|
+ } else if (_selectedItems.isEmpty) {
|
|
|
+ text = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ _selectedItemView = text;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class _OptionRow extends StatefulWidget {
|