颤振更新状态来自另一个屏幕

时间:2018-08-18 23:37:01

标签: flutter setstate

我有两个屏幕。在第一个中,有一个ListView。在第一个元素中,我显示变量selectedObject的值。

按下ListTile时,将打开另一个屏幕。从第二个屏幕返回后,我想更新selectedObject的值。

我需要将result的值分配给selectedObject变量。

我认为我必须调用setState方法,但是我不知道如何。

这是我的代码:

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;

}

1 个答案:

答案 0 :(得分:4)

FilterObject小部件上,当您选择以下项目时,将返回值:

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

您将在result变量中获取结果:

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

最终密码

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

     }

_navigateToFilterObject必须在您的_FilterTaskState类中

了解有关Navigator pop的信息:https://docs.flutter.io/flutter/widgets/Navigator/pop.html