首页 > 解决方案 > 如何在 FLutter 中使用 pushNamed 将数据从一个屏幕传递到另一个屏幕?

问题描述

我想使用 pushNamed 将文本框控制器的数据从一个屏幕传递到另一个屏幕,那么如何传递数据?

这是导航屏幕的方法。正如第一页中的贝娄。

@override
  void validateOtpSuccess() {
    Navigator.of(context).popAndPushNamed(Constants.ROUTE_CHANGE_PASSWORD);
  }

我想在更改密码屏幕上获取数据,那么我如何访问数据以更改密码屏幕?

标签: flutter

解决方案


在第一页(假设data是 a String):

final result = await Navigator.pushNamed<String?>(context, '/change_password_page', arguments: data);

在你的onGenerateRoute方法中:

Route? onGenerateRoute(RouteSettings settings) {
  ...
  switch (settings.name) {
    ...
    case '/change_password_page':
      final data = settings.arguments as String?;
      return MaterialPageRoute<String?>(
        builder: (context) => ChangePasswordPage(arguments: data!),
      );

在您的ChangePasswordPage小部件中:

class ChangePasswordPage extends StatefulWidget {
  final String data;

  const ChangePasswordPage({required this.data, Key? key}) : super(key: key);

  @override
  _ChangePasswordPageState createState() => _ChangePasswordPageState();
}
...
Navigator.pop<String?>(context, _newPassword);

推荐阅读