mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-20 23:22:07 +00:00
- New switch in More > Settings > About "Enable logging". When ON, it inits the AppLogger and shows the "Share app logs" button below. When OFF, it disposes the AppLogger and hides the "Share app logs" button. It also prevents the AppLogger from init. OFF by default. - added localizations accordingly.
197 lines
8.2 KiB
Dart
197 lines
8.2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
|
import 'package:mangayomi/eval/model/m_bridge.dart';
|
|
import 'package:mangayomi/main.dart';
|
|
import 'package:mangayomi/models/settings.dart';
|
|
import 'package:mangayomi/modules/more/about/providers/check_for_update.dart';
|
|
import 'package:mangayomi/modules/more/about/providers/get_package_info.dart';
|
|
import 'package:mangayomi/modules/more/about/providers/logs_state.dart';
|
|
import 'package:mangayomi/modules/widgets/progress_center.dart';
|
|
import 'package:mangayomi/providers/l10n_providers.dart';
|
|
import 'package:mangayomi/providers/storage_provider.dart';
|
|
import 'package:mangayomi/utils/log/logger.dart';
|
|
import 'package:path/path.dart' as path;
|
|
import 'package:share_plus/share_plus.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
class AboutScreen extends ConsumerWidget {
|
|
const AboutScreen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final l10n = l10nLocalizations(context);
|
|
final checkForUpdates = ref.watch(checkForAppUpdatesProvider);
|
|
final enableLogs = ref.watch(logsStateProvider);
|
|
return Scaffold(
|
|
appBar: AppBar(title: Text(l10n!.about)),
|
|
body: ref
|
|
.watch(getPackageInfoProvider)
|
|
.when(
|
|
data: (data) => SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 40),
|
|
child: Image.asset(
|
|
"assets/app_icons/icon.png",
|
|
color: Theme.of(context).brightness == Brightness.light
|
|
? Colors.black
|
|
: Colors.white,
|
|
fit: BoxFit.cover,
|
|
height: 100,
|
|
),
|
|
),
|
|
Column(
|
|
children: [
|
|
const Divider(color: Colors.grey),
|
|
ListTile(
|
|
onTap: () {},
|
|
title: const Text('Version'),
|
|
subtitle: Text(
|
|
'Beta (${data.version})',
|
|
style: const TextStyle(fontSize: 12),
|
|
),
|
|
),
|
|
SwitchListTile(
|
|
title: Text(l10n.check_for_app_updates),
|
|
value: checkForUpdates,
|
|
onChanged: (value) {
|
|
isar.writeTxnSync(() {
|
|
final settings = isar.settings.getSync(227);
|
|
isar.settings.putSync(
|
|
settings!
|
|
..checkForAppUpdates = value
|
|
..updatedAt =
|
|
DateTime.now().millisecondsSinceEpoch,
|
|
);
|
|
});
|
|
ref.invalidate(checkForAppUpdatesProvider);
|
|
},
|
|
),
|
|
ListTile(
|
|
onTap: () {
|
|
ref.read(
|
|
checkForUpdateProvider(
|
|
context: context,
|
|
manualUpdate: true,
|
|
),
|
|
);
|
|
},
|
|
title: Text(l10n.check_for_update),
|
|
),
|
|
SwitchListTile(
|
|
title: Text(l10n.logs_on),
|
|
value: enableLogs,
|
|
onChanged: (value) {
|
|
isar.writeTxnSync(() {
|
|
final settings = isar.settings.getSync(227);
|
|
isar.settings.putSync(
|
|
settings!..enableLogs = value,
|
|
);
|
|
});
|
|
ref.invalidate(logsStateProvider);
|
|
if (value) {
|
|
AppLogger.init();
|
|
} else {
|
|
AppLogger.dispose();
|
|
}
|
|
},
|
|
),
|
|
if (enableLogs)
|
|
ListTile(
|
|
onTap: () async {
|
|
final storage = StorageProvider();
|
|
final directory = await storage
|
|
.getDefaultDirectory();
|
|
final file = File(
|
|
path.join(directory!.path, 'logs.txt'),
|
|
);
|
|
if (await file.exists()) {
|
|
if (Platform.isLinux) {
|
|
await Clipboard.setData(
|
|
ClipboardData(text: file.path),
|
|
);
|
|
}
|
|
if (context.mounted) {
|
|
final box =
|
|
context.findRenderObject() as RenderBox?;
|
|
SharePlus.instance.share(
|
|
ShareParams(
|
|
files: [XFile(file.path)],
|
|
text: "log.txt",
|
|
sharePositionOrigin:
|
|
box!.localToGlobal(Offset.zero) &
|
|
box.size,
|
|
),
|
|
);
|
|
}
|
|
} else {
|
|
botToast(l10n.no_app_logs);
|
|
}
|
|
},
|
|
title: Text(l10n.share_app_logs),
|
|
),
|
|
// ListTile(
|
|
// onTap: () {},
|
|
// title: const Text("What's news"),
|
|
// ),
|
|
// ListTile(
|
|
// onTap: () {},
|
|
// title: const Text('Help translation'),
|
|
// ),
|
|
// ListTile(
|
|
// onTap: () {},
|
|
// title: const Text('Privacy policy'),
|
|
// ),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
IconButton(
|
|
onPressed: () {
|
|
_launchInBrowser(
|
|
Uri.parse(
|
|
'https://github.com/kodjodevf/mangayomi',
|
|
),
|
|
);
|
|
},
|
|
icon: const Padding(
|
|
padding: EdgeInsets.only(left: 2.5, right: 2.5),
|
|
child: Icon(FontAwesomeIcons.github),
|
|
),
|
|
),
|
|
IconButton(
|
|
onPressed: () {
|
|
_launchInBrowser(
|
|
Uri.parse(
|
|
'https://discord.com/invite/EjfBuYahsP',
|
|
),
|
|
);
|
|
},
|
|
icon: const Padding(
|
|
padding: EdgeInsets.only(right: 5),
|
|
child: Icon(FontAwesomeIcons.discord),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
error: (error, stackTrace) => ErrorWidget(error),
|
|
loading: () => const ProgressCenter(),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
Future<void> _launchInBrowser(Uri url) async {
|
|
if (!await launchUrl(url, mode: LaunchMode.externalApplication)) {
|
|
throw 'Could not launch $url';
|
|
}
|
|
}
|