simple_text_utils 1.1.0
simple_text_utils: ^1.1.0 copied to clipboard
Paket utilitas sederhana untuk validasi dan format string di Dart & Flutter.
import 'package:flutter/material.dart';
import 'package:simple_text_utils/simple_text_utils.dart';
// Import package Anda
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Simple Text Utils Example',
theme: ThemeData(
primarySwatch: Colors.blue,
inputDecorationTheme: const InputDecorationTheme(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(8)),
),
),
),
home: const ExamplePage(),
);
}
}
class ExamplePage extends StatefulWidget {
const ExamplePage({super.key});
@override
State<ExamplePage> createState() => _ExamplePageState();
}
class _ExamplePageState extends State<ExamplePage> {
final _formKey = GlobalKey<FormState>();
final _nameController = TextEditingController();
// BARU: Controller dan variabel untuk Rupiah
final _rupiahController = TextEditingController();
String _formattedRupiah = '';
String _formattedName = '';
String _initials = '';
String _validationStatus = '';
@override
void dispose() {
_nameController.dispose();
_rupiahController.dispose(); // BARU: dispose controller
super.dispose();
}
void _formatText() {
setState(() {
_formattedName = _nameController.text.toTitleCase();
_initials = _nameController.text.getInitials();
});
}
// BARU: Fungsi untuk format Rupiah
void _formatRupiah() {
setState(() {
_formattedRupiah = _rupiahController.text.toRupiahFormat();
});
}
void _validateForm() {
final bool isValid = _formKey.currentState?.validate() ?? false;
setState(() {
if (isValid) {
_validationStatus = 'Form Valid!';
} else {
_validationStatus = 'Form Tidak Valid. Perbaiki error di atas.';
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Simple Text Utils Example'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Validator Example:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16),
Form(
key: _formKey,
child: Column(
children: [
TextFormField(
decoration: const InputDecoration(labelText: 'Enter your email'),
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: (value) {
if (!SimpleValidator.isValidEmail(value)) {
return 'Please enter a valid email.';
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration:
const InputDecoration(labelText: 'Enter Indonesian Phone'),
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: (value) {
if (!SimpleValidator.isValidIndonesianPhone(value)) {
return 'Please enter a valid Indonesian phone number.';
}
return null;
},
),
const SizedBox(height: 24),
ElevatedButton(
onPressed: _validateForm,
child: const Text('Validate Form'),
),
const SizedBox(height: 16),
if (_validationStatus.isNotEmpty)
Text(
_validationStatus,
style: TextStyle(
fontSize: 16,
color: _validationStatus.contains('Valid!')
? Colors.green.shade700
: Colors.red.shade700,
fontWeight: FontWeight.bold,
),
),
],
),
),
const Divider(height: 40),
const Text('Formatter Example:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16),
TextField(
controller: _nameController,
decoration:
const InputDecoration(labelText: 'Enter your full name'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _formatText,
child: const Text('Format Name'),
),
const SizedBox(height: 16),
if (_formattedName.isNotEmpty)
Text(
'Title Case: $_formattedName',
style: const TextStyle(fontSize: 16),
),
if (_initials.isNotEmpty)
Text(
'Initials: $_initials',
style: const TextStyle(fontSize: 16),
),
// --- UI BARU UNTUK RUPIAH FORMATTER ---
const SizedBox(height: 24), // Pemisah
TextField(
controller: _rupiahController,
decoration: const InputDecoration(
labelText: 'Enter a number (e.g., 1000000)'),
keyboardType: TextInputType.number,
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _formatRupiah,
child: const Text('Format to Rupiah'),
),
const SizedBox(height: 16),
if (_formattedRupiah.isNotEmpty)
Text(
'Rupiah Format: $_formattedRupiah',
style:
const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
// --- AKHIR DARI UI BARU ---
],
),
),
);
}
}