'Full width material-ui Button within a Badge?

I have a Button inside a Grid and was using fullWidth to expand it to fill the container.

This worked fine, until I wrapped it in a Badge. Now the fullWidth property is ignored and the button is default width.

Worked fine:

<Button variant={"outlined"} color={"secondary"} fullWidth>
    Todo
</Button>

Now not working:

<Badge badgeContent={4} color={"secondary"}>
    <Button variant={"outlined"} color={"secondary"} fullWidth>
        Todo
    </Button>
</Badge>

How can I get the button to expand to fill its parent?

import React, {Component} from 'react';
import Grid from "@material-ui/core/Grid/Grid";
import Button from "@material-ui/core/Button/Button";
import Badge from "@material-ui/core/Badge/Badge";


export default class App extends Component {
    render() {
        return (

            <Grid container style={{margin: 10}}>
                <Grid item xs={2}>

                    <Badge badgeContent={4} color={"secondary"}>
                        <Button variant={"outlined"} color={"secondary"} fullWidth>
                            Todo badge
                        </Button>
                    </Badge>

                    <Button variant={"outlined"} color={"secondary"} fullWidth>
                        Todo no badge
                    </Button>
                </Grid>
                <Grid item xs={10}>

                </Grid>
            </Grid>
        );
    }
};


Solution 1:[1]

you have to apply fullWidth property to badge

<Badge badgeContent={4} color={"secondary"} fullWidth>
    <Button variant={"outlined"} color={"secondary"}>
        Todo
    </Button>
</Badge>

Solution 2:[2]

I could come up with a solution using width CSS property:

here is my answer:

const styles = theme => ({
  margin: {
    margin: theme.spacing.unit * 2,
    width: '100%'
  }
});

function SimpleBadge(props) {
  const { classes } = props;
  return (
    <Grid container>
      <Grid item xs={11}>
      <Badge color="primary" badgeContent={4} className={classes.margin} >
        <Button variant="contained" fullWidth>Button</Button>
      </Badge>

      </Grid>
    </Grid>
  );
}

please find that I have used width: '100%' in badge styles.

here is a working example: https://codesandbox.io/s/wqm9kmxmql

hope this will help you.

Solution 3:[3]

One easy way is to use the sx prop on the Badge to set the width to '100%'.

<Badge sx={{ width: '100%' }} variant="dot" color="primary" badgeContent={1}>
  <Button fullWidth variant="contained"  color="neutral">
    Button
  </Button>
</Badge>

And make sure you have fullWidth set on the Button

Solution 4:[4]

Just add this property: fullWidth={true}

import { Button } from "@mui/material";
 <Button
          variant="contained"
          fullWidth={true}
          type="submit"
        >
          Click me
        </Button>

docs: https://mui.com/api/button/

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Arek C.
Solution 2 Nadun
Solution 3 Eric
Solution 4 Abdelrahman Tareq