| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | import 'package:auth_totp/auth_totp.dart';/// otpauth://totp/{}?secret={}&issuer={}class Totp {  /// for persistent  final String uri;  final String issuer;  final String secret;  final int interval;  Totp({    required this.uri,    required this.issuer,    required this.secret,    required this.interval,  });  String get now => AuthTOTP.generateTOTPCode(        secretKey: secret,        interval: interval,      );  static Totp? fromUri(String uri) {    final totpUri = Uri.tryParse(uri);    if (totpUri == null) return null;    final query = totpUri.queryParameters;    final secret = query["secret"];    if (secret == null) return null;    // final digit = query["digits"];    final period = query["period"];    final issuerQuery = query["issuer"];    final lastPathSeg = totpUri.pathSegments.lastOrNull;    final colonPos = lastPathSeg?.indexOf(":");    final account = colonPos == null        ? null        : colonPos == -1            ? lastPathSeg!            : lastPathSeg!.substring(colonPos + 1);    final issuer = issuerQuery == null        ? lastPathSeg ?? "UNKNOWN"        : "$issuerQuery${account == null ? "" : ":$account"}";    return Totp(      uri: uri,      issuer: issuer,      secret: secret,      interval: period == null ? 30 : int.tryParse(period) ?? 30,    );  }}
 |