From 44dc5c24ae166a968c97ef91c48e30677c229c5d Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 13 Nov 2020 11:25:55 +0100 Subject: [PATCH] put error text inside textfield --- example/ios/Podfile.lock | 2 +- example/lib/advanced_options_page.dart | 85 +++++++++++++++++++++----- example/pubspec.yaml | 2 +- 3 files changed, 72 insertions(+), 17 deletions(-) diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index f23764fa..5b00ea2d 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -268,7 +268,7 @@ SPEC CHECKSUMS: SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e - wakelock: 0d4a70faf8950410735e3f61fb15d517c8a6efc4 + wakelock: bfc7955c418d0db797614075aabbc58a39ab5107 PODFILE CHECKSUM: eb001256612a59f8f9e4d083ad8b9671e69dd184 diff --git a/example/lib/advanced_options_page.dart b/example/lib/advanced_options_page.dart index 8a4c79c0..59c59c26 100644 --- a/example/lib/advanced_options_page.dart +++ b/example/lib/advanced_options_page.dart @@ -17,10 +17,13 @@ class _AdvancedOptionsPageState extends State { final _formKey = GlobalKey(); final TextEditingController _apiKeyController = TextEditingController(); + String _apiKeyError; final TextEditingController _userIdController = TextEditingController(); + String _userIdError; final TextEditingController _userTokenController = TextEditingController(); + String _userTokenError; final TextEditingController _usernameController = TextEditingController(); @@ -65,17 +68,34 @@ class _AdvancedOptionsPageState extends State { children: [ TextFormField( controller: _apiKeyController, + onChanged: (_) { + if (_apiKeyError != null) { + setState(() { + _apiKeyError = null; + }); + } + }, validator: (value) { if (value.isEmpty) { - return 'Please enter the Chat API Key'; + setState(() { + _apiKeyError = 'Please enter the Chat API Key'; + }); + return _apiKeyError; } return null; }, + style: TextStyle( + fontSize: 14, + color: Colors.black, + ), decoration: InputDecoration( + errorStyle: TextStyle(fontSize: 0), labelStyle: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, - color: Colors.black.withOpacity(.5), + color: _apiKeyError != null + ? Color(0xffff3742) + : Colors.black.withOpacity(.5), ), border: UnderlineInputBorder( borderRadius: BorderRadius.circular(8), @@ -83,7 +103,8 @@ class _AdvancedOptionsPageState extends State { ), fillColor: Color(0xffF5F5F5), filled: true, - labelText: 'Chat API Key', + labelText: + 'Chat API Key ${_apiKeyError != null ? ': $_apiKeyError' : ''}', ), textInputAction: TextInputAction.next, ), @@ -91,18 +112,35 @@ class _AdvancedOptionsPageState extends State { padding: const EdgeInsets.only(top: 8.0), child: TextFormField( controller: _userIdController, + onChanged: (_) { + if (_userIdError != null) { + setState(() { + _userIdError = null; + }); + } + }, validator: (value) { if (value.isEmpty) { - return 'Please enter the User ID'; + setState(() { + _userIdError = 'Please enter the User ID'; + }); + return _userIdError; } return null; }, + style: TextStyle( + fontSize: 14, + color: Colors.black, + ), textInputAction: TextInputAction.next, decoration: InputDecoration( + errorStyle: TextStyle(fontSize: 0), labelStyle: TextStyle( fontWeight: FontWeight.bold, fontSize: 14, - color: Colors.black.withOpacity(.5), + color: _userIdError != null + ? Color(0xffff3742) + : Colors.black.withOpacity(.5), ), border: UnderlineInputBorder( borderRadius: BorderRadius.circular(8), @@ -110,26 +148,44 @@ class _AdvancedOptionsPageState extends State { ), fillColor: Color(0xffF5F5F5), filled: true, - labelText: 'User ID', + labelText: + 'User ID ${_userIdError != null ? ': $_userIdError' : ''}', ), ), ), Padding( padding: const EdgeInsets.only(top: 8.0), child: TextFormField( + onChanged: (_) { + if (_userTokenError != null) { + setState(() { + _userTokenError = null; + }); + } + }, controller: _userTokenController, validator: (value) { if (value.isEmpty) { - return 'Please enter the user token'; + setState(() { + _userTokenError = 'Please enter the user token'; + }); + return _userTokenError; } return null; }, + style: TextStyle( + fontSize: 14, + color: Colors.black, + ), textInputAction: TextInputAction.next, decoration: InputDecoration( + errorStyle: TextStyle(fontSize: 0), labelStyle: TextStyle( fontWeight: FontWeight.bold, fontSize: 14, - color: Colors.black.withOpacity(.5), + color: _userTokenError != null + ? Color(0xffff3742) + : Colors.black.withOpacity(.5), ), border: UnderlineInputBorder( borderRadius: BorderRadius.circular(8), @@ -137,7 +193,8 @@ class _AdvancedOptionsPageState extends State { ), fillColor: Color(0xffF5F5F5), filled: true, - labelText: 'User Token', + labelText: + 'User Token ${_userTokenError != null ? ': $_userTokenError' : ''}', ), ), ), @@ -183,13 +240,13 @@ class _AdvancedOptionsPageState extends State { if (loading) { return; } - loading = true; if (_formKey.currentState.validate()) { final apiKey = _apiKeyController.text; final userId = _userIdController.text; final userToken = _userTokenController.text; final username = _usernameController.text; + loading = true; showDialog( barrierDismissible: false, context: context, @@ -232,11 +289,9 @@ class _AdvancedOptionsPageState extends State { errorText = e['message'] ?? errorText; } Navigator.pop(context); - Scaffold.of(context).showSnackBar( - SnackBar( - content: Text(errorText), - ), - ); + setState(() { + _apiKeyError = errorText; + }); loading = false; await client.disconnect(); return; diff --git a/example/pubspec.yaml b/example/pubspec.yaml index f85127f0..d4da197e 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,6 +1,6 @@ name: example description: A new Flutter project. -version: 1.0.55+57 +version: 1.0.56+58 environment: sdk: ">=2.2.2 <3.0.0"