首页 > 解决方案 > 在颤振中通过导航传递数据?

问题描述

我想传递一个手机号码和一个字符串数据来检查流量是来自注册还是来自登录。那么我该怎么做呢?请给我一些帮助!

注册.dart

class _RegisterPageState extends State<RegisterPage> {
  String execute_from = 'Register';
UserData _data = UserData();
   submit() async {
    if (this._formKey.currentState.validate()) {
      _formKey.currentState.save();
   print(_data.mobileNo);
 // Navigator.pushNamed(context, '/otp', arguments: '${_data.mobileNo}'); /* here I want to pass 
    execute_from */
  }
}

路线飞镖

class RouteGenerator {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/':
        return MaterialPageRoute(builder: (_) => SplashScreenPage());
      case '/register':
        return MaterialPageRoute(builder: (_) => RegisterPage());
      case '/login':
        return MaterialPageRoute(builder: (_) => LoginPage());
      case '/otp':
        var mobNumber = settings.arguments as String;   /* Is this right way to pass? */
        var execute_from = settings.arguments as String;
        return MaterialPageRoute(builder: (_) => OtpPage(mobNumber, execute_from));
      case '/home':
        return MaterialPageRoute(builder: (_) => HomePage());
      default:
        return MaterialPageRoute(
            builder: (_) => Scaffold(
                  body: Center(
                      child: Text('No route defined for ${settings.name}')),
                ));
    }
  }
}

otp.dart

class OtpPage extends StatefulWidget {
  final String mobNumber;
  final String execute_from;
  String formattedMobNo;

  OtpPage(this.mobNumber, this.execute_from) {
    formattedMobNo = this.mobNumber.replaceRange(2, 8, 'XXXXXX');
    print(execute_from);

  }
 //........
}

请告诉我如何在我的 otp 页面上接收这些内容。

标签: flutterdart

解决方案


首先,您需要arguments像下面这样传递数组,

Navigator.pushNamed(context, '/otp', arguments: [
  _data.mobileNo.toString(),
  execute_from.toString()
]);

然后在您的RouteGenerator班级中将接收格式转换为 List 像这样

var mobNumber = settings.arguments as List;

然后只需打印并检查您的价值

print("==========>>mobile_number${mobNumber[0].toString()}");
print("==========>>mobile_number${mobNumber[1].toString()}");

在这里你导航到OtpPage这样

MaterialPageRoute(builder: (_) => OtpPage(mobNumber: mobNumber[0].toString(), execute_from: mobNumber[1].toString()));

你的 OTP 页面应该是这样的

class OtpPage extends StatefulWidget {
  var mobNumber;
  var execute_from;

  OtpPage({this.mobNumber, this.execute_from});

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _selectionScreen();
  }
}

class _selectionScreen extends State<OtpPage> {

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    print("===================>>${widget.mobNumber}");
    print("===================>>${widget.execute_from}");
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold();
  }
}

我希望这对你有帮助


推荐阅读