136 lines
4.1 KiB
Dart
136 lines
4.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
|
import 'package:warp_api/warp_api.dart';
|
|
|
|
import 'main.dart';
|
|
|
|
class DevPage extends StatefulWidget {
|
|
DevPageState createState() => DevPageState();
|
|
}
|
|
|
|
class DevPageState extends State<DevPage> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(title: Text('Developer Menu')),
|
|
body: ListView(padding: EdgeInsets.all(8), children: [
|
|
ListTile(
|
|
title: Text('Sync Stats'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _syncStats),
|
|
ListTile(
|
|
title: Text('Reset Scan State'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _resetScan),
|
|
ListTile(
|
|
title: Text('Reset App'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: resetApp),
|
|
ListTile(
|
|
title: Text('Trigger Reorg'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _reorg),
|
|
ListTile(
|
|
title: Text('Mark as Synced'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _markAsSynced),
|
|
ListTile(
|
|
title: Text('Clear Tx Details'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _clearTxDetails),
|
|
ListTile(
|
|
title: Text('Import YFVK'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _importYFVK),
|
|
ListTile(
|
|
title: Text('Bind/Unbind from Ledger'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _toggleLedgerBinding),
|
|
ListTile(
|
|
title: Text('Revoke Dev mode'),
|
|
trailing: Icon(Icons.chevron_right),
|
|
onTap: _resetDevMode),
|
|
]));
|
|
}
|
|
|
|
void _syncStats() {
|
|
Navigator.of(context).pushNamed('/syncstats');
|
|
}
|
|
|
|
void _resetScan() {
|
|
WarpApi.truncateSyncData();
|
|
syncStatus.reset();
|
|
}
|
|
|
|
void _reorg() async {
|
|
await syncStatus.reorg();
|
|
}
|
|
|
|
void _markAsSynced() {
|
|
WarpApi.skipToLastHeight(active.coin);
|
|
}
|
|
|
|
void _clearTxDetails() {
|
|
WarpApi.clearTxDetails(active.coin, active.id);
|
|
}
|
|
|
|
Future<void> _importYFVK() async {
|
|
final nameController = TextEditingController();
|
|
final keyController = TextEditingController();
|
|
final formKey = GlobalKey<FormBuilderState>();
|
|
final mq = MediaQuery.of(context);
|
|
await showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (context) => AlertDialog(
|
|
title: Text("Import YFVK"),
|
|
insetPadding: EdgeInsets.all(64),
|
|
content: FormBuilder(
|
|
key: formKey,
|
|
child: Container(
|
|
width: mq.size.width,
|
|
child: SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
TextFormField(
|
|
decoration:
|
|
InputDecoration(labelText: 'Account Name'),
|
|
controller: nameController,
|
|
),
|
|
TextFormField(
|
|
decoration: InputDecoration(labelText: 'Key'),
|
|
controller: keyController,
|
|
minLines: 16,
|
|
maxLines: null,
|
|
validator: (k) =>
|
|
_validateYFVK(nameController.text, k),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
)),
|
|
actions: confirmButtons(context, () {
|
|
final form = formKey.currentState!;
|
|
if (form.validate()) Navigator.of(context).pop();
|
|
})));
|
|
}
|
|
|
|
String? _validateYFVK(String name, String? key) {
|
|
try {
|
|
WarpApi.importYFVK(active.coin, name, key!);
|
|
} catch (e) {
|
|
return "Invalid key: $e";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
void _toggleLedgerBinding() {
|
|
WarpApi.ledgerToggleBinding(active.coin, active.id);
|
|
}
|
|
|
|
_resetDevMode() {
|
|
showSnackBar('Dev mode disabled');
|
|
settings.resetDevMode();
|
|
}
|
|
}
|