mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-29 20:40:35 +00:00 
			
		
		
		
	Improve widget for submitting user feedback
This commit is contained in:
		
							
								
								
									
										2
									
								
								lib/l10n
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								lib/l10n
									
									
									
									
									
								
							 Submodule lib/l10n updated: ad2e43ea5e...c81c1c79d1
									
								
							| @@ -9,6 +9,7 @@ import 'package:inventree/widget/dialogs.dart'; | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:font_awesome_flutter/font_awesome_flutter.dart'; | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; | ||||||
| import 'package:inventree/l10.dart'; | import 'package:inventree/l10.dart'; | ||||||
|  | import 'package:inventree/widget/submit_feedback.dart'; | ||||||
|  |  | ||||||
| import 'package:url_launcher/url_launcher.dart'; | import 'package:url_launcher/url_launcher.dart'; | ||||||
|  |  | ||||||
| @@ -129,43 +130,14 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void _sendReport(BuildContext context, String message) async { |  | ||||||
|     bool result = await sentryReportMessage(message); |  | ||||||
|  |  | ||||||
|     if (result) { |  | ||||||
|       showSnackIcon( |  | ||||||
|         L10().feedbackSuccess, |  | ||||||
|         success: true, |  | ||||||
|       ); |  | ||||||
|     } else { |  | ||||||
|       showSnackIcon( |  | ||||||
|         L10().feedbackError, |  | ||||||
|         success: false, |  | ||||||
|       ); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   void _submitFeedback(BuildContext context) async { |   void _submitFeedback(BuildContext context) async { | ||||||
|  |  | ||||||
|     TextEditingController _controller = TextEditingController(); |     Navigator.push( | ||||||
|  |       context, | ||||||
|     _controller.clear(); |       MaterialPageRoute( | ||||||
|  |         builder: (context) => SubmitFeedbackWidget(), | ||||||
|     showFormDialog( |       ) | ||||||
|       L10().submitFeedback, |  | ||||||
|       key: _feedbackKey, |  | ||||||
|       callback: () { |  | ||||||
|         _sendReport(context, _controller.text); |  | ||||||
|       }, |  | ||||||
|       fields: <Widget>[ |  | ||||||
|         TextField( |  | ||||||
|           decoration: InputDecoration( |  | ||||||
|           ), |  | ||||||
|           keyboardType: TextInputType.multiline, |  | ||||||
|           maxLines: null, |  | ||||||
|           controller: _controller |  | ||||||
|         ) |  | ||||||
|       ] |  | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
							
								
								
									
										94
									
								
								lib/widget/submit_feedback.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								lib/widget/submit_feedback.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  | import 'package:email_validator/email_validator.dart'; | ||||||
|  | import 'package:flutter/cupertino.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; | ||||||
|  | import 'package:inventree/inventree/sentry.dart'; | ||||||
|  | import 'package:inventree/widget/snacks.dart'; | ||||||
|  |  | ||||||
|  | import '../l10.dart'; | ||||||
|  |  | ||||||
|  | class SubmitFeedbackWidget extends StatefulWidget { | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   _SubmitFeedbackState createState() => _SubmitFeedbackState(); | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class _SubmitFeedbackState extends State<SubmitFeedbackWidget> { | ||||||
|  |  | ||||||
|  |   final _formkey = new GlobalKey<FormState>(); | ||||||
|  |  | ||||||
|  |   String message = ""; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |  | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar( | ||||||
|  |         title: Text(L10().submitFeedback), | ||||||
|  |         actions: [ | ||||||
|  |           IconButton( | ||||||
|  |             icon: FaIcon(FontAwesomeIcons.paperPlane), | ||||||
|  |             onPressed: () async { | ||||||
|  |               if (_formkey.currentState!.validate()) { | ||||||
|  |                 _formkey.currentState!.save(); | ||||||
|  |  | ||||||
|  |                 // Upload | ||||||
|  |                 bool result = await sentryReportMessage(message); | ||||||
|  |  | ||||||
|  |                 if (result) { | ||||||
|  |                   showSnackIcon( | ||||||
|  |                     L10().feedbackSuccess, | ||||||
|  |                     success: true, | ||||||
|  |                   ); | ||||||
|  |                 } else { | ||||||
|  |                   showSnackIcon( | ||||||
|  |                     L10().feedbackError, | ||||||
|  |                     success: false | ||||||
|  |                   ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 // Exit | ||||||
|  |                 Navigator.of(context).pop(); | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |           ) | ||||||
|  |         ], | ||||||
|  |       ), | ||||||
|  |       body: Form( | ||||||
|  |         key: _formkey, | ||||||
|  |         child: SingleChildScrollView( | ||||||
|  |           child: Column( | ||||||
|  |             mainAxisAlignment: MainAxisAlignment.start, | ||||||
|  |             mainAxisSize: MainAxisSize.max, | ||||||
|  |             crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |             children: [ | ||||||
|  |               TextFormField( | ||||||
|  |                 decoration: InputDecoration( | ||||||
|  |                   labelText: L10().feedback, | ||||||
|  |                   labelStyle: TextStyle(fontWeight: FontWeight.bold), | ||||||
|  |                 ), | ||||||
|  |                 maxLines: null, | ||||||
|  |                 keyboardType: TextInputType.multiline, | ||||||
|  |                 validator: (value) { | ||||||
|  |                   if (value == null || value.trim().isEmpty) { | ||||||
|  |                     return L10().valueCannotBeEmpty; | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |                 onSaved: (value) { | ||||||
|  |                   if (value != null) { | ||||||
|  |                     message = value; | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ) | ||||||
|  |         ) | ||||||
|  |       ) | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user