simple_text_utils 1.0.0
simple_text_utils: ^1.0.0 copied to clipboard
Paket utilitas sederhana untuk validasi dan format string di Dart & Flutter.
example/lib/main.dart
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();
String _formattedName = '';
String _initials = '';
// BARU: Variabel untuk menyimpan status validasi
String _validationStatus = '';
@override
void dispose() {
_nameController.dispose();
super.dispose();
}
void _formatText() {
setState(() {
_formattedName = _nameController.text.toTitleCase();
_initials = _nameController.text.getInitials();
});
}
// BARU: Fungsi untuk memvalidasi form
void _validateForm() {
// Panggil validate() dan simpan hasilnya (true jika valid, false jika tidak)
final bool isValid = _formKey.currentState?.validate() ?? false;
// Perbarui state untuk menampilkan pesan
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'),
// BARU: Tambahkan ini agar validasi terjadi saat mengetik
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'),
// BARU: Tambahkan ini agar validasi terjadi saat mengetik
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: (value) {
if (!SimpleValidator.isValidIndonesianPhone(value)) {
return 'Please enter a valid Indonesian phone number.';
}
return null;
},
),
const SizedBox(height: 24),
ElevatedButton(
// DIUBAH: Panggil fungsi _validateForm
onPressed: _validateForm,
child: const Text('Validate Form'),
),
// BARU: Widget untuk menampilkan status validasi
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),
),
],
),
),
);
}
}