https://pub.dev/packages/dash_chat_2
APi key 를 발급 받는다.
회신으로 들어오는 답변은 다음 과 같다.
카테고리 범주등이 눈에 보인다. text 만 쓰기로 한다.
회신 받기까지의 코드는 아래에 ~
// respose.body 에서 text만 추출하기 ['candidates'][0]['content']['parts'][0]['text']
{candidates: [{content: {parts: [{text: 네, 안녕하세요. 무엇을 도와드릴까요?}], role: model}, finishReason: STOP, index: 0, safetyRatings: [{category: HARM_CATEGORY_SEXUALLY_EXPLICIT, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_HATE_SPEECH, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_HARASSMENT, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_DANGEROUS_CONTENT, probability: NEGLIGIBLE}] }], promptFeedback: {safetyRatings: [{category: HARM_CATEGORY_SEXUALLY_EXPLICIT, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_HATE_SPEECH, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_HARASSMENT, probability: NEGLIGIBLE}, {category: HARM_CATEGORY_DANGEROUS_CONTENT, probability: NEGLIGIBLE}]}}
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:dash_chat_2/dash_chat_2.dart';
import 'package:http/http.dart' as http;
import 'bard_key.dart';
// flutter pub add dash_chat_2
class BardChat extends StatefulWidget {
const BardChat({super.key});
@override
State<BardChat> createState() => _BardChatState();
}
class _BardChatState extends State<BardChat> {
final header = {'Content-Type': 'application/json'};
final baseUrl =
'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${APIKey.apiKey}';
ChatUser thisUser = ChatUser(id: '1', firstName: 'User');
ChatUser bardBot = ChatUser(id: '2', firstName: 'GEMINI');
List<ChatMessage> messageList = [];
List<ChatUser> chatting = [];
getData(ChatMessage msg) async {
chatting.add(bardBot);
messageList.insert(0, msg);
setState(() {});
var chatdata = {
'contents': [
{
'parts': [
{'text': msg.text}
]
}
]
};
await http.post(Uri.parse(baseUrl), headers: header, body: jsonEncode(chatdata)).then((value) {
if (value.statusCode == 200) {
var result = jsonDecode(value.body);
print(result['candidates'][0]['content']['parts'][0]['text']);
ChatMessage msg1 = ChatMessage(
text: result['candidates'][0]['content']['parts'][0]['text'],
user: bardBot,
createdAt: DateTime.now(),
);
messageList.insert(0, msg1);
} else {
print('error connection');
}
}).catchError((onError) {});
//
chatting.remove(bardBot);
setState(() {});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light(),
home: Scaffold(
appBar: AppBar(title: Text('bard gemini chat bubble')),
body: DashChat(
typingUsers: chatting,
currentUser: thisUser,
onSend: (ChatMessage msg) {
getData(msg);
},
messages: messageList,
),
));
}
}
'Flutter' 카테고리의 다른 글
Bloc 에서 if 는 되는데 Switch는 안되는 이유와 해결법 (0) | 2024.01.20 |
---|---|
Ai Chat , 패키지 없이 List로만 GPT or Bard , Gemini . 만들기// Flutter 2024. (0) | 2024.01.19 |
API Key Hiding with DotEnv. Api 키 보안 관리하기. 키를 환경설정 파일로 숨기는 방법 (1) | 2023.12.17 |
simple 코인 어플 만들기, 암호화 화폐 Bitcoin App , json으로 (0) | 2023.12.16 |
동화책 만들기? OnBoardingScreen with GPT. (0) | 2023.12.15 |