PopScope 中的泛型
摘要
#為 PopScope
類別新增了一個泛型型別,並將 onPopInvoked
方法替換為新的方法 onPopInvokedWithResult
。新的方法接收一個布林值 didPop
和一個 result
作為位置參數。
同樣地,也將 Form.onPopInvoked
替換為 Form.onPopInvokedWithResult
,原因相同。
背景
#先前,當呼叫 onPopInvoked
時,PopScope
無法存取彈出結果。因此,為 PopScope
類別新增泛型型別,以便新的方法 onPopInvokedWithResult
可以存取型別安全的結果。
變更說明
#為 PopScope
類別新增了一個泛型型別 (<T>
) 和一個新的方法 onPopInvokedWithResult
。onPopInvoked
屬性已被棄用,改用 onPopInvokedWithResult
。
同樣地,為 Form
新增了一個新的方法 onPopInvokedWithResult
,以取代 onPopInvoked
。
移轉指南
#遷移前的程式碼
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(),
),
],
),
),
);
}
遷移後的程式碼
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
- 為 PopScope 中的結果新增泛型型別 (已還原)
- 重新應用新的 PopScope API (最終重新提交)
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-08-06。 檢視原始碼 或 回報問題。