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

A Flutter plugin for securely storing primitive data types using Android Keystore and iOS Keychain.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:native_secured_storage/native_secured_storage.dart';

import 'package:flutter/material.dart';
import 'package:native_secured_storage/native_secured_storage.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Native Secured Storage Example',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: SecureStorageDemo(),
    );
  }
}

class SecureStorageDemo extends StatefulWidget {
  @override
  _SecureStorageDemoState createState() => _SecureStorageDemoState();
}

class _SecureStorageDemoState extends State<SecureStorageDemo> {
  final TextEditingController _keyController = TextEditingController();
  final TextEditingController _valueController = TextEditingController();
  String? _retrievedValue;

  Future<void> _saveValue() async {
    final key = _keyController.text;
    final value = _valueController.text;

    if (key.isEmpty || value.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Key and value cannot be empty')),
      );
      return;
    }

    // Detect value type for saving
    dynamic parsedValue;
    if (value.toLowerCase() == 'true' || value.toLowerCase() == 'false') {
      parsedValue = value.toLowerCase() == 'true';
    } else if (double.tryParse(value) != null) {
      parsedValue = value.contains('.') ? double.parse(value) : int.parse(value);
    } else {
      parsedValue = value;
    }

    try {
      await NativeSecuredStorage.save(key, parsedValue);
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Value saved successfully')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error saving value: $e')),
      );
    }
  }

  Future<void> _retrieveValue() async {
    final key = _keyController.text;

    if (key.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Key cannot be empty')),
      );
      return;
    }

    try {
      final value = await NativeSecuredStorage.retrieve(key);
      setState(() {
        _retrievedValue = value?.toString();
      });
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Value retrieved successfully')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error retrieving value: $e')),
      );
    }
  }

  Future<void> _deleteValue() async {
    final key = _keyController.text;

    if (key.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Key cannot be empty')),
      );
      return;
    }

    try {
      await NativeSecuredStorage.delete(key);
      setState(() {
        _retrievedValue = null;
      });
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Value deleted successfully')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error deleting value: $e')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Secure Storage Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              controller: _keyController,
              decoration: InputDecoration(labelText: 'Key'),
            ),
            TextField(
              controller: _valueController,
              decoration: InputDecoration(labelText: 'Value'),
            ),
            SizedBox(height: 16),
            Row(
              children: [
                ElevatedButton(
                  onPressed: _saveValue,
                  child: Text('Save'),
                ),
                SizedBox(width: 8),
                ElevatedButton(
                  onPressed: _retrieveValue,
                  child: Text('Retrieve'),
                ),
                SizedBox(width: 8),
                ElevatedButton(
                  onPressed: _deleteValue,
                  child: Text('Delete'),
                ),
              ],
            ),
            SizedBox(height: 16),
            if (_retrievedValue != null)
              Text('Retrieved Value: $_retrievedValue'),
          ],
        ),
      ),
    );
  }
}
2
likes
140
points
2
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for securely storing primitive data types using Android Keystore and iOS Keychain.

Homepage

Documentation

API reference

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on native_secured_storage

Packages that implement native_secured_storage