Last active
September 15, 2021 16:11
-
-
Save Monik09/1ffab9bf31ffcc63005bcdb291fa1e01 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert'; | |
import 'dart:developer'; | |
import 'package:amazon_cognito_identity_dart_2/sig_v4.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:http/http.dart' as http; | |
import 'package:sigv4/sigv4.dart'; | |
class BotService { | |
Map<String,dynamic> result; | |
String botName= "<NAME_OF_BOT>"; | |
String kAccessKeyId = '<ACCESS_KEY>'; | |
String kSecretAccessKey = '<SECRET_ACCESS_KEY>'; | |
String botAlias= "<BOT_ALIAS>"; | |
String botAWSRegion= "<AWS_LEX_REGION>"; | |
Future<Map<String,dynamic>> callBot(String message) async { | |
var response; | |
String requestUrl= "https://runtime.lex."+botAWSRegion+".amazonaws.com/bot/"+botName+"/alias/"+botAlias+"/user/1234/text"; | |
Sigv4Client client = Sigv4Client( | |
region: botAWSRegion, | |
serviceName: 'lex', | |
defaultContentType: 'application/json; charset=utf-8', | |
keyId: kAccessKeyId, | |
accessKey: kSecretAccessKey, | |
); | |
final request = client.request( | |
requestUrl, | |
method: 'POST', | |
body: jsonEncode({'inputText': message}), | |
); | |
response = await http.post(request.url, | |
headers: request.headers, body: request.body); | |
result = jsonDecode(response.body); | |
return result; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:developer'; | |
import 'package:flutter/material.dart'; | |
import 'package:flutter_chat_ui/flutter_chat_ui.dart'; | |
import 'package:flutter_chat_types/flutter_chat_types.dart' as types; | |
import 'package:uuid/uuid.dart'; | |
import './bot_service.dart'; | |
class BotScreen extends StatefulWidget { | |
const BotScreen({Key? key}) : super(key: key); | |
@override | |
_BotScreenState createState() => _BotScreenState(); | |
} | |
class _BotScreenState extends State<BotScreen> { | |
List<types.Message> messages=[]; | |
final _user = const types.User(id: '1234556'); | |
final _bot = const types.User(id: "123"); | |
//id of bot and user doesn't matter here as we have only pair interaction | |
BotService _botService = BotService(); | |
@override | |
void initState() { | |
super.initState(); | |
_loadMessages(); | |
} | |
void _addMessage(types.Message message) async { | |
setState(() { | |
messages.insert(0, message); | |
}); | |
log("${message.toJson()["text"]}"); | |
var data = await _botService.callBot(message.toJson()["text"]); | |
log("#####${data['message']}"); | |
setState(() { | |
messages.insert(0, botMessageReply(data['message'])); | |
}); | |
} | |
types.Message botMessageReply(String message) { | |
return types.TextMessage( | |
author: _bot, | |
createdAt: DateTime.now().millisecondsSinceEpoch, | |
id: const Uuid().v4(), | |
text: message, | |
); | |
} | |
void _handleSendPressed(types.PartialText message) { | |
final textMessage = types.TextMessage( | |
author: _user, | |
createdAt: DateTime.now().millisecondsSinceEpoch, | |
id: const Uuid().v4(), | |
text: message.text, | |
); | |
_addMessage(textMessage); | |
} | |
void _loadMessages() async { | |
List<types.Message> messagesList = []; | |
Future.delayed(Duration(milliseconds: 300), () { | |
messagesList.add(types.TextMessage( | |
author: _bot, | |
createdAt: DateTime.now().millisecondsSinceEpoch, | |
id: const Uuid().v4(), | |
text: "Hello. My name is TUTU- your bot. How can I help you?", | |
)); | |
setState(() { | |
messages = messagesList; | |
}); | |
}); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar:AppBar(automaticallyImplyLeading: false,title:Text("BOT"),backgroundColor:Colors.purpleAccent), | |
body: Chat( | |
messages: messages, | |
showUserNames: true, | |
onSendPressed: _handleSendPressed, | |
user: _user, | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment