enabled togglable chat history (during runtime) that uses different api endpoints.

This commit is contained in:
Joshua
2024-07-08 13:03:15 -06:00
parent 8956ed7885
commit ff4a54fbbc
4 changed files with 99 additions and 84 deletions
@@ -1,9 +1,22 @@
import 'dart:convert';
import 'package:json_annotation/json_annotation.dart';
@JsonSerializable()
class Chat {
late String message;
late bool isMe;
final String content;
final bool role;
// Most basic chat, text from server or from user.
Chat(this.message, this.isMe);
Chat(this.content, this.role);
String toJson() {
Map<String, dynamic> c = {
"content": content,
"role": role,
};
return json.encode(c);
}
// TODO: Overload constructors to allow for multimedia.
}
@@ -9,7 +9,7 @@ class ChatBubbleWidget extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: c.isMe ? MainAxisAlignment.end : MainAxisAlignment.start,
mainAxisAlignment: c.role ? MainAxisAlignment.end : MainAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.all(16.0),
@@ -18,14 +18,14 @@ class ChatBubbleWidget extends StatelessWidget{
borderRadius: BorderRadius.only(
topLeft: const Radius.circular(12.0),
topRight: const Radius.circular(12.0),
bottomLeft: c.isMe ? const Radius.circular(12.0) : const Radius
bottomLeft: c.role ? const Radius.circular(12.0) : const Radius
.circular(0.0),
bottomRight: c.isMe ? const Radius.circular(12.0) : const Radius
bottomRight: c.role ? const Radius.circular(12.0) : const Radius
.circular(0.0),
),
color: c.isMe ? Colors.blue[200] : Colors.grey[200],
color: c.role ? Colors.blue[200] : Colors.grey[200],
),
child: Text(c.message),
child: Text(c.content),
),
],
);
@@ -1,3 +1,4 @@
import 'package:app/util/server.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:easy_debounce/easy_debounce.dart';
import 'package:flutter/material.dart';
@@ -58,8 +59,9 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.end,
// TODO: Implement the context upload buttons
children: [
Expanded(
Expanded( // TODO: File context upload
child: Padding(
padding: const EdgeInsets.all(14),
child: FlutterFlowIconButton(
@@ -78,7 +80,7 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
),
),
Expanded(
Expanded( // TODO: Photo context upload
child: Padding(
padding: const EdgeInsets.all(14),
child: FlutterFlowIconButton(
@@ -97,7 +99,7 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
),
),
Expanded(
Expanded( // TODO: Microphone context upload -> or STT??
child: Padding(
padding: const EdgeInsets.all(14),
child: FlutterFlowIconButton(
@@ -116,7 +118,7 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
),
),
Expanded(
Expanded( // TODO: Video context upload
child: Padding(
padding: const EdgeInsets.all(14),
child: FlutterFlowIconButton(
@@ -135,7 +137,7 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
),
),
Expanded(
Expanded( // TODO: Camera context upload
child: Padding(
padding: const EdgeInsets.all(14),
child: FlutterFlowIconButton(
@@ -173,8 +175,6 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
autofocus: true,
textCapitalization: TextCapitalization.none,
textInputAction: TextInputAction.go,
obscureText: false,
decoration: InputDecoration(
isDense: false,
counterStyle: AppTheme.bodyMedium,
@@ -218,8 +218,11 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
textAlign: TextAlign.start,
maxLines: 5,
minLines: 1,
validator:
_model.textControllerValidator.asValidator(context),
validator: _model.textControllerValidator.asValidator(context),
textInputAction: TextInputAction.send, // "Send" on keyboard
onFieldSubmitted: (text) {
updateFromLatestInput(text); // TODO: Connect with multimedia
},
),
),
),
@@ -230,4 +233,10 @@ class _PromptBoxWidgetState extends State<PromptBoxWidget> {
),
);
}
void updateFromLatestInput(String input) {
Server s = Server();
s.setPrompt(input);
print(s.getResponse());
}
}