Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter update state coming from another screen

I have two Screens. In the first one, there is a ListView. In the first element I display the value of the variable selectedObject.

When the ListTile is pressed, a second Screen is opened. I want to update the selectedObject value after returning from the second screen.

I need to assign the value of result to the selectedObject variable.

I think I have to call the setState method but I don't know how.

Here is my code:

class _FilterTaskState extends State<FilterTask> {
List taskList;

String selectedObject = "initial value";

@override
Widget build(BuildContext context) {
return new Scaffold(
  appBar: _buildAppBar(context, "AppBar Title"),
  body: Center(
    child: new ListView(
      children: <Widget>[
         new ListTile(
          leading: new Icon(Icons.home, color: Colors.black),
          title: new Text("Selected Object", style: styleTitle),
          subtitle: new Text(selectedObject),
          trailing: new Icon(Icons.play_arrow, color: Colors.black),
          onTap: () => _navigateToFilterObject(context),
        ),

        ...

      ],
     )
   ),
  );
 }
}


 _navigateToFilterObject(BuildContext context) async {
    final result = await Navigator.push(context, 
    MaterialPageRoute(builder: (context) => FilterObject()),);

    /// I want to set the 'selectedObject' value
    /// selectedObject = result;

}
like image 457
Ale Avatar asked Jan 28 '23 13:01

Ale


1 Answers

On your FilterObject widget returns the value when you select the item like this:

        Navigator.of(context).pop(theValueYouWantToReceive);

And you will get the result inside result variable:

final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => FilterObject()),);

Final code

     _navigateToFilterObject(BuildContext context) async {
            final result = await Navigator.push(context, 
            MaterialPageRoute(builder: (context) => FilterObject()),);
             //refresh the state of your Widget
                 setState(() {
              selectedObject = result;
            });

     }

_navigateToFilterObject must be inside your _FilterTaskState class

Read about Navigator pop : https://docs.flutter.io/flutter/widgets/Navigator/pop.html

like image 114
diegoveloper Avatar answered Mar 06 '23 02:03

diegoveloper