将用户 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.');
  }
}

希望能解决您的问题。随时消除任何困惑。