login method

Future<User?> login(
  1. User user
)

login a User by checking if he exists in the remote database

Implementation

Future<User?> login(User user) async {
  // if user is already logged in
  await connectionGuard();
  _user = user;
  var res = (await postJSON(RequestData(
    '/login',
  ))) ////logIfFailed: false)))
      ?.forceRes();
  if (res != null && (res.statusCode ~/ 100 == 2)) {
    //success
    final resb = jsonDecode(res.body)['user'];
    try {
      final dbgMap = (resb is Map) ? resb : null;
      debugPrint('login response user keys: ${dbgMap?.keys.toList()}');
      debugPrint('login response Def_Login_ID: ${dbgMap?['Def_Login_ID']}');
    } catch (_) {}

    // Best-effort: set Def_Login_ID explicitly (some maps/keys differ across backends).
    try {
      final map = resb as Map?;
      final v = map?['Def_Login_ID'] ??
          map?['def_login_id'] ??
          map?['Login_ID_Pruefer'] ??
          map?['login_id_pruefer'];
      if (v is int) _user?.defLoginId = v;
      if (v is num) _user?.defLoginId = v.toInt();
      if (v is String) _user?.defLoginId = int.tryParse(v);
    } catch (_) {}

    _user?.fromMap((resb is Map) ? resb.cast<String, dynamic>() : null);
    debugPrint(
        'login parsed user: KZL=${_user?.name}, Def_Login_ID=${_user?.defLoginId}');
    return _user;
  }
  throw ResponseException(res);
}