【问题标题】:Flutter update state coming from another screenFlutter 更新状态来自另一个屏幕
【发布时间】:2018-08-18 23:37:00
【问题描述】:

我有两个屏幕。在第一个中,有一个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;

}

【问题讨论】:

    标签: flutter setstate


    【解决方案1】:

    在您的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

    【讨论】:

    • 感谢您抽出宝贵时间@diegoveloper。我已经尝试过了,但我收到错误消息The funcion setState isn't defined
    • _navigateToFilterObject 函数必须在您的 State 类中
    • 你是完全正确的......多么愚蠢的错误......非常感谢你的帮助我真的很感激!
    • @diegoveloper 但是如果我不使用推送导航器怎么办。我只是使用类构造函数来加载屏幕。还是有构造函数的输出?通常我只使用 in 作为输入参数。 Positioned( child: PlaceholderFilter(filterText: '',), bottom: 10, ), 那么如何从 PlaceholderFilter 的操作中刷新 setState 呢?
    • 它正在抛出 setState() called after dispose() 异常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2022-01-25
    • 2022-01-20
    • 2021-01-14
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多