Skip to content

Instantly share code, notes, and snippets.

@Monik09
Last active September 15, 2021 16:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Monik09/1ffab9bf31ffcc63005bcdb291fa1e01 to your computer and use it in GitHub Desktop.
Save Monik09/1ffab9bf31ffcc63005bcdb291fa1e01 to your computer and use it in GitHub Desktop.
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;
}
}
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