From fa406431bd443ffc558818ddb6e88c03f06a9f08 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 10 Jun 2025 12:05:14 +0200 Subject: [PATCH] use new input in settings --- .../mzansi_ai/package_tools/ai_chat.dart | 172 +++++++++++------- 1 file changed, 104 insertions(+), 68 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart index a2bde0d0..8d070e00 100644 --- a/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart +++ b/Frontend/lib/mih_packages/mzansi_ai/package_tools/ai_chat.dart @@ -4,10 +4,11 @@ import 'dart:convert'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_numeric_stepper.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_radio_options.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_env/env.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; @@ -370,26 +371,30 @@ class _AiChatState extends State { ), ], ), - const SizedBox(height: 5), + const SizedBox(height: 15), Row( - mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( width: 300, - child: MIHDropdownField( + child: MihRadioOptions( controller: _modelController, hintText: "AI Model", - dropdownOptions: const [ + fillColor: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + secondaryFillColor: + MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + requiredText: true, + radioOptions: const [ 'gemma3:4b', ], - required: true, - editable: true, - enableSearch: false, ), ), ], ), - const SizedBox(height: 15), + const SizedBox(height: 20), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ @@ -433,49 +438,24 @@ class _AiChatState extends State { ), ], ), - const SizedBox(height: 15), + const SizedBox(height: 10), Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.end, children: [ - IconButton.filled( - onPressed: () { - setState(() { - _chatFrontSize -= 1; - _fontSizeController.text = - _chatFrontSize.ceil().toString(); - }); - }, - icon: const Icon( - Icons.remove, - ), - ), - const SizedBox(width: 10), - MihTextFormField( - width: 200, - fillColor: MzanziInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzanziInnovationHub.of(context)! - .theme - .primaryColor(), - controller: _fontSizeController, - multiLineInput: false, - requiredText: true, - readOnly: true, - hintText: "Time", - ), - const SizedBox(width: 10), - IconButton.filled( - onPressed: () { - setState(() { - _chatFrontSize += 1; - _fontSizeController.text = - _chatFrontSize.ceil().toString(); - }); - }, - icon: const Icon( - Icons.add, + SizedBox( + width: 300, + child: MihNumericStepper( + controller: _fontSizeController, + fillColor: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + inputColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + hintText: "Font Size", + requiredText: true, + minValue: 1, + // maxValue: 5, + validationOn: true, ), ), ], @@ -537,6 +517,12 @@ class _AiChatState extends State { } } + void fontSizeChanged() { + setState(() { + _chatFrontSize = double.parse(_fontSizeController.text); + }); + } + @override void dispose() { // TODO: implement dispose @@ -545,12 +531,14 @@ class _AiChatState extends State { _fontSizeController.dispose(); _ttsVoiceController.dispose(); _ttsVoiceController.removeListener(voiceSelected); + _fontSizeController.removeListener(fontSizeChanged); client.endSession(); _flutterTts.stop(); } void initTTS() { - _flutterTts.setVolume(0.7); + _flutterTts.setVolume(1); + _fontSizeController.addListener(fontSizeChanged); // _flutterTts.setSpeechRate(0.6); // _flutterTts.setPitch(1.0); _flutterTts.getVoices.then( @@ -650,27 +638,75 @@ class _AiChatState extends State { ], ), Positioned( - left: 0, - top: 0, + left: 15, + top: 15, child: Visibility( visible: _showModelOptions.value == true, - child: IconButton.filled( - iconSize: 20, - onPressed: () { - if (_showModelOptions.value == true) { - setState(() { - _showModelOptions.value = false; - }); - } else { - setState(() { - _showModelOptions.value = true; - }); - } - }, - icon: const Icon( - Icons.settings, + child: Container( + // color: Colors.white, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(25), // Optional: rounds the corners + boxShadow: const [ + BoxShadow( + color: Color.fromARGB( + 60, 0, 0, 0), // 0.2 opacity = 51 in alpha (255 * 0.2) + spreadRadius: -2, + blurRadius: 10, + offset: Offset(0, 5), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.only( + top: 2.0, + left: 5.0, + ), + child: SizedBox( + width: 40, + child: IconButton.filled( + style: ButtonStyle( + backgroundColor: WidgetStateProperty.all( + MzanziInnovationHub.of(context)!.theme.errorColor()), + ), + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + iconSize: 20, + onPressed: () { + if (_showModelOptions.value == true) { + setState(() { + _showModelOptions.value = false; + }); + } else { + setState(() { + _showModelOptions.value = true; + }); + } + }, + icon: const Icon( + Icons.close, + ), + ), + ), ), ), + // IconButton.filled( + // iconSize: 20, + // onPressed: () { + // if (_showModelOptions.value == true) { + // setState(() { + // _showModelOptions.value = false; + // }); + // } else { + // setState(() { + // _showModelOptions.value = true; + // }); + // } + // }, + // icon: const Icon( + // Icons.settings, + // ), + // ), ), ), Positioned(