I have a list of event name in a stateful widget like this

main.dart

class Fav extends StatefulWidget {
  @override
  _FavState createState() => _FavState();
}

class _FavState extends State<Fav> {
  final PageController ctrl = PageController(viewportFraction: 0.8);

  final Firestore db = Firestore.instance;
  Stream slides;

  var fav = ['3-Tech Event']; 
. 
.
.

And on another page, I want to add a string, let's say,

'5-Art Exhibit'

into the

var fav = ['3-Tech Event'];

to get the final result

fav = ['3-Tech Event', '5-Art Exhibit'];

on the page above. How do I do that? Here's my code for the button

Event.dart

class Star extends StatefulWidget {
      @override
      _StarState createState() => _StarState();
    }

    class _StarState extends State<Star> {
      Color _iconColor = Colors.grey;

      @override
      Widget build(BuildContext context) {
        return Container(
              padding: EdgeInsets.all(55.0),
              child: Transform.scale(
                scale: 2.0,
                  child: IconButton(
                      icon: Icon(
                        Icons.star,
                        color: _iconColor,
                      ),
                      onPressed: () {
                        setState(() {
                          _iconColor = (_iconColor == Colors.yellow) ?  Colors.grey : Colors.yellow;

                        });
                      })
              ),
        );
      }
    }

Thank you in advance!

UPDATE

I followed @Viren V Varasadiya advice and updated my code to this

main.dart

class Fav extends StatefulWidget {

  @override
  _FavState createState() => _FavState();
}

class _FavState extends State<Fav> {

  var fav = ['3-Tech Event'];
  updatedata(String item) {
    setState(() {
      fav.add(item);
    });
  }

And on the other file, I removed Star class (because it's intended to be used in another class anyway) and it looked like this

class Event extends StatefulWidget {
  final eventInfo;
  Event({Key key, List eventInfo})    //I have to pass a list of data to this 
      : this.eventInfo = eventInfo,   //page from another class
        super(key: key);

  final Function updatedata;
  Event.addToFavWith({this.updatedata});

  @override
  _EventState createState() => _EventState();
}

class _EventState extends State<Event> {
  Color _iconColor = Colors.grey;

  @override
  Widget build(BuildContext context) {
.
.
.
Container(                          //This used to be Container(child:Star())
          child: InkWell(
        child: Container(
          padding: EdgeInsets.all(55.0),
          child: Transform.scale(
              scale: 2.0,
              child: IconButton(
                  icon: Icon(
                    Icons.star,
                    color: _iconColor,
                  ),
                  onPressed: () {
                    setState(() {
                      _iconColor = (_iconColor == Colors.yellow)
                          ? Colors.grey
                          : Colors.yellow;
                      widget.updatedata(name);
                    });
                  })),
        ),
      )),

And now I get a couple of errors.

All final variables must be initialized, but 'eventInfo' is not. Try adding an initializer for the field.

All final variables must be initialized, but 'updatedata' is not. Try adding an initializer for the field.


Solution 1: Viren V Varasadiya

You have to create a function in parent widget and pass it to child widget and call it in child widget, we work for you.

Following minimal code help you more.

class DeleteWidget extends StatefulWidget {
  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();
}

class _DeleteWidgetState extends State<DeleteWidget> {
  var fav = ['3-Tech Event'];

  updatedata(String item) {
    setState(() {
      fav.add(item);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text(fav.toString()),
        Star(
          updatedata: updatedata,
        ),
      ],
    )));
  }
}

class Star extends StatefulWidget {
  final Function updatedata;
  Star({this.updatedata});
  @override
  _StarState createState() => _StarState();
}

class _StarState extends State<Star> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: RaisedButton(
          child: Text("add item"),
          onPressed: () {
            widget.updatedata('5-Art Exhibit');
          }),
    );
  }
}

Update:

There is no need to create named constructor.

class Event extends StatefulWidget {
  final eventInfo;
  Event({Key key, List eventInfo, this.updatedata})    //I have to pass a list of data to this 
      : this.eventInfo = eventInfo,   //page from another class
        super(key: key);

  final Function updatedata;

  @override
  _EventState createState() => _EventState();
}