save_points_intl 1.0.1
save_points_intl: ^1.0.1 copied to clipboard
A comprehensive, modular, zero-dependency date/time library for Flutter with 7 languages, 50+ functions, and smart formatting.
example/main.dart
/// Example demonstrating the save_points_intl package
///
/// This example shows how to use various date and time formatting functions
/// from the save_points_intl library.
///
/// Run this example with:
/// ```bash
/// flutter run -d chrome
/// ```
library;
import 'package:flutter/material.dart';
import 'package:save_points_intl/save_points_intl.dart';
/// Main entry point for the example application
void main() {
runApp(const ExampleApp());
}
/// Example application demonstrating save_points_intl features
class ExampleApp extends StatelessWidget {
/// Creates an instance of [ExampleApp]
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Save Points Intl Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const ExampleHomePage(),
);
}
}
/// Home page demonstrating various date/time formatting features
class ExampleHomePage extends StatelessWidget {
/// Creates an instance of [ExampleHomePage]
const ExampleHomePage({super.key});
@override
Widget build(BuildContext context) {
final now = DateTime.now();
final yesterday = now.subtract(const Duration(days: 1));
final tomorrow = now.add(const Duration(days: 1));
final lastWeek = now.subtract(const Duration(days: 7));
final nextMonth = DateTime(now.year, now.month + 1, now.day);
return Scaffold(
appBar: AppBar(
title: const Text('Save Points Intl Example'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildSection(
context,
'Date Formatting',
[
_buildExample(
'Short Date',
DateFormatters.formatDateShort(now),
'DateFormatters.formatDateShort(DateTime.now())',
),
_buildExample(
'Medium Date',
DateFormatters.formatDateMedium(now),
'DateFormatters.formatDateMedium(DateTime.now())',
),
_buildExample(
'Long Date',
DateFormatters.formatDateLong(now),
'DateFormatters.formatDateLong(DateTime.now())',
),
_buildExample(
'Full Date',
DateFormatters.formatDateFull(now),
'DateFormatters.formatDateFull(DateTime.now())',
),
_buildExample(
'Spanish Long Date',
DateFormatters.formatDateLong(now, 'es_ES'),
'DateFormatters.formatDateLong(DateTime.now(), \'es_ES\')',
),
_buildExample(
'Arabic Long Date',
DateFormatters.formatDateLong(now, 'ar_SA'),
'DateFormatters.formatDateLong(DateTime.now(), \'ar_SA\')',
),
],
),
_buildSection(
context,
'Time Formatting',
[
_buildExample(
'24-Hour Format',
TimeFormatters.formatTime24Hour(now),
'TimeFormatters.formatTime24Hour(DateTime.now())',
),
_buildExample(
'12-Hour Format',
TimeFormatters.formatTime12Hour(now),
'TimeFormatters.formatTime12Hour(DateTime.now())',
),
_buildExample(
'24-Hour with Seconds',
TimeFormatters.formatTime24HourWithSeconds(now),
'TimeFormatters.formatTime24HourWithSeconds(DateTime.now())',
),
_buildExample(
'12-Hour with Seconds',
TimeFormatters.formatTime12HourWithSeconds(now),
'TimeFormatters.formatTime12HourWithSeconds(DateTime.now())',
),
],
),
_buildSection(
context,
'Date & Time Combined',
[
_buildExample(
'Short DateTime',
TimeFormatters.formatDateTimeShort(now),
'TimeFormatters.formatDateTimeShort(DateTime.now())',
),
_buildExample(
'Medium DateTime',
TimeFormatters.formatDateTimeMedium(now),
'TimeFormatters.formatDateTimeMedium(DateTime.now())',
),
_buildExample(
'Long DateTime',
TimeFormatters.formatDateTimeLong(now),
'TimeFormatters.formatDateTimeLong(DateTime.now())',
),
],
),
_buildSection(
context,
'Relative Time',
[
_buildExample(
'2 Hours Ago',
RelativeTime.getRelativeTime(
now.subtract(const Duration(hours: 2)),
),
'RelativeTime.getRelativeTime(DateTime.now().subtract(Duration(hours: 2)))',
),
_buildExample(
'Yesterday',
RelativeTime.getRelativeTime(yesterday),
'RelativeTime.getRelativeTime(yesterday)',
),
_buildExample(
'Tomorrow',
RelativeTime.getRelativeTime(tomorrow),
'RelativeTime.getRelativeTime(tomorrow)',
),
_buildExample(
'Last Week',
RelativeTime.getRelativeTime(lastWeek),
'RelativeTime.getRelativeTime(lastWeek)',
),
_buildExample(
'Spanish Relative',
RelativeTime.getRelativeTime(
yesterday,
'es_ES',
),
'RelativeTime.getRelativeTime(yesterday, \'es_ES\')',
),
],
),
_buildSection(
context,
'Smart Formatting',
[
_buildExample(
'Today',
SmartFormatters.formatSmart(now),
'SmartFormatters.formatSmart(DateTime.now())',
),
_buildExample(
'Yesterday',
SmartFormatters.formatSmart(yesterday),
'SmartFormatters.formatSmart(yesterday)',
),
_buildExample(
'Tomorrow',
SmartFormatters.formatSmart(tomorrow),
'SmartFormatters.formatSmart(tomorrow)',
),
_buildExample(
'Last Week',
SmartFormatters.formatSmart(lastWeek),
'SmartFormatters.formatSmart(lastWeek)',
),
_buildExample(
'Next Month',
SmartFormatters.formatSmart(nextMonth),
'SmartFormatters.formatSmart(nextMonth)',
),
],
),
_buildSection(
context,
'Date Comparisons',
[
_buildExample(
'Is Today?',
DateComparisons.isToday(now).toString(),
'DateComparisons.isToday(DateTime.now())',
),
_buildExample(
'Is Yesterday?',
DateComparisons.isYesterday(yesterday).toString(),
'DateComparisons.isYesterday(yesterday)',
),
_buildExample(
'Is Tomorrow?',
DateComparisons.isTomorrow(tomorrow).toString(),
'DateComparisons.isTomorrow(tomorrow)',
),
_buildExample(
'Is Weekend?',
DateComparisons.isWeekend(now).toString(),
'DateComparisons.isWeekend(DateTime.now())',
),
_buildExample(
'Is Weekday?',
DateComparisons.isWeekday(now).toString(),
'DateComparisons.isWeekday(DateTime.now())',
),
],
),
_buildSection(
context,
'Date Calculations',
[
_buildExample(
'Start of Day',
DateCalculations.startOfDay(now).toString(),
'DateCalculations.startOfDay(DateTime.now())',
),
_buildExample(
'End of Day',
DateCalculations.endOfDay(now).toString(),
'DateCalculations.endOfDay(DateTime.now())',
),
_buildExample(
'Start of Week',
DateCalculations.startOfWeek(now).toString(),
'DateCalculations.startOfWeek(DateTime.now())',
),
_buildExample(
'Start of Month',
DateCalculations.startOfMonth(now).toString(),
'DateCalculations.startOfMonth(DateTime.now())',
),
_buildExample(
'Add 5 Business Days',
DateCalculations.addBusinessDays(now, 5).toString(),
'DateCalculations.addBusinessDays(DateTime.now(), 5)',
),
],
),
_buildSection(
context,
'Date Parsing',
[
_buildExample(
'Parse ISO 8601',
DateParsers.parseFlexible('2025-12-01').toString(),
'DateParsers.parseFlexible(\'2025-12-01\')',
),
_buildExample(
'Parse Custom Format',
DateParsers.parseDate('2025-12-01').toString(),
'DateParsers.parseDate(\'2025-12-01\')',
),
_buildExample(
'Is Valid Date?',
DateParsers.isValidDate('2025-12-01').toString(),
'DateParsers.isValidDate(\'2025-12-01\')',
),
],
),
],
),
),
);
}
/// Builds a section with a title and list of examples
Widget _buildSection(
BuildContext context,
String title,
List<Widget> examples,
) {
return Card(
margin: const EdgeInsets.only(bottom: 16),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 12),
...examples,
],
),
),
);
}
/// Builds an example item showing code and result
Widget _buildExample(String label, String result, String code) {
return Padding(
padding: const EdgeInsets.only(bottom: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 14,
),
),
const SizedBox(height: 4),
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.grey.shade100,
borderRadius: BorderRadius.circular(8),
),
child: SelectableText(
result,
style: const TextStyle(
fontFamily: 'monospace',
fontSize: 13,
),
),
),
const SizedBox(height: 4),
Text(
code,
style: TextStyle(
fontFamily: 'monospace',
fontSize: 11,
color: Colors.grey.shade600,
),
),
],
),
);
}
}