base_wallet_kit 1.0.0 copy "base_wallet_kit: ^1.0.0" to clipboard
base_wallet_kit: ^1.0.0 copied to clipboard

Base library with Clean Architecture + Riverpod for Flutter wallet/fintech apps. Includes HTTP client, secure storage, auth, migration manager, and reusable widgets.

base_wallet_kit #

Librería base con arquitectura Clean Architecture + Riverpod para proyectos Flutter de tipo wallet/fintech.


Instalación #

En el pubspec.yaml de tu proyecto:

dependencies:
  base_wallet_kit:
    git:
      url: https://github.com/tu-org/base_wallet_kit.git
      ref: main

Inicialización en main.dart #

import 'package:base_wallet_kit/base_wallet_kit.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 1. Configurar entorno
  Environment.instance = AppEnvironment();

  // 2. Configurar versiones para el MigrationManager
  MigrationManager.configure(ios: '1.0.0', android: '1.0.0');

  // 3. Inicializar BaseWalletKit (navigatorKey + rutas)
  BaseWalletKit.init(
    navigatorKey: rootNavigatorKey,
    loginRoute: '/login',
    authenticatedRoutes: ['home', 'account', 'cards'],
    authRoutes: ['login', 'register', 'forgot-password'],
  );

  // 4. Inicializar ApiUrlManager (Firebase Remote Config)
  await ApiUrlManager.instance.initialize();

  // 5. Verificar versión de app
  await MigrationManager.checkAppVersion();

  runApp(const ProviderScope(child: MyApp()));
}

Estructura de capas #

base_wallet_kit/
├── config/          → Router base, transiciones de página
├── constants/       → Environment (abstract)
├── domain/          → BaseUser, BaseAccount, BaseResponse, BaseRepository
├── infrastructure/  → BaseDatasource, BaseMapper, BaseRepositoryImpl
├── providers/
│   ├── riverpodBack/  → BaseAuthProvider, BaseAccountProvider
│   └── riverpodVar/   → UserInfoProvider, AccountInfoProvider, FormStateProviders
├── services/        → ApiDioFactory, TokenExpiredInterceptor, SecureTokenStorage, etc.
├── utils/           → MigrationManager, SecureCredentials, BiometricPreferences, etc.
└── widgets/         → CustomAlert, CustomAppBar, PermissionGuard, RatingDialog

Uso por capa #

Environment #

class AppEnvironment extends Environment {
  @override
  String get urlBase => 'https://api.miapp.com/';

  @override
  String get urlBaseOld => 'https://api-legacy.miapp.com/';
}

Entidades de dominio #

class LoginUser extends BaseUser {
  final String token;
  final String company;

  const LoginUser({
    required super.id,
    required super.name,
    required super.lastname,
    required super.email,
    required super.status,
    required this.token,
    required this.company,
  });
}

Datasource #

class LoginDatasource extends BaseDatasource {
  LoginDatasource() : super(dio: ApiDioFactory.create());

  Future<Map<String, dynamic>> login(String email, String password) async {
    final response = await safeRequest(() => dio.post(
      '/v1/auth/login/',
      data: {'email': email, 'password': password},
    ));
    return response.data;
  }
}

Mapper #

class LoginMapper implements BaseMapper<LoginModel, LoginUser> {
  @override
  LoginUser fromModel(LoginModel model) => LoginUser(
    id: model.id,
    name: model.name,
    lastname: model.lastname,
    email: model.email,
    status: model.status,
    token: model.token,
    company: model.company,
  );

  @override
  LoginModel toModel(LoginUser entity) => LoginModel(id: entity.id, ...);
}

Provider de datos de usuario (stringListUser) #

// Guardar datos después de login
ref.read(UserInfoProvider.notifier).addString(user.id);
ref.read(UserInfoProvider.notifier).addString(user.name);
ref.read(UserInfoProvider.notifier).addString(user.email);

// Leer datos de forma segura
final userInfo = ref.watch(UserInfoProvider);
final userName = userInfo.safeGet(1);  // Sin RangeError

// Limpiar al hacer logout
await ref.read(UserInfoProvider.notifier).clearList();

Verificación de actualización iOS #

IOSUpdateChecker(
  iOSBundleId: 'com.miempresa.miapp',
  iOSAppStoreCountry: 'MX',
).checkForUpdate(context);

Credenciales biométricas #

// Guardar
await SecureCredentials.save(email, password);

// Leer
final credentials = await SecureCredentials.read();

// Limpiar (logout)
await SecureCredentials.clear();

Limpieza de Keychain en primera instalación iOS #

El Keychain de iOS persiste datos incluso después de desinstalar la app. Para limpiar residuos en reinstalaciones, agrega esto al inicio de tu login screen:

if (Platform.isIOS) {
  final initialized = await BiometricPreferences.isAppInitialized();
  if (!initialized) {
    await SecureCredentials.clear();
    await SecureTokenStorage.clearAllTokens();
    await BiometricPreferences.markAppAsInitialized();
  }
}
1
likes
0
points
41
downloads

Publisher

unverified uploader

Weekly Downloads

Base library with Clean Architecture + Riverpod for Flutter wallet/fintech apps. Includes HTTP client, secure storage, auth, migration manager, and reusable widgets.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

connectivity_plus, device_info_plus, dio, firebase_crashlytics, firebase_remote_config, flutter, flutter_localizations, flutter_riverpod, flutter_screenutil, flutter_secure_storage, flutter_svg, geolocator, go_router, google_fonts, in_app_update, intl, local_auth, lottie, new_version_plus, package_info_plus, permission_handler, riverpod, shared_preferences, url_launcher

More

Packages that depend on base_wallet_kit