Flutter Templates
Cómo construir una aplicación de traductor de voz AI utilizando Flutter y Back4App
30 min
introducción en este tutorial, aprenderás cómo construir una aplicación de traductor de voz ai utilizando flutter como el marco de frontend y back4app como el servicio de backend la aplicación permitirá a los usuarios traducir voz, texto e imágenes en múltiples idiomas contará con traducción impulsada por ia, reconocimiento óptico de caracteres (ocr) y funcionalidades de reconocimiento de voz al final de este tutorial, habrás construido una aplicación que puede manejar traducciones en tiempo real y almacenar el historial en back4app para su uso futuro requisitos previos para completar este tutorial, necesitarás una cuenta de back4app regístrate para obtener una cuenta gratuita en back4app https //www back4app com/ flutter sdk instalado en tu máquina local sigue la guía de instalación de flutter https //flutter dev/docs/get started/install conocimientos básicos de dart y flutter si eres nuevo en flutter, revisa la documentación de flutter https //flutter dev/docs antes de continuar una cuenta con un proveedor de api de traducción como google cloud translation o deepl familiaridad con rest apis y programación asíncrona en dart paso 1 — configurando tu backend de back4app en este paso, configurarás una aplicación de back4app, definirás los modelos de datos y configurarás el backend para almacenar el historial de traducciones, idiomas y datos de usuario 1 1 crea una nueva aplicación en back4app inicia sesión en tu tablero de back4app https //dashboard back4app com/ haz clic en "crear nueva app" ingresa un nombre de la app (por ejemplo, "traductor de voz ai") y selecciona tu ícono de la app elige la ubicación de tu servidor si se te solicita haz clic en "crear" 1 2 recupera las claves de la aplicación navega a configuración de la app > seguridad y claves en el tablero de tu aplicación anota el id de la aplicación y el cliente clave estos serán necesarios para la configuración de la aplicación flutter 1 3 define tus modelos de datos crearemos las siguientes clases en back4app usuario (predeterminado) traducción idioma frase entradadeldiccionario 1 3 1 crear la clase de traducción ir a base de datos > navegador haga clic en "crear una clase" elija "personalizado" y nómbralo traducción haga clic en "crear clase" agregue las siguientes columnas a traducción usuario (pointer< user>) apunta al objeto usuario idiomafuente (string) código del idioma de origen idiomaobjetivo (string) código del idioma objetivo textofuente (string) el texto original a traducir textotraducido (string) el texto traducido tipotraducción (string) tipo de traducción ( voz , texto , imagen ) marcatemporal (datetime) 1 3 2 crear la clase language repite los pasos para crear una nueva clase llamada language agrega las siguientes columnas a language nombre (string) el nombre del idioma (por ejemplo, "inglés") código (string) código iso del idioma (por ejemplo, "en") flagiconurl (string) url de la imagen de la bandera que representa el idioma 1 3 3 crear la clase phrase crea una clase llamada phrase agregue las siguientes columnas a frase categoría (cadena) la categoría de la frase (por ejemplo, "saludos") idiomafuente (cadena) código del idioma de origen idiomaobjetivo (cadena) código del idioma objetivo textofuente (cadena) la frase original textotraducido (cadena) la frase traducida 1 3 4 crear la clase dictionaryentry cree una clase llamada dictionaryentry agregue las siguientes columnas a dictionaryentry palabra (cadena) la palabra que se está definiendo idioma (cadena) el idioma de la palabra definición (cadena) la definición de la palabra ejemplos (array) oraciones de ejemplo que utilizan la palabra 1 4 establecer permisos a nivel de clase asegúrate de que solo los usuarios autenticados puedan acceder a sus propios datos para cada clase, ve a seguridad > permisos a nivel de clase (clp) establece el clp para permitir acceso de lectura/escritura solo a usuarios autenticados paso 2 — inicializando tu proyecto flutter en este paso, configurarás un proyecto flutter y lo configurarás para conectarse a back4app 2 1 crear un nuevo proyecto flutter abre tu terminal y ejecuta flutter create ai voice translator navega al directorio del proyecto cd ai voice translator 2 2 agregar dependencias requeridas abre pubspec yaml y agrega las siguientes dependencias dependencies flutter sdk flutter parse server sdk flutter ^4 0 1 flutter tts ^3 3 1 speech to text ^5 3 0 google ml kit ^0 7 3 provider ^6 0 2 http ^0 13 4 ejecuta flutter pub get para instalar los paquetes 2 3 inicializa parse en tu aplicación flutter crea un nuevo archivo lib/config/back4app config dart // lib/config/back4app config dart const string keyapplicationid = 'your application id'; const string keyclientkey = 'your client key'; const string keyparseserverurl = 'https //parseapi back4app com'; reemplaza 'your application id' y 'your client key' con las claves de back4app en lib/main dart , inicializa parse // lib/main dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; import 'config/back4app config dart'; import 'app dart'; void main() async { widgetsflutterbinding ensureinitialized(); await parse() initialize( keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true, debug true, ); runapp(myapp()); } crea lib/app dart // lib/app dart import 'package\ flutter/material dart'; import 'screens/home screen dart'; class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( title 'ai voice translator', theme themedata(primaryswatch colors blue), home homescreen(), ); } } paso 3 — implementación de la traducción de texto la primera característica a implementar es la traducción básica de texto 3 1 configurar el servicio de traducción crea lib/services/translation service dart para gestionar las interacciones con una api de traducción (api de traducción de google cloud o deepl) // lib/services/translation service dart import 'dart\ convert'; import 'package\ http/http dart' as http; class translationservice { final string apikey = 'your translation api key'; final string apiurl = 'https //translation googleapis com/language/translate/v2'; future\<string> translatetext(string text, string sourcelang, string targetlang) async { final response = await http post( uri parse(apiurl), headers { 'content type' 'application/json', 'authorization' 'bearer $apikey', }, body jsonencode({ 'q' text, 'source' sourcelang, 'target' targetlang, 'format' 'text', }), ); if (response statuscode == 200) { final data = jsondecode(response body); return data\['data']\['translations']\[0]\['translatedtext']; } else { throw exception('translation failed'); } } } 3 2 implementar el modelo de idioma crea lib/models/language dart para representar los idiomas soportados // lib/models/language dart class language { final string name; final string code; final string flagiconurl; language({ required this name, required this code, required this flagiconurl, }); } 3 3 crear pantalla de traducción de texto crear lib/screens/text translation screen dart para manejar la entrada de texto y la traducción // lib/screens/text translation screen dart import 'package\ flutter/material dart'; import ' /services/translation service dart'; import ' /models/language dart'; class texttranslationscreen extends statefulwidget { @override texttranslationscreenstate createstate() => texttranslationscreenstate(); } class texttranslationscreenstate extends state\<texttranslationscreen> { final translationservice translationservice = translationservice(); final texteditingcontroller textcontroller = texteditingcontroller(); string translatedtext = ''; language? sourcelanguage; language? targetlanguage; future\<void> translate() async { if (sourcelanguage != null && targetlanguage != null) { final translation = await translationservice translatetext( textcontroller text, sourcelanguage! code, targetlanguage! code, ); setstate(() { translatedtext = translation; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('text translation'), ), body padding( padding const edgeinsets all(16), child column( children \[ textfield( controller textcontroller, decoration inputdecoration(labeltext 'enter text to translate'), ), sizedbox(height 10), // implement language selectors here elevatedbutton(onpressed translate, child text('translate')), sizedbox(height 20), text(translatedtext), ], ), ), ); } } paso 4 — implementando la traducción de voz en este paso, agregarás la traducción de voz integrando speech to text y text to speech funcionalidades 4 1 configurar el reconocimiento de voz crear lib/services/speech recognition service dart usando el speech to text paquete // lib/services/speech recognition service dart import 'package\ speech to text/speech to text dart' as stt; class speechrecognitionservice { final stt speechtotext speech = stt speechtotext(); future\<string?> listenforspeech() async { bool available = await speech initialize(); if (available) { await speech listen(); return await future delayed(duration(seconds 5), () { speech stop(); return speech lastrecognizedwords; }); } return null; } } 4 2 agregar texto a voz (tts) crear lib/services/tts service dart usando el flutter tts paquete // lib/services/tts service dart import 'package\ flutter tts/flutter tts dart'; class ttsservice { final fluttertts fluttertts = fluttertts(); future\<void> speak(string text, string languagecode) async { await fluttertts setlanguage(languagecode); await fluttertts speak(text); } } 4 3 crear pantalla de traducción de voz crear lib/screens/voice translation screen dart para manejar la traducción de voz // lib/screens/voice translation screen dart import 'package\ flutter/material dart'; import ' /services/speech recognition service dart'; import ' /services/translation service dart'; import ' /services/tts service dart'; class voicetranslationscreen extends statefulwidget { @override voicetranslationscreenstate createstate() => voicetranslationscreenstate(); } class voicetranslationscreenstate extends state\<voicetranslationscreen> { final speechrecognitionservice speechrecognitionservice = speechrecognitionservice(); final translationservice translationservice = translationservice(); final ttsservice ttsservice = ttsservice(); string? recognizedtext; string? translatedtext; future\<void> translatespeech() async { recognizedtext = await speechrecognitionservice listenforspeech(); if (recognizedtext != null) { translatedtext = await translationservice translatetext( recognizedtext!, 'en', // hardcoded source language (english) 'es', // hardcoded target language (spanish) ); setstate(() {}); ttsservice speak(translatedtext!, 'es'); } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('voice translation'), ), body center( child column( mainaxisalignment mainaxisalignment center, children \[ if (recognizedtext != null) text('recognized $recognizedtext'), if (translatedtext != null) text('translated $translatedtext'), sizedbox(height 20), elevatedbutton(onpressed translatespeech, child text('start voice translation')), ], ), ), ); } } paso 5 — implementación de la traducción de imágenes (ocr) 5 1 configurar el servicio ocr crear lib/services/ocr service dart utilizando el google ml kit paquete // lib/services/ocr service dart import 'package\ google ml kit/google ml kit dart'; class ocrservice { final textrecognizer = googlemlkit vision textrecognizer(); future\<string?> extracttextfromimage(string imagepath) async { final inputimage = inputimage fromfilepath(imagepath); final recognizedtext = await textrecognizer processimage(inputimage); return recognizedtext text; } } 5 2 crear pantalla de traducción de imágenes crear lib/screens/image translation screen dart para manejar la entrada de imágenes y ocr // lib/screens/image translation screen dart import 'package\ flutter/material dart'; import 'package\ image picker/image picker dart'; import ' /services/ocr service dart'; import ' /services/translation service dart'; class imagetranslationscreen extends statefulwidget { @override imagetranslationscreenstate createstate() => imagetranslationscreenstate(); } class imagetranslationscreenstate extends state\<imagetranslationscreen> { final ocrservice ocrservice = ocrservice(); final translationservice translationservice = translationservice(); string? extractedtext; string? translatedtext; future\<void> pickandtranslateimage() async { final picker = imagepicker(); final pickedfile = await picker getimage(source imagesource gallery); if (pickedfile != null) { extractedtext = await ocrservice extracttextfromimage(pickedfile path); if (extractedtext != null) { translatedtext = await translationservice translatetext(extractedtext!, 'en', 'es'); setstate(() {}); } } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('image translation'), ), body center( child column( mainaxisalignment mainaxisalignment center, children \[ if (extractedtext != null) text('extracted $extractedtext'), if (translatedtext != null) text('translated $translatedtext'), sizedbox(height 20), elevatedbutton(onpressed pickandtranslateimage, child text('pick image for translation')), ], ), ), ); } } paso 6 — historial de traducción y libro de frases en este paso, implementarás el guardado del historial de traducción y la gestión de un libro de frases 6 1 guardar historial de traducción actualizar lib/services/translation service dart para guardar el historial de traducciones en back4app import 'package\ parse server sdk flutter/parse server sdk dart'; import ' /models/translation dart'; class translationservice { // existing translation logic future\<void> savetranslation(translation translation) async { final translationobject = parseobject('translation') set('user', parseuser currentuser) set('sourcelanguage', translation sourcelanguage) set('targetlanguage', translation targetlanguage) set('sourcetext', translation sourcetext) set('translatedtext', translation translatedtext) set('translationtype', translation type); await translationobject save(); } } 6 2 implementar libro de frases crear lib/screens/phrase book screen dart para gestionar frases comunes // lib/screens/phrase book screen dart import 'package\ flutter/material dart'; import ' /models/phrase dart'; import ' /services/phrase service dart'; class phrasebookscreen extends statelesswidget { final phraseservice phraseservice = phraseservice(); @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('phrase book'), ), body futurebuilder\<list\<phrase>>( future phraseservice fetchphrases(), builder (context, snapshot) { if (snapshot connectionstate == connectionstate waiting) { return center(child circularprogressindicator()); } if (!snapshot hasdata || snapshot data! isempty) { return center(child text('no phrases found ')); } return listview\ builder( itemcount snapshot data! length, itembuilder (context, index) { final phrase = snapshot data!\[index]; return listtile( title text('${phrase sourcetext} → ${phrase translatedtext}'), subtitle text('category ${phrase category}'), ); }, ); }, ), ); } } conclusión siguiendo este tutorial, has construido una aplicación ai voice translator app rica en características con flutter y back4app implementaste traducción de texto básica y avanzada traducción de voz a voz utilizando reconocimiento de voz y texto a voz traducción de imagen a texto utilizando ocr gestión del historial de traducción y un libro de frases para expresiones comunes próximos pasos mejorar ui/ux mejora la interfaz de la aplicación para una experiencia de usuario más fluida mejorar el manejo de errores agregar manejo de errores y mecanismos de respaldo para fallos de api implementar modo offline almacenar en caché traducciones comunes, frases e historial para acceso sin conexión desplegar la aplicación preparar la aplicación para su despliegue en plataformas ios y android