通过导航中的数据传递? [英] Passing data through navigation in flutter?

查看:26
本文介绍了通过导航中的数据传递?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想传递一个手机号码以及一个字符串数据,以检查流是来自寄存器还是来自登录.那我该怎么办呢?请给我一些帮助!

I want to pass a mobile number as well as a string data to check that whether the flow is from register or it is from login. So how can I do that? please provide me some help!

register.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 */
  }
}

route.dart

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页面上接收这些信息.

Please tell me how can I receive those on my otp page.

推荐答案

首先,您需要将参数传递为如下数组,

First, you need to pass arguments as array like below,

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

,然后在您的 RouteGenerator 类中,将接收格式转换为这样的List

and then in your RouteGenerator class convert the receiving format to List like this

var mobNumber = settings.arguments as List;

然后简单地打印并检查您的值

and then simply print and check your value

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

在这里,您像这样导航到 OtpPage

and here you navigate to OtpPage like this

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

您的OTP页面应该是这样的

And your OTP page should be like this

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();
  }
}

我希望这会对您有所帮助

I hope this will help for you

这篇关于通过导航中的数据传递?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆