feat: bouton Signaler un bug dans les paramètres (rapport copiable avec infos techniques)
This commit is contained in:
@@ -245,6 +245,79 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rapport de bug autonome : on collecte une description + les infos
|
||||||
|
// techniques, et on copie un rapport prêt à coller dans un email de support.
|
||||||
|
void _showReportBugDialog() {
|
||||||
|
final descController = TextEditingController();
|
||||||
|
const supportEmail = 'quesnel.guillaume.j@gmail.com';
|
||||||
|
const appVersion = '1.0.0';
|
||||||
|
final platform = Theme.of(context).platform.name;
|
||||||
|
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => AlertDialog(
|
||||||
|
title: const Text('Signaler un bug'),
|
||||||
|
content: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const Text(
|
||||||
|
'Décrivez le problème : ce que vous faisiez, ce qui était attendu et ce qui s\'est passé.',
|
||||||
|
style: TextStyle(fontSize: 13, color: Colors.grey),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
TextField(
|
||||||
|
controller: descController,
|
||||||
|
maxLines: 5,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
hintText: 'Ex: l\'application se ferme quand j\'ouvre une session...',
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
Text(
|
||||||
|
'Infos techniques jointes : version $appVersion • $platform',
|
||||||
|
style: const TextStyle(fontSize: 11, color: Colors.grey),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
child: const Text('Annuler'),
|
||||||
|
),
|
||||||
|
ElevatedButton.icon(
|
||||||
|
icon: const Icon(Icons.copy, size: 18),
|
||||||
|
label: const Text('Copier le rapport'),
|
||||||
|
onPressed: () {
|
||||||
|
final desc = descController.text.trim();
|
||||||
|
final report = StringBuffer()
|
||||||
|
..writeln('--- Rapport de bug ---')
|
||||||
|
..writeln('Version : $appVersion')
|
||||||
|
..writeln('Plateforme : $platform')
|
||||||
|
..writeln('Date : ${DateTime.now().toIso8601String()}')
|
||||||
|
..writeln('')
|
||||||
|
..writeln('Description :')
|
||||||
|
..writeln(desc.isEmpty ? '(non renseignée)' : desc);
|
||||||
|
|
||||||
|
Clipboard.setData(ClipboardData(text: report.toString()));
|
||||||
|
Navigator.pop(context);
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(
|
||||||
|
content: Text('Rapport copié — collez-le dans un email à $supportEmail'),
|
||||||
|
backgroundColor: AppTheme.successColor,
|
||||||
|
duration: Duration(seconds: 5),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@@ -345,6 +418,13 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
subtitle: '1.0.0',
|
subtitle: '1.0.0',
|
||||||
onTap: () {},
|
onTap: () {},
|
||||||
),
|
),
|
||||||
|
_buildSettingsTile(
|
||||||
|
context: context,
|
||||||
|
icon: Icons.bug_report_outlined,
|
||||||
|
title: 'Signaler un bug',
|
||||||
|
subtitle: 'Aidez-nous à corriger les problèmes',
|
||||||
|
onTap: _showReportBugDialog,
|
||||||
|
),
|
||||||
_buildSettingsTile(
|
_buildSettingsTile(
|
||||||
context: context,
|
context: context,
|
||||||
icon: Icons.privacy_tip_outlined,
|
icon: Icons.privacy_tip_outlined,
|
||||||
|
|||||||
Reference in New Issue
Block a user