将用户 ID 传递给 http 参数
Pass the user id to an http parameter
早上好,我有一个登录 returns 来自服务器的 UserID,我将其存储在共享首选项的一个实例中,我想将其用作参数以便在主屏幕中, 显示最近5条记录,也是从数据库中取来的。
我附上登录代码,我强调我试图通过路由传递一些参数,即用户的UserID和角色,专门给他看一个屏幕。
Future<void> login(email, password) async{
try{
var url = 'serverurl';
var response = await http.post(Uri.parse(url),
body:
{
'Email' : email,
'Password' : password
}).timeout(const Duration(seconds: 30));
var datos = jsonDecode(response.body);
print(datos);
if(response.body != '0'){
guardarDatos(datos['UserID'], datos['Role']);
if('Role' == 'admin'){
Navigator.pushNamed(context, '/AdminPage', arguments: {'UserID':UserId, 'Role': Role});
} else {
Navigator.pushNamed(context, '/UserPage', arguments: {'UserID': UserId, 'Role': Role});
}
} else{
//Cuadro de diálogo que indica que los datos son incorrectos.
showDialog(
context: context,
builder: (BuildContext context) {
return const AlertLogin();
});
print('Usuario Incorrecto');
}
} on TimeoutException catch(e){
print('Tiempo de proceso excedido.');
} on Error {
print('http error.');
}
}
下面是主界面的代码,我打算在http.get的URL中将用户id作为参数传入,以获取用户记录,例如数字 1.
//HTTP Request
Future<List<Record>> fetchRecord() async {
//final response = await http.get(Uri.parse('https://e5ac-45-65-15257.ngrok.io/get/fiverecords/1')); Este es estático.
final response = await http
.get(Uri.parse('https://e5ac-45-65-152-57.ngrok.io/get/fiverecords/'));
if (response.statusCode == 200) {
final parsed = json.decode(response.body).cast<Map<dynamic, dynamic>>();
return parsed.map<Record>((json) => Record.fromMap(json)).toList();
} else {
throw Exception('Failed to load records.');
}
}
所以在您的主屏幕代码中,我假设您在询问如何检索通过命名路由传递的参数。这是您需要做的:
定义一个变量:
final user = ModalRoute.of(context)!.settings.arguments;
您可以像这样使用此用户变量来访问用户 ID 和电子邮件:
print('User Email: ${user.UserID}');
print('User Email: ${user.Role}');
就像使用键调用地图的值一样。
所以这就是您的最终代码的样子:
Future<List<Record>> fetchRecord() async {
final user = ModalRoute.of(context)!.settings.arguments; // You can use this variable directly in your links
//final response = await http.get(Uri.parse('https://e5ac-45-65-15257.ngrok.io/get/fiverecords/1')); Este es estático.
final response = await http
.get(Uri.parse('https://e5ac-45-65-152-57.ngrok.io/get/fiverecords/'));
if (response.statusCode == 200) {
final parsed = json.decode(response.body).cast<Map<dynamic, dynamic>>();
return parsed.map<Record>((json) => Record.fromMap(json)).toList();
} else {
throw Exception('Failed to load records.');
}
}
希望能解决您的问题。随时消除任何困惑。
早上好,我有一个登录 returns 来自服务器的 UserID,我将其存储在共享首选项的一个实例中,我想将其用作参数以便在主屏幕中, 显示最近5条记录,也是从数据库中取来的。
我附上登录代码,我强调我试图通过路由传递一些参数,即用户的UserID和角色,专门给他看一个屏幕。
Future<void> login(email, password) async{
try{
var url = 'serverurl';
var response = await http.post(Uri.parse(url),
body:
{
'Email' : email,
'Password' : password
}).timeout(const Duration(seconds: 30));
var datos = jsonDecode(response.body);
print(datos);
if(response.body != '0'){
guardarDatos(datos['UserID'], datos['Role']);
if('Role' == 'admin'){
Navigator.pushNamed(context, '/AdminPage', arguments: {'UserID':UserId, 'Role': Role});
} else {
Navigator.pushNamed(context, '/UserPage', arguments: {'UserID': UserId, 'Role': Role});
}
} else{
//Cuadro de diálogo que indica que los datos son incorrectos.
showDialog(
context: context,
builder: (BuildContext context) {
return const AlertLogin();
});
print('Usuario Incorrecto');
}
} on TimeoutException catch(e){
print('Tiempo de proceso excedido.');
} on Error {
print('http error.');
}
}
下面是主界面的代码,我打算在http.get的URL中将用户id作为参数传入,以获取用户记录,例如数字 1.
//HTTP Request
Future<List<Record>> fetchRecord() async {
//final response = await http.get(Uri.parse('https://e5ac-45-65-15257.ngrok.io/get/fiverecords/1')); Este es estático.
final response = await http
.get(Uri.parse('https://e5ac-45-65-152-57.ngrok.io/get/fiverecords/'));
if (response.statusCode == 200) {
final parsed = json.decode(response.body).cast<Map<dynamic, dynamic>>();
return parsed.map<Record>((json) => Record.fromMap(json)).toList();
} else {
throw Exception('Failed to load records.');
}
}
所以在您的主屏幕代码中,我假设您在询问如何检索通过命名路由传递的参数。这是您需要做的:
定义一个变量:
final user = ModalRoute.of(context)!.settings.arguments;
您可以像这样使用此用户变量来访问用户 ID 和电子邮件:
print('User Email: ${user.UserID}');
print('User Email: ${user.Role}');
就像使用键调用地图的值一样。
所以这就是您的最终代码的样子:
Future<List<Record>> fetchRecord() async {
final user = ModalRoute.of(context)!.settings.arguments; // You can use this variable directly in your links
//final response = await http.get(Uri.parse('https://e5ac-45-65-15257.ngrok.io/get/fiverecords/1')); Este es estático.
final response = await http
.get(Uri.parse('https://e5ac-45-65-152-57.ngrok.io/get/fiverecords/'));
if (response.statusCode == 200) {
final parsed = json.decode(response.body).cast<Map<dynamic, dynamic>>();
return parsed.map<Record>((json) => Record.fromMap(json)).toList();
} else {
throw Exception('Failed to load records.');
}
}
希望能解决您的问题。随时消除任何困惑。