Home > Blockchain >  ExpansionPanelList.radio icon color
ExpansionPanelList.radio icon color

Time:08-25

Is there any way to change the color of the icon in ExpansionPanelList.radio? Right now it's grey and it's not visible because the background is grey as well...

ExpansionPanelList.radio(
            expandedHeaderPadding: const EdgeInsets.only(bottom: 5),
            dividerColor: secondaryColor,
            children: widget.items
                .map(
                  (item) => ExpansionPanelRadio(
                      canTapOnHeader: true,
                      headerBuilder: (context, isExpanded) => ListTile(
                            title: Text(
                              item.name,
                              style: defTextStyle,
                            ),
                          ),
                      body: Column(
                        children: [],
                      ),
                      value: item.name),
                )
                .toList(),
          ),

CodePudding user response:

you would need to change this in the item itself. I'm a little confused since I don't see an Icon in anywhere in your code. If you put a ListTile in the body, you can pass your Icon to the trailing parameter like so;

widget.items.map<ExpansionPanelRadio>((Item item) {
    return ExpansionPanelRadio(
        value: item.id,
        headerBuilder: (BuildContext context, bool isExpanded) {
          return ListTile(
            title: Text(item.headerValue),
          );
        },
        body: ListTile(
            title: Text(item.expandedValue),
            subtitle:
                const Text('To delete this panel, tap the trash can icon'),
            trailing: const Icon(Icons.delete),
            onTap: () {
              setState(() {
                _data
                    .removeWhere((Item currentItem) => item == currentItem);
              });
            }));
  }).toList(),

Perhaps something similar to this approach is what you are looking for?

CodePudding user response:

The value is hard-coded, radio tile doesn't takes any argument for it. line 360-368

       Widget expandIconContainer = Container(
        margin: const EdgeInsetsDirectional.only(end: 8.0),
        child: ExpandIcon(
          /// color: you can include color here and pass from constructor. make sure to import material
          isExpanded: _isChildExpanded(index),
          padding: const EdgeInsets.all(16.0),
          onPressed: !child.canTapOnHeader
              ? (bool isExpanded) => _handlePressed(isExpanded, index)
              : null,
        ),
      );

And the color of ExpandIcon depends on ThemeData.brightness, if you dont pass color to it.

  Color get _iconColor {
    if (widget.isExpanded && widget.expandedColor != null) {
      return widget.expandedColor!;
    }

    if (widget.color != null) {
      return widget.color!;
    }

    switch(Theme.of(context).brightness) {
      case Brightness.light:
        return Colors.black54;
      case Brightness.dark:
        return Colors.white60;
    }
  }

the color is passing hard-coded from here to the IconButton. The solution I think of now, create a local file and adding color on expandIconContainer(1st part)

CodePudding user response:

You can always copy the whole expansion_panel.dart into file in your project as custom_expansion_panel.dart. Import it to your file like import '../custom_expansion_panel' as custom. Now in the custom_ file add a parameter Color expansionIconColor; then ctrl f search for 'expandIcon' and it has a color parameter. Just assign expansionIconColor to it and voila, you can pass custom icon color to it.

Use the custom class like: custom.ExpansionPanelList.radio(...

If you want I can create a gist or code snippet for custom expansion panel list.

You can always look at this post for reference- they had similar issue.

  • Related