如何将上下文注入自定义函数?

时间:2019-10-20 19:52:33

标签: flutter

我是飞镖和飞镖的新手,试图学习如何使用WillPopScope控制后退按钮。

我的课看起来像这样:

class PlayPage extends StatelessWidget {

  Future<bool> _onBackPressed() {
    return showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('Do you really want to leave?'),
        actions: <Widget>[
          FlatButton(
            child: Text('No'),
            onPressed: () => Navigator.pop(context,false),
          ),
          FlatButton(
            child: Text('Yes'),
            onPressed: () => Navigator.pop(context),
          ),
        ],
      )
    ); 
  }


  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: _onBackPressed, 
      child: Scaffold(
        appBar: AppBar (
          title: Text('Play') 
        ),
        body: Container(
          color: Colors.white,
        )
      )
    );
  }
}

我的问题: 如果我在自定义函数_onBackPressed中获取代码并将其作为匿名函数分配给onWillPop,则它可以正常工作。但是,如果我尝试通过onWillPop调用自定义函数,则VSCode会在showDialog构造函数中突出显示我的上下文参数,因为它无法识别传入的内容并且无法解析它。而且我似乎无法弄清楚如何从onWillPop调用中传递它。

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的开发人员解决方案,但我只是没有想到。这是一个解决方案。

在onWillPop中,只需使用匿名函数来调用我的自定义类方法,然后从那里传递上下文即可。

Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
        return _onBackPressed(context);
      }, 
      child: Scaffold(
        appBar: AppBar (
          title: Text('Play') 
        ),
        body: Container(
          color: Colors.white,
        )
      )
    );
  }
}