Quick Start
Get the Flutter SDK running in your app in 5 minutes.
Basic Usage
import 'package:flutter/material.dart';
import 'package:simplr_fraud/simplr_fraud.dart';
class SignupScreen extends StatefulWidget {
_SignupScreenState createState() => _SignupScreenState();
}
class _SignupScreenState extends State<SignupScreen> {
final _simplr = SimplrFraud();
final _formKey = GlobalKey<FormState>();
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
bool _isLoading = false;
void initState() {
super.initState();
_simplr.initialize();
}
Future<void> _onSubmit() async {
if (!_formKey.currentState!.validate()) return;
setState(() => _isLoading = true);
try {
// Collect device + behavioral signals
final signals = await _simplr.collect(context);
// Send to your backend
final response = await http.post(
Uri.parse('https://api.yourapp.com/signup'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'email': _emailController.text,
'password': _passwordController.text,
'signals': signals.toJson(),
}),
);
final result = jsonDecode(response.body);
if (result['risk_level'] == 'critical') {
_showError('Unable to create account');
} else {
Navigator.pushReplacementNamed(context, '/dashboard');
}
} catch (e) {
_showError('Something went wrong');
} finally {
setState(() => _isLoading = false);
}
}
void _showError(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message)),
);
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Sign Up')),
body: Padding(
padding: EdgeInsets.all(16),
child: Form(
key: _formKey,
child: Column(
children: [
SimplrTextField(
tracker: _simplr,
controller: _emailController,
fieldName: 'email',
decoration: InputDecoration(labelText: 'Email'),
keyboardType: TextInputType.emailAddress,
validator: (v) => v!.isEmpty ? 'Required' : null,
),
SizedBox(height: 16),
SimplrTextField(
tracker: _simplr,
controller: _passwordController,
fieldName: 'password',
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: (v) => v!.length < 8 ? 'Min 8 characters' : null,
),
SizedBox(height: 24),
ElevatedButton(
onPressed: _isLoading ? null : _onSubmit,
child: _isLoading
? CircularProgressIndicator()
: Text('Sign Up'),
),
],
),
),
),
);
}
void dispose() {
_emailController.dispose();
_passwordController.dispose();
super.dispose();
}
}
Configuration Options
final simplr = SimplrFraud(
config: SimplrFraudConfig(
// Enable behavioral biometrics
collectBiometrics: true,
// Start tracking on init
autoStart: true,
// Debug logging
debug: false,
),
);
SDK Methods
initialize()
Initialize the SDK:
await simplr.initialize();
collect(BuildContext)
Collect all signals:
final signals = await simplr.collect(context);
// Returns CollectedSignals with device + behavior data
collectDeviceSignals(BuildContext)
Collect only device signals:
final device = await simplr.collectDeviceSignals(context);
collectBehaviorSignals()
Collect only behavioral signals:
final behavior = simplr.collectBehaviorSignals();
startTracking() / stopTracking()
Control behavioral tracking:
simplr.startTracking();
simplr.stopTracking();
reset()
Clear collected behavioral data:
simplr.reset();
Response Structure
class CollectedSignals {
final DeviceSignals device;
final BehaviorSignals behavior;
final DateTime timestamp;
Map<String, dynamic> toJson() => {
'device': device.toJson(),
'behavior': behavior.toJson(),
'timestamp': timestamp.toIso8601String(),
};
}
Next Steps
- Device Signals - Fingerprinting details
- Biometrics - Touch and typing analysis
- Widgets - Pre-built Flutter widgets