simple_translator 1.0.0
simple_translator: ^1.0.0 copied to clipboard
A simple and lightweight package for translating text using the Google Translate API.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:simple_translator/simple_translator.dart';
void main() {
runApp(const TranslateApp());
}
class TranslateApp extends StatelessWidget {
const TranslateApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Translator Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const TranslatorScreen(),
);
}
}
class TranslatorScreen extends StatefulWidget {
const TranslatorScreen({super.key});
@override
State<TranslatorScreen> createState() => _TranslatorScreenState();
}
class _TranslatorScreenState extends State<TranslatorScreen> {
final _inputController = TextEditingController();
String _translatedText = '';
String _hardcodedResult = '';
bool _loading = false;
final _translator = GoogleTranslator(client: ClientType.siteGT);
Future<void> _translateInput() async {
setState(() => _loading = true);
try {
final result = await _translator.translate(
_inputController.text,
from: 'auto',
to: 'en',
);
setState(() {
_translatedText = result.text;
});
} catch (e) {
setState(() {
_translatedText = 'Error: $e';
});
} finally {
setState(() => _loading = false);
}
}
Future<void> _translateHardcoded() async {
setState(() => _loading = true);
try {
final translation = await _translator.translate(
'Dart is very cool!',
to: 'pl',
);
setState(() {
_hardcodedResult =
'Original: ${translation.source}\nTranslated (to Polish): ${translation.text}';
});
} catch (e) {
setState(() {
_hardcodedResult = 'Hardcoded translation error: $e';
});
} finally {
setState(() => _loading = false);
}
}
@override
void dispose() {
_inputController.dispose();
_translator.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Translator')),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
controller: _inputController,
decoration: const InputDecoration(
labelText: 'Enter text',
border: OutlineInputBorder(),
),
minLines: 2,
maxLines: 5,
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _loading ? null : _translateInput,
child: _loading
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Colors.white,
),
)
: const Text('Translate to English'),
),
const SizedBox(height: 24),
const Text(
'Translated:',
style: TextStyle(fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
SelectableText(_translatedText),
const Divider(height: 40),
ElevatedButton(
onPressed: _loading ? null : _translateHardcoded,
child: const Text(
'Translate Example: "Dart is very cool!" → Polish',
),
),
const SizedBox(height: 16),
const Text(
'Programmatic Translation:',
style: TextStyle(fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
SelectableText(_hardcodedResult),
],
),
),
);
}
}