1
+ import 'dart:convert' ;
2
+
3
+ import 'package:dio/dio.dart' ;
1
4
import 'package:flutter/material.dart' ;
5
+ import 'package:http/http.dart' ;
2
6
import 'package:typewritertext/typewritertext.dart' ;
3
7
import '../models/chat_models.dart' ;
8
+ import '../network/app_urls.dart' ;
9
+ import '../network/ko_exception.dart' ;
4
10
import '../theme/app_theme.dart' ;
5
11
import '../utils/constants.dart' ;
6
12
import 'package:responsive_sizer/responsive_sizer.dart' ;
@@ -18,6 +24,31 @@ class _ChatScreenState extends State<ChatScreen> {
18
24
final TextEditingController _textController = TextEditingController ();
19
25
final _scrollController = ScrollController ();
20
26
27
+ Future <void > sendMessage (String message) async {
28
+ try {
29
+ final response = await post (Uri .parse ("${AppUrl .chat }$message " ));
30
+ debugPrint ("--- Chat request ${AppUrl .chat }$message " );
31
+
32
+ if (response.statusCode == 200 ) {
33
+ final dynamic data = json.decode (response.body);
34
+ debugPrint ("--- Response Data for docs : $data " );
35
+ _messages.add (ChatMessage (content: data, is_bot_text: true ));
36
+ } else {
37
+ throw Exception (
38
+ 'Could not parse response. erroe code ${response .statusCode }' );
39
+ }
40
+ } on DioError catch (e) {
41
+ if (e.response != null && e.response! .statusCode != null ) {
42
+ throw KoException (
43
+ statusCode: e.response! .statusCode! ,
44
+ message: e.response! .data.toString (),
45
+ );
46
+ } else {
47
+ throw Exception (e.message);
48
+ }
49
+ }
50
+ }
51
+
21
52
@override
22
53
void initState () {
23
54
super .initState ();
@@ -33,7 +64,7 @@ class _ChatScreenState extends State<ChatScreen> {
33
64
crossAxisAlignment: CrossAxisAlignment .center,
34
65
children: [
35
66
const CircleAvatar (
36
- backgroundImage: AssetImage ('images/profile.jpg ' ),
67
+ backgroundImage: AssetImage ('images/app_logo.png ' ),
37
68
radius: 20 ,
38
69
),
39
70
SizedBox (
@@ -96,12 +127,15 @@ class _ChatScreenState extends State<ChatScreen> {
96
127
disabledBorder: kChatInput,
97
128
focusedBorder: kChatInput,
98
129
suffixIcon: IconButton (
99
- onPressed: () {
130
+ onPressed: () async {
100
131
setState (() {
101
132
_messages.add (ChatMessage (
102
133
content: _textController.text, is_bot_text: false ));
103
134
isLoading = true ;
104
135
});
136
+ await sendMessage (_textController.text);
137
+
138
+ setState (() {});
105
139
// on recupere la saisie de l'user au sein d'une variable et on vide le texfield
106
140
var input = _textController.text;
107
141
_textController.clear ();
@@ -126,11 +160,13 @@ class _ChatScreenState extends State<ChatScreen> {
126
160
child: Container (
127
161
color: Colors .grey[600 ],
128
162
child: IconButton (
129
- onPressed: () {
163
+ onPressed: () async {
164
+ await sendMessage (_textController.text);
130
165
// afficher l'entrée de l'utilisateur
131
166
setState (() {
132
167
_messages.add (ChatMessage (
133
168
content: _textController.text, is_bot_text: false ));
169
+
134
170
isLoading = true ;
135
171
});
136
172
// on recupere la saisie de l'user au sein d'une variable et on vide le texfield
@@ -190,7 +226,7 @@ class ChatMessageWidget extends StatelessWidget {
190
226
padding: const EdgeInsets .all (15 ),
191
227
child: is_bot_text == true
192
228
? Row (
193
- mainAxisAlignment: MainAxisAlignment .end,
229
+ mainAxisAlignment: MainAxisAlignment .end,
194
230
children: [
195
231
Flexible (
196
232
child: Container (
0 commit comments