跳至主要内容

PopScope 中的泛型

摘要

#

PopScope 类添加了一个泛型,并用新方法 onPopInvokedWithResult 替换了 onPopInvoked。新方法将布尔值 didPopresult 作为位置参数。

出于同样的原因,还用 Form.onPopInvokedWithResult 替换了 Form.onPopInvoked

上下文

#

之前,当调用 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