Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
238 views
in Technique[技术] by (71.8m points)

dart - Passing data through navigation in flutter?

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

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

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

question from:https://stackoverflow.com/questions/65845439/passing-data-through-navigation-in-flutter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

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

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

and here you navigate to OtpPage like this

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...