onWillPop-无法将Future <bool> Function(BuildContext)分配给参数类型Future <bool> Function()

时间:2019-09-25 13:54:01

标签: flutter dart

请帮助我解决Flutter应用程序中的错误:

    class MyApp extends StatelessWidget {

      Future<bool> _onBackPressed(BuildContext context) {

        return showDialog(
            context:context,builder:(BuildContext context)=>AlertDialog(title: Text('Exit'),
          actions: <Widget>[
            FlatButton( child:Text('NO'),onPressed: ()=>Navigator.pop(context,false)),
            FlatButton( child:Text('Yes'),onPressed: ()=>Navigator.pop(context,true))


          ],));

      }
      @override
      Widget build(BuildContext context) {
        return WillPopScope(onWillPop:_onBackPressed, // **the argument type Future<bool>Function(BuildContext) can not be assigned to parameter  Future<bool>Function()**

        child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'ListViews',
        theme: ThemeData(
        primarySwatch: Colors.teal,
        ),
        home: Scaffold(
        appBar: AppBar(title: Text('ListViews')),
        body: BodyLayout(),
        ),
        ));
      }
    }
  1. 如何纠正此错误?
  2. 写入Future<bool>_onBackPressed(BuildContext context) async{后,此错误将显示在错误框中

错误

the argument type Future<bool>Function(BuildContext) can not be assigned to parameter  Future<bool>Function()

如果您有更好的方法添加 ON DOUBLE PRESS EXIT FLUTTER APP

,请提及

1 个答案:

答案 0 :(得分:1)

好吧,onWillPop参数需要一个Future<bool> Function(),但是您提供了一个需要将BuildContext作为参数的函数(因此,类型为Future<bool> Function(BuildContext context))。 / p>

正确的方法是将函数包装到另一个函数中

WillPopScope(
  onWillPop: () => _onBackPressed(context),
  child: ...
)

而且我认为没有比检测上次上次按下的时间戳并将其与当前按下时的当前时间进行比较的更为优雅的方法来检测两次按下。