簡體   English   中英

參數類型 'Future<void> Function()' 不能分配給參數類型 'Future<bool> 功能()?</bool></void>

[英]The argument type 'Future<void> Function()' can't be assigned to the parameter type 'Future<bool> Function()?

兩天前我試圖找到解決這個問題的方法,但我沒有找到任何東西

....

  Future<void> onBackPressed() {
    return SystemNavigator.pop();
  }



  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: onBackPressed, // here i get the error
      child: Scaffold(
        floatingActionButton: FloatingActionButton(
........
.....

iget 錯誤:無法將參數類型“Future<void>Function()”分配給參數類型“Future<bool>Function()?”。

當我更改為 Future < bool > 時出現錯誤:“Future < void >”類型的值無法從方法“onBackPressed”返回,因為它的返回類型為“Future < bool >”。 任何解決方案?

WillPopScope 的onWillPop配置需要一個返回類型為Future<bool>WillPopScope ,根據返回值,pop 將被執行或不執行, 請參見此處

如果回調返回解析為 false 的 Future,則不會彈出封閉路由。

由於SystemNavigator.pop()的返回類型為Future<void> ,因此您無法從onBackPressed function 返回此類型。

你可以這樣做,但我認為它會導致雙重彈出:

Future<bool> onBackPressed() async {
  await SystemNavigator.pop();
  return Future.value(true);
}

您應該使用onWillPop方法來決定是否執行由用戶或您的代碼發起的 pop。 一個典型的例子是,如果您不想在 Android 上禁用返回按鈕,這將導致退出您的應用程序。

可能不是最好的方法,你可以嘗試以下

Future<true> onBackPressed() {
    systemNavigator.pop();
    return true
  }

但我會檢查為什么請求 bool,然后提供返回 true 或 false 的邏輯

如果您只想彈出視圖,則讓 WillPopScope 完成這項工作。 以下可能工作正常:

@override
      Widget build(BuildContext context) {
        return WillPopScope(
          onWillPop: () async => Future.value(true),
          child: Scaffold(
            floatingActionButton: FloatingActionButton(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM