bottom_picker 2.9.0 bottom_picker: ^2.9.0 copied to clipboard
A new flutter package that let you create a bottom item picker or date & time picker with minmum parameters
// ignore_for_file: avoid_print
import 'package:bottom_picker/bottom_picker.dart';
import 'package:bottom_picker/resources/arrays.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blueGrey,
),
home: Scaffold(
body: ExampleApp(),
),
);
}
}
class ExampleApp extends StatelessWidget {
final countryList = [
Center(
child: Text('Algeria 🇩🇿'),
),
Center(
child: Text('Maroco 🇲🇦'),
),
Center(
child: Text('Tunisia 🇹🇳'),
),
Center(
child: Text('Palestine 🇵🇸'),
),
Center(
child: Text('Egypt 🇪🇬'),
),
Center(
child: Text('Syria 🇸🇾'),
),
Center(
child: Text('Irak 🇮🇶'),
),
Center(
child: Text('Mauritania 🇲🇷'),
),
];
final buttonWidth = 300.0;
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xffF6F2F2),
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.network(
'https://github.com/koukibadr/Bottom-Picker/blob/main/example/bottom_picker_logo.gif?raw=true',
width: 200,
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openSimpleItemPicker(context, countryList);
},
child: Text('Simple Item picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openSecondSimpleItemPicker(context, countryList);
},
child: Text('Simple Item picker with different theme'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openDatePicker(context);
},
child: Text('Date Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openDatePickerWithButtonStyle(context);
},
child: Text('Date Picker with button style'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openRangeDatePicker(context);
},
child: Text('Range Date Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openRangeTimePicker(context);
},
child: Text('Range Time Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openArabicRangeDatePicker(context);
},
child: Text('Arabic Range Date Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openTimePicker(context);
},
child: Text('Time Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openDateTimePicker(context);
},
child: Text('Date and Time Picker'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openDateTimePickerWithCustomButton(context);
},
child: Text('Bottom picker with custom button'),
),
),
SizedBox(
width: buttonWidth,
child: ElevatedButton(
onPressed: () {
_openPickerWithCustomPickerTextStyle(context);
},
child: Text(
'Bottom picker with custom picker text style',
style: TextStyle(
fontSize: 12,
),
),
),
),
],
),
);
}
void _openSimpleItemPicker(BuildContext context, List<Widget> items) {
BottomPicker(
items: items,
pickerTitle: Text(
'Choose your country',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
),
),
backgroundColor: Colors.yellow.withOpacity(0.6),
bottomPickerTheme: BottomPickerTheme.morningSalad,
onSubmit: (index) {
print(index);
},
buttonAlignment: MainAxisAlignment.start,
displaySubmitButton: false,
).show(context);
}
void _openSecondSimpleItemPicker(BuildContext context, List<Widget> items) {
BottomPicker(
items: items,
selectedItemIndex: 1,
pickerTitle: Text(
'اختر بلدك',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
),
pickerDescription: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Icon(Icons.flag),
Text(
'اختر جنسيتك من القائمة الموجودة تحت',
textAlign: TextAlign.end,
),
],
),
onChange: (index) {
print(index);
},
onSubmit: (index) {
print(index);
},
bottomPickerTheme: BottomPickerTheme.morningSalad,
layoutOrientation: TextDirection.rtl,
).show(context);
}
void _openDatePicker(BuildContext context) {
BottomPicker.date(
pickerTitle: Text(
'Set your Birthday',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.blue,
),
),
dateOrder: DatePickerDateOrder.dmy,
initialDateTime: DateTime(1996, 10, 22),
maxDateTime: DateTime(1998),
minDateTime: DateTime(1980),
pickerTextStyle: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
fontSize: 12,
),
onChange: (index) {
print(index);
},
onSubmit: (index) {
print(index);
},
bottomPickerTheme: BottomPickerTheme.plumPlate,
).show(context);
}
void _openDatePickerWithButtonStyle(BuildContext context) {
BottomPicker.date(
pickerTitle: Text(
'Set your Birthday',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.blue,
),
),
dateOrder: DatePickerDateOrder.dmy,
initialDateTime: DateTime(1996, 10, 22),
maxDateTime: DateTime(1998),
minDateTime: DateTime(1980),
pickerTextStyle: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
fontSize: 12,
),
onChange: (index) {
print(index);
},
onSubmit: (index) {
print(index);
},
bottomPickerTheme: BottomPickerTheme.plumPlate,
buttonStyle: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: Colors.blue[200]!,
),
),
buttonWidth: 200,
buttonContent: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Select date',
style: TextStyle(
color: Colors.white,
),
),
Icon(
Icons.arrow_forward_ios,
color: Colors.white,
size: 15,
),
],
),
),
).show(context);
}
void _openRangeDatePicker(BuildContext context) {
BottomPicker.range(
pickerTitle: Text(
'Set date range',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.black,
),
),
pickerDescription: Text(
'Please select a first date and an end date',
style: TextStyle(
color: Colors.black,
),
),
dateOrder: DatePickerDateOrder.dmy,
initialSecondDate: DateTime.now().add(Duration(days: 230)),
pickerTextStyle: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
fontSize: 12,
),
onRangeDateSubmitPressed: (firstDate, secondDate) {
print(firstDate);
print(secondDate);
},
bottomPickerTheme: BottomPickerTheme.plumPlate,
).show(context);
}
void _openRangeTimePicker(BuildContext context) {
BottomPicker.rangeTime(
pickerTitle: Text(
'Set Time range',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.black,
),
),
pickerDescription: Text(
'Please select a first time and an end time',
style: TextStyle(
color: Colors.black,
),
),
pickerTextStyle: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
fontSize: 12,
),
bottomPickerTheme: BottomPickerTheme.plumPlate,
onRangeTimeSubmitPressed: (firstDate, secondDate) {
print(firstDate);
print(secondDate);
},
).show(context);
}
void _openArabicRangeDatePicker(BuildContext context) {
BottomPicker.range(
pickerTitle: Text(
'حدد النطاق الزمني',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.black,
),
),
pickerDescription: Text(
'الرجاء تحديد أول تاريخ وتاريخ انتهاء',
style: TextStyle(
color: Colors.black,
),
),
dateOrder: DatePickerDateOrder.dmy,
layoutOrientation: TextDirection.rtl,
pickerTextStyle: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
fontSize: 12,
),
onRangeDateSubmitPressed: (firstDate, secondDate) {
print(firstDate);
print(secondDate);
},
bottomPickerTheme: BottomPickerTheme.plumPlate,
).show(context);
}
void _openTimePicker(BuildContext context) {
BottomPicker.time(
pickerTitle: Text(
'Set your next meeting time',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.orange,
),
),
onSubmit: (index) {
print(index);
},
onClose: () {
print('Picker closed');
},
bottomPickerTheme: BottomPickerTheme.orange,
use24hFormat: true,
initialTime: Time(
minutes: 23,
),
maxTime: Time(
hours: 17,
),
).show(context);
}
void _openDateTimePicker(BuildContext context) {
BottomPicker.dateTime(
pickerTitle: Text(
'Set the event exact time and date',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.black,
),
),
onSubmit: (date) {
print(date);
},
onClose: () {
print('Picker closed');
},
minDateTime: DateTime(2021, 5, 1),
maxDateTime: DateTime(2021, 8, 2),
initialDateTime: DateTime(2021, 5, 1),
gradientColors: [
Color(0xfffdcbf1),
Color(0xffe6dee9),
],
).show(context);
}
void _openDateTimePickerWithCustomButton(BuildContext context) {
BottomPicker.dateTime(
pickerTitle: Text(
'Set the event exact time and date',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Colors.black,
),
),
onSubmit: (date) {
print(date);
},
onClose: () {
print('Picker closed');
},
buttonSingleColor: Colors.pink,
minDateTime: DateTime(2021, 5, 1),
maxDateTime: DateTime(2021, 8, 2),
gradientColors: [
Color(0xfffdcbf1),
Color(0xffe6dee9),
],
).show(context);
}
void _openPickerWithCustomPickerTextStyle(BuildContext context) {
BottomPicker(
items: [
Center(
child: Text('Leonardo DiCaprio'),
),
Center(
child: Text('Johnny Depp'),
),
Center(
child: Text('Robert De Niro'),
),
Center(
child: Text('Tom Hardy'),
),
Center(
child: Text('Ben Affleck'),
),
],
pickerTitle: Text('Choose an actor'),
titleAlignment: Alignment.center,
pickerTextStyle: TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
),
closeIconColor: Colors.red,
).show(context);
}
}