mirror of https://github.com/AMT-Cheif/drift.git
131 lines
3.7 KiB
Dart
131 lines
3.7 KiB
Dart
import 'package:devtools_app_shared/ui.dart';
|
|
import 'package:devtools_extensions/devtools_extensions.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/gestures.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
import 'src/details.dart';
|
|
import 'src/list.dart';
|
|
|
|
void main() {
|
|
runApp(const ProviderScope(child: DriftDevToolsExtension()));
|
|
|
|
if (kDebugMode) {
|
|
Logger.root.level = Level.FINE;
|
|
Logger.root.onRecord.listen((record) {
|
|
debugPrint(
|
|
'[${record.level.name}] ${record.loggerName}: ${record.message}');
|
|
});
|
|
}
|
|
}
|
|
|
|
class DriftDevToolsExtension extends StatelessWidget {
|
|
const DriftDevToolsExtension({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return const DevToolsExtension(child: DriftDevtoolsBody());
|
|
}
|
|
}
|
|
|
|
class DriftDevtoolsBody extends ConsumerWidget {
|
|
const DriftDevtoolsBody({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final selected = ref.watch(selectedDatabase);
|
|
|
|
return Split(
|
|
axis: Split.axisFor(context, 0.85),
|
|
initialFractions: const [1 / 3, 2 / 3],
|
|
children: [
|
|
const RoundedOutlinedBorder(
|
|
child: Column(
|
|
children: [
|
|
AreaPaneHeader(
|
|
roundedTopBorder: false,
|
|
includeTopBorder: false,
|
|
title: Text('Drift databases'),
|
|
actions: [
|
|
_InfoButton(),
|
|
],
|
|
),
|
|
Expanded(child: DatabaseList()),
|
|
],
|
|
),
|
|
),
|
|
RoundedOutlinedBorder(
|
|
clip: true,
|
|
child: Column(children: [
|
|
AreaPaneHeader(
|
|
roundedTopBorder: false,
|
|
includeTopBorder: false,
|
|
title: selected != null
|
|
? Text('Inspecting ${selected.typeName}')
|
|
: const Text('No database selected'),
|
|
),
|
|
if (selected != null) const Expanded(child: DatabaseDetails())
|
|
]),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
class _InfoButton extends StatelessWidget {
|
|
const _InfoButton();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return IconButton(
|
|
icon: const Icon(Icons.info_outline),
|
|
onPressed: () {
|
|
showAboutDialog(
|
|
context: context,
|
|
applicationName: 'Drift extensions for DevTools',
|
|
children: [
|
|
Text.rich(
|
|
TextSpan(
|
|
children: [
|
|
_text(
|
|
'This extension allows inspecting a drift database in '
|
|
'DevTools. If you have ideas for additional functionality '
|
|
'that could be provided here, please ',
|
|
),
|
|
_link('opening an issue',
|
|
'https://github.com/simolus3/drift/issues/new'),
|
|
_text(
|
|
'to make suggestions.\nAlso, thanks to Koen Van Looveren for writing '),
|
|
_link('drift_db_viewer',
|
|
'https://github.com/vanlooverenkoen/db_viewer/'),
|
|
const TextSpan(text: ' which is used to show the database.'),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
static TextSpan _text(String content) {
|
|
return TextSpan(text: content);
|
|
}
|
|
|
|
static TextSpan _link(String content, String uri) {
|
|
return TextSpan(
|
|
text: content,
|
|
style: const TextStyle(
|
|
decoration: TextDecoration.underline,
|
|
),
|
|
recognizer: TapGestureRecognizer()
|
|
..onTap = () async {
|
|
await launchUrl(Uri.parse(uri));
|
|
},
|
|
);
|
|
}
|
|
}
|