跳至主要內容

PopScope 中的泛型

摘要

#

PopScope 類別新增了一個泛型型別,並將 onPopInvoked 方法替換為新的方法 onPopInvokedWithResult。新的方法接收一個布林值 didPop 和一個 result 作為位置參數。

同樣地,也將 Form.onPopInvoked 替換為 Form.onPopInvokedWithResult,原因相同。

背景

#

先前,當呼叫 onPopInvoked 時,PopScope 無法存取彈出結果。因此,為 PopScope 類別新增泛型型別,以便新的方法 onPopInvokedWithResult 可以存取型別安全的結果。

變更說明

#

PopScope 類別新增了一個泛型型別 (<T>) 和一個新的方法 onPopInvokedWithResultonPopInvoked 屬性已被棄用,改用 onPopInvokedWithResult

同樣地,為 Form 新增了一個新的方法 onPopInvokedWithResult,以取代 onPopInvoked

移轉指南

#

遷移前的程式碼

dart
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      navigatorKey: nav,
      home: Column(
        children: [
          Form(
            canPop: false,
            onPopInvoked: (bool didPop) {
              if (didPop) {
                return;
              }
              launchConfirmationDialog();
            },
            child: MyWidget(),
          ),
          PopScope(
            canPop: false,
            onPopInvoked: (bool didPop) {
              if (didPop) {
                return;
              }
              launchConfirmationDialog();
            },
            child: MyWidget(),
          ),
        ],
      ),
    ),
  );
}

遷移後的程式碼

dart
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      navigatorKey: nav,
      home: Column(
        children: [
          Form(
            canPop: false,
            onPopInvokedWithResult: (bool didPop, Object? result) {
              if (didPop) {
                return;
              }
              launchConfirmationDialog();
            },
            child: MyWidget(),
          ),
          PopScope<Object?>(
            canPop: false,
            onPopInvokedWithResult: (bool didPop, Object? result) {
              if (didPop) {
                return;
              }
              launchConfirmationDialog();
            },
            child: MyWidget(),
          ),
        ],
      ),
    ),
  );
}

泛型型別應與 PopScope 所在之 Route 的泛型型別相符。例如,如果路由使用 int 作為其泛型型別,則應考慮使用 PopScope<int>

如果 PopScope 小工具在多個具有不同型別的路由之間共享,則可以使用 PopScope<Object?> 來捕捉所有可能的型別。

時間軸

#

於版本中發布:3.22.0-26.0.pre
於穩定版本中發布:3.24.0

參考資料

#

API 文件

相關議題

相關的 PR