Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter Bottomsheet Modal not rerendering

Tags:

flutter

dart

On my grid items when I click, it opens a ModalBottomSheet and listed with filter chips of strings. When you click a filter chip value, the value is updated but the widget does not re-render. The app is a StatefulWidget.

I have called the function setState.

What I expect is filterchips becomes checked and unchecked on selection.

void _showBottom(index){
    showModalBottomSheet<void>(
        context: context,

        builder: (BuildContext context){
          return new Container(
            padding: new EdgeInsets.all(27.0),
            child: new Column(
              children: <Widget>[                
                new Text('Some headline', style: new TextStyle(  fontWeight: FontWeight.bold, fontSize: 22),),
                getFilterChipsWidgets(index),
              ],
            ),
          );
        }
    );
  }


Widget getFilterChipsWidgets(index)
  {
    List<Widget> tags_list = new List<Widget>();
      for(var i=0; i<list[index]["tags"].length; i++) {       
        var _isSelected = true;

        FilterChip item = new FilterChip(
          label: Text("Filtertext",), 
          selected: _isSelected,
          onSelected: (bool newValue) {            
            setState(() {
              _isSelected = !_isSelected;
              debugPrint(_isSelected.toString());
            });
          },
        );
        tags_list.add(item);       
      }
      return new Row(children: tags_list);
   }
like image 916
Niru Avatar asked Nov 05 '25 04:11

Niru


1 Answers

You need to add height for the root node of the bottom sheet. So change your container to have a fixed height.

 Container(
     height: 300.0, // Add height
     padding: new EdgeInsets.all(27.0),
     child: new Column(
       children: <Widget>[                
          new Text('Some headline', 
               style: new TextStyle(fontWeight: FontWeight.bold, fontSize: 22),),
                getFilterChipsWidgets(index),
              ],
            ),

I usually calculate this dynamically based on the widgets I'm passing in. But this should get you started.

Edit

The comment I gave below was the actual answer.

You should wrap all the widgets in the bottom sheet into it's own stateful widget and set your values in there.

like image 124
Filled Stacks Avatar answered Nov 07 '25 05:11

Filled Stacks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!