flutter - 在颤振中通过导航传递数据?
问题描述
我想传递一个手机号码和一个字符串数据来检查流量是来自注册还是来自登录。那么我该怎么做呢?请给我一些帮助!
注册.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 页面上接收这些内容。
解决方案
首先,您需要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();
}
}
我希望这对你有帮助
推荐阅读
- javascript - JavaScript / AngularJS:仅当我单击两次按钮时才显示错误消息
- azure - 为什么 PowerShell 无法加载文件或程序集来运行 Azure PowerShell 模块?
- php - Laravel Ajax 控制器设置图像的 URL
- reactjs - 在 Jest/Enzyme 测试期间无法运行 React Hook setInterval Timer
- python - 导入具有相对路径的模块 - 最好的处理方式?
- html - 尝试从谷歌驱动器加载 gltf 模型时出现 CORS 错误
- next.js - 在 Next.js 中使用中继和动态路由时,我的查询应该用什么命名?
- python - 如何使用 Google Colab 安装 umap 和 umap.plot
- webview - Google Play 商店安全警报:“您的应用正在使用易受跨应用脚本攻击的 WebView”
- flutter - 为什么我不能让 Material AppBar 成为一个单独的类?