b24_widgets 0.0.15
b24_widgets: ^0.0.15 copied to clipboard
Flutter Package that include existing sample widgets
example/lib/main.dart
import 'package:b24_widgets/app/languages/generated/l10n.dart';
import 'package:b24_widgets/widgets/dropdown/ex_selection_tool.dart';
import 'package:b24_widgets/widgets/inputs/controller_text_input.dart';
import 'package:b24_widgets/widgets/others/ex_date_picker.dart';
import 'package:b24_widgets/widgets/others/ex_checkbox.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() async {
runApp(const MyApp());
WidgetsFlutterBinding.ensureInitialized();
}
class CountryCollection {
List<String> countries;
CountryCollection(this.countries);
}
CountryCollection myItem = CountryCollection([
'United States',
'Canada',
'France',
'Germany',
'United Kingdom',
'Italy',
'Spain',
'Australia',
'Brazil',
'Argentina',
'Mexico',
'Russia',
'Cambodia',
'Turkey',
'Iran',
'Iraq',
'Pakistan',
'Afghanistan',
'Indonesia',
'Malaysia',
'Thailand',
'South Korea',
'New Zealand',
]);
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.deepPurple,
brightness: Brightness.light,
),
useMaterial3: true,
),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
],
supportedLocales: [
// Add supported locales for the first package
...S.delegate.supportedLocales,
// Add supported locales for the second package
],
locale: const Locale('en', 'US'),
home: const MyHomePage(title: 'Bill24 Reusable Widget'),
);
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _dateController = TextEditingController();
final TextEditingController controlPass = TextEditingController();
final TextEditingController controlConfirm = TextEditingController();
final List<DateTime?> _dialogCalendarPickerValue = [
DateTime.now(),
DateTime.now().add(const Duration(days: 3)),
];
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Form(
key: _formKey,
child: Container(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Padding(
padding: EdgeInsets.symmetric(horizontal: 17.0),
child: Text(
'Controller for Selection dropdown (search, select single & multiple)',
style: TextStyle(fontWeight: FontWeight.bold),
),
),
const SizedBox(
height: 10.0,
),
ExSelectionTool(
allItems: myItem.countries,
isMultiSelect: true,
prefixIcon: const Icon(Icons.search),
suffixIcon: const Icon(Icons.arrow_drop_down_rounded),
sizeLabel: ExInputSizeType.medium,
textColor: Colors.red,
radiusSize: 10.0,
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 17.0),
child: Text(
'Password validation',
style: TextStyle(fontWeight: FontWeight.bold),
),
),
const SizedBox(
height: 10.0,
),
ExTextInput(
label: 'Email',
hintText: 'Email',
isRequired: false,
type: ExInputType.email,
sizeLabel: ExInputSizeType.small,
prefixIcon: const Icon(Icons.email_rounded),
onTap: () {},
),
ExTextInput(
label: 'Text',
hintText: 'Enter your content',
isRequired: false,
type: ExInputType.text,
sizeLabel: ExInputSizeType.small,
inputFormatters: [
FilteringTextInputFormatter.singleLineFormatter
],
textCapitalization: TextCapitalization.words,
textInputAction: TextInputAction.previous,
maxLines: 10,
// readOnly: true,
),
ExTextInput(
isRequired: true,
type: ExInputType.passwords,
confirmPassword: false,
controller: controlPass,
isShowRuleValidate: true,
label: 'Password',
),
ExTextInput(
type: ExInputType.passwords,
confirmPassword: true,
label: 'Confirm Password',
controller: controlConfirm,
controllerConfirm: controlPass,
externalValidator: (value) {
if (value != controlPass.text) {
return 'Your passowrd not match!';
}
},
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 17.0),
child: Text(
'Date range picker selection (select start date to end date in single label)',
style: TextStyle(fontWeight: FontWeight.bold),
),
),
const SizedBox(
height: 10.0,
),
],
)),
),
);
}