Last updated:
0 purchases
phoenix widgets
phoenix_widgets #
Phoenix Widgets is widget collections.
Getting Started #
In the pubspec.yaml of your flutter project, add the following dependency:
dependencies:
...
phoenix_widgets: "^latestVersion"
copied to clipboard
Import it:
import 'package:phoenix_widgets/phoenix_widgets.dart';
copied to clipboard
PhoenixCard #
PhoenixCard is widget to create card
Usage Examples #
PhoenixCard(
title: Text(
"Title with Image",
style: Theme.of(context).textTheme.headline6,
),
description: Text(
"Description",
style: Theme.of(context).textTheme.bodyText2,
),
footer: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const CircleAvatar(backgroundColor: Colors.red),
const SizedBox(width: 8),
Text(
"Footer",
style: Theme.of(context).textTheme.headline6,
)
],
),
image: Image.network(
"https://images.contentstack.io/v3/assets/blt2a130c768c36b9df/blt5f384c7eb51e7cff/5f7d972ddf178b0ea98488e1/banner_sadaqah.jpg?auto=webp",
fit: BoxFit.cover,
),
onTap: () {},
),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
image
Widget
No
title
Widget
Yes
description
Widget
Yes
footer
Widget
No
width
double
No
double.maxFinite
padding
EdgeInsets
No
margin
EdgeInsets
No
const EdgeInsets.symmetric(horizontal: 16,vertical: 8)
onTap
VoidCallback
No
backgroundColor
Color
No
Colors.white
borderRadius
double
No
4
footerSeparatorVisible
bool
No
false
imageHeight
double
No
150.0
footerSeparator
Widget
No
label
Widget
No
enableShadow
bool
No
true
borderColor
Color
No
Colors.transparent
borderWidth
double
No
1
PhoenixNavigationCard #
PhoenixNavigationCard is a widget to create a card that has a navigation button
Usage Examples #
PhoenixNavigationCard(
isVisible: false,
icon: SvgPicture.asset(
"assets/education.svg",
width: 46,
height: 46,
),
title: Text(
"Title",
style: Theme.of(context).textTheme.headline6,
),
description: Text(
"Lorem ipsum dolor sit amet, consectetur adipiscing elite!",
style: Theme.of(context).textTheme.bodyText2,
),
callback: () {},
navigationText: Text(
"Click Here",
style: Theme.of(context).textTheme.bodyText2,
),
),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
icon
Widget
No
title
Widget
Yes
description
Widget
Yes
navigationText
Widget
No
Text('Click Me')
isVisible
bool
No
true
width
double
No
double.maxFinite
padding
EdgeInsets
No
EdgeInsets.only(top: 16, bottom: 16)
callback
VoidCallback
No
backgroundColor
Color
No
Color(0x10C9B47D)
borderRadius
double
No
4
icHeight
double
No
46
icWidth
double
No
46
icColor
Color
No
Colors.transparent
icBtnBackgroundColor
Color
No
Color(0x10C9B47D)
icBtnColor
Color
No
Color(0x1AC9B47D)
icBtnSize
double
No
16
PhoenixBottomMenu #
PhoenixBottomMenu is widget to create navigation bar
Usage Examples #
import 'package:flutter_svg/svg.dart';
PhoenixBottomMenuUHF(
selectedIndex: selectedIndex,
navBarItems: [
NavBarItem(
name: "Home",
image: SvgPicture.asset('assets/tab/home_default.svg'),
selectedImage: SvgPicture.asset('assets/tab/home_selected.svg'),
),
NavBarItem(
name: "Feed",
image: SvgPicture.asset('assets/tab/feed_default.svg'),
selectedImage: SvgPicture.asset('assets/tab/feed_selected.svg'),
),
NavBarItem(
name: "Community",
image: SvgPicture.asset('assets/tab/community_default.svg'),
selectedImage: SvgPicture.asset('assets/tab/community_selected.svg'),
),
NavBarItem(
name: "Account",
image: SvgPicture.asset('assets/tab/account_default.svg'),
selectedImage: SvgPicture.asset('assets/tab/account_selected.svg'),
),
],
selectedTabColor: Colors.red, ///optional
unselectedTabColor: Colors.black54, ///optional
onTabChange: (index) {
setState(() {
selectedIndex = index;
_tabController!.jumpToPage(index);
});
},
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
navBarItems
List
Yes
selectedTabColor
Color
No
Colors.red
unselectedTabColor
Color
No
Colors.black54
onTabChange
Function
Yes
backgroundColor
Color
No
elevation
Double
No
selectedIndex
int
No
0
Available Parameters for NavBarItem #
Param
Type
isRequired
Default
name
String
No
image
Widget
Yes
selectedImage
Widget
No
PhoenixButton #
PhoenixButton is widget to create button
Usage Examples #
PhoenixButton(
content: const Text(
"Normal Button",
),
margin: const EdgeInsets.only(
left: 16,
top: 16,
right: 16,
),
buttonElevation: 2,
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("Normal Button Clicked"),
),
);
},
radius: 10,
),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
content
Widget
Yes
buttonMaterialStateProperty
MaterialStateProperty
No
buttonElevation
Double
No
0.0
buttonColor
Color
No
textColor
Color
No
disableButtonColor
Color
No
radius
Double
No
margin
EdgeInsets
No
padding
EdgeInsets
No
height
Double
No
width
Double
No
double.infinity
borderSide
BorderSide
No
onPressed
VoidCallback
No
PhoenixProductTiles #
PhoenixProductTiles is a widget to create product tiles
Usage Examples #
PhoenixProductTiles(
onTap: (index) {},
items: [
PhoenixProductItem(
"Tile 1",
Image.asset(
"assets/tile_1.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 2",
SvgPicture.asset(
"assets/tile_2.svg",
width: 45,
height: 45,
),
label: "Coming Soon")
]
)
to use on non sliver parent:
PhoenixProductTiles.box(
onTap: (index) {},
items: [
PhoenixProductItem(
"Tile 1",
Image.asset(
"assets/tile_1.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 2",
SvgPicture.asset(
"assets/tile_2.svg",
width: 45,
height: 45,
),
label: "Coming Soon")
]
)
copied to clipboard
Available Parameters #
PhoenixProductTiles
Param
Type
isRequired
Default
items
List<PhoenixProductItem>
Yes
onTap
Function
Yes
crossAxisCount
int
No
4
labelBGColor
Color
No
null
labelTextColor
Color
No
null
radius
double
No
20.0
PhoenixProductItem
Param
Type
isRequired
Default
title
String
Yes
icon
Widget
Yes
label
String
No
routeName
String
No
PhoenixGenericPopUp #
PhoenixGenericPopUp is a function to show popup dialog with two or one button
Usage Examples #
phoenixGenericPopUp(
///required
context: context,
popUpTitleWidget: Text(
'Pop Up Two Button Title',
),
popUpContentWidget: Text(
"This is Pop Up One Button Message, Lorem ipsum dolor sit amet, consectetur adipiscing elit",
),
///optional
ensureWidget: Text(
"Confirm",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
cancelWidget: Text(
"Cancel",
style: TextStyle(
color: Colors.red,
),
),
//if type != 1 the popup will not dismiss when click confirm button
type: 1,
dismissOnOutsideTouch: false,
ensureCallback: () {
showSnackBar("Confirm Button Clicked");
},
cancelCallback: () {
showSnackBar("Cancel Button Clicked");
},
);
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
context
BuildContext
Yes
popUpContentWidget
Widget
Yes
popUpTitleWidget
Widget
No
ensureWidget
Widget
No
Confirm
cancelWidget
Widget
No
type
int
No
1
dismissOnOutsideTouch
bool
No
false
ensureCallback
VoidCallback
No
cancelCallback
VoidCallback
No
PhoenixPopUp #
PhoenixPopUp is a function to show popup dialog with two or one button
Usage Examples #
phoenixPopUp(
context: context,
title: 'Pop Up Two Button Title',
description:
"This is Pop Up One Button Message, Lorem ipsum dolor sit amet, consectetur adipiscing elit",
primaryButtonLabel: 'Confirm',
secondayButtonLabel: 'Cancel',
type: 1,
barrierDismissible: true,
ensureCallback: () {
showSnackBar("Confirm Button Clicked");
},
cancelCallback: () {
showSnackBar("Cancel Button Clicked");
},
);
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
context
BuildContext
Yes
description
String
Yes
title
String
No
primaryButtonLabel
String
No
secondaryButtonLabel
String
No
type
int
No
1
barrierDismissible
bool
No
false
direction
PhoenixPopupDirection
No
row
space
double
No
16
elevation
double
No
1.0
ensureCallback
VoidCallback
No
cancelCallback
VoidCallback
No
PhoenixWebview #
PhoenixWebview is a widget to create a webview, for special specialContainUrl,
it will use android custom_tabs or safari view controller for ios to handle if url changes contain
webpage that is needed to open in native view
Usage Examples #
PhoenixWebview(url: "https://flutter.dev/", title: "Flutter Dev");
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
url
String
Yes
-
title
String
Yes
-
isForRegistration
bool
No
false
isShowRefresh
bool
No
-
userAgent
String
No
-
bottomNavigationBar
Widget
No
-
refreshIcons
Widget
No
-
customJavaScripts
String
No
-
navigationDelegate
Function
No
-
isToRun
List
No
-
noInternetHandler
Widget
No
-
toolbarColor
Color
No
-
specialContainUrl
List
No
-
enableClearCacheInitDispose
bool
No
false
PhoenixBackButton #
PhoenixBackButton is a widget to create back button
Usage Examples #
PhoenixBackButton();
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
color
Color
No
callback
VoidCallback
No
size
doubke
No
28
PhoenixTitle #
PhoenixTitle is a widget to create title
Usage Examples #
PhoenixTitle(title: "Phoenix Title"));
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
title
String
Yes
fontSize
double
No
fontWeight
FontWeight
No
color
Color
No
PhoenixEmptyPage #
PhoenixEmptyPage is a widget to create empty pages
Usage Examples #
PhoenixEmptyPage(
title: "No Data",
pageImage: Image.asset(
"assets/illustration.png",
),
textStyle: const TextStyle(
fontSize: 16.0,
color: Color(0xff212124),
),
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
title
String
Yes
pageImage
Widget
Yes
textStyle
TextStyle
No
fontSize: 16.0
color: Color(0xff212124)
PhoenixExpandableContentBlock #
PhoenixExpandableContentBlock is a widget to create expandable content block. Url inside the text
content can be clickable and text inside the content can be copied by long press.
Usage Examples #
PhoenixExpandableContentBlock(
text: "Flutter is Google’s portable UI toolkit. Visit https://flutter.dev to learn more.",
style: Theme.of(context).textTheme.bodyText2,
urls: [Url("https://flutter.dev", [47, 66])],
shortenButtonLabel: "[See less]",
expandButtonLabel: "[See more]"
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
text
String
Yes
style
TextStyle
Yes
urls
List
No
shortenButtonLabel
String
Yes
expandButtonLabel
String
Yes
maxLines
int
No
6
expandableStateChangeCallback
VoidCallback
No
textCopiedCallback
VoidCallback
No
PhoenixBottomSheet #
PhoenixBottomSheet is a widget to show bottom sheet
Usage Examples #
// Wrap with the statefulWidget
final PhoenixBottomSheet _bottomSheetHowItWorks = PhoenixBottomSheet();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Bottom Sheet Sample'),
),
body: Center(
child: ElevatedButton(
child: const Text("Show All Products"),
onPressed: () {
_bottomSheetHowItWorks(
context,
title: 'Title of bottom Sheet',
children: [
for (final item in _items)
Padding(
padding: const EdgeInsets.symmetric(
vertical: 12,
horizontal: 20,
),
child: Row(
children: [
item.icon,
const SizedBox(height: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
item.title,
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
Text(
'Description ${item.title}',
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
],
),
)
],
),
)
],
);
},
)));
}
// Sample of data to pass
final List<PhoenixProductItem> _items = [
PhoenixProductItem(
"Tile 1",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 2",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 3",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 4",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 5",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 6",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 7",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
),
label: "Coming Soon"),
PhoenixProductItem(
"Tile 8",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
),
label: "Coming Soon"),
];
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
context
BuildContext
Yes
title
String
Yes
children
List
Yes
margin
EdgeInsets
No
padding
EdgeInsets
No
elevation
double
No
0
PhoenixBottomSheetTile #
PhoenixBottomSheetTile is a widget to show bottom sheet with tiles
Usage Examples #
// Wrap with the statefulWidget
final PhoenixBottomSheetTile _bottomSheetHowItWorks =
PhoenixBottomSheetTile();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Bottom Sheet Tile Sample'),
),
body: Center(
child: ElevatedButton(
child: const Text("Show All Products"),
onPressed: () {
_bottomSheetHowItWorks(
context,
spacing: const EdgeInsets.only(bottom: 16.0),
padding: const EdgeInsets.only(
top: 16,
bottom: 58,
),
title: 'Title of bottom sheet',
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 16,
fontWeight: FontWeight.w500,
),
child: CustomScrollView(
shrinkWrap: true,
slivers: [
PhoenixProductTiles(
onTap: (index) {},
items: _items,
)
],
),
);
},
)));
}
// Sample of data to pass
final List<PhoenixProductItem> _items = [
PhoenixProductItem(
"Tile 1",
SvgPicture.asset(
"assets/education.svg",
width: 46,
height: 46,
)),
PhoenixProductItem(
"Tile 2",
SvgPicture.asset(
"assets/education.svg",
width: 46,
height: 46,
)),
PhoenixProductItem(
"Tile 3",
SvgPicture.asset(
"assets/education.svg",
width: 46,
height: 46,
),
label: "Coming Soon"),
PhoenixProductItem(
"Tile 4",
SvgPicture.asset(
"assets/education.svg",
width: 46,
height: 46,
),
label: "Coming Soon"),
PhoenixProductItem(
"Tile 5",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 6",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 7",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
),
label: "Coming Soon"),
PhoenixProductItem(
"Tile 8",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
),
label: "Coming Soon"),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
context
BuildContext
Yes
title
String
Yes
style
TextStyle
No
TextStyle(color: Color(0xFF212124), fontSize: 16,fontWeight: FontWeight.w500,)
spacing
EdgeInsetsGeometry
No
EdgeInsets.only(bottom: 16.0)
padding
EdgeInsetsGeometry
No
EdgeInsets.only(top: 16, bottom: 58,)
child
Widget
Yes
PhoenixShimmer #
PhoenixShimmer is widget to show a loading widget effect
Usage Examples #
ShimmerWidget.rectangular(
height: 10,
width: 100,
baseColor: Colors.red,
)
ShimmerWidget.circular(
height: 100,
width: 100,
baseColor: Colors.red,
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
width
double
No
double.infinity
height
double
Yes
baseColor
Color
No
Color(0xFFE0E0E0)
shapeBorder
ShapeBorder
No
RoundedRectangleBorder()
CircleBorder()
PhoenixBanner #
PhoenixBanner is widget to show carousel of banners
Usage Examples #
PhoenixBanner(
listSlider: [
'https://picsum.photos/820/360'),
'https://picsum.photos/820/360'),
'https://picsum.photos/820/360'),
'https://picsum.photos/820/360')
],
onEvent: (GestureEvent event, index) {
if (event == GestureEvent.onSwipe) {
print('onSwipe');
} else {
print('onTap');
}
},
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
listSlider
List
Yes
onEvent
void Function(GestureEvent event, int index)
No
carouselDurationMs
int?
No
3000
activeColour
Color
No
Colors.white
inActiveColour
Color
No
Colors.black.withOpacity(0.25)
bannerHeight
double
No
170.0
viewportFraction
double
No
0.9
fit
BoxFit
No
BoxFit.cover
indicatorPosition
IndicatorPosition {top, bottom}
No
IndicatorPosition.bottom
PhoenixSearchbar #
PhoenixSearcbar is widget to search
Usage Examples #
PhoenixSearchbar(
hintText: "Search",
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
enabled: true,
actionWidget: TextButton(
onPressed: () {
showSnackBar("Cancel");
},
child: const Text(
"Cancel",
style: TextStyle(
color: Color(0xFF67C1BF),
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
radius: 24,
onChanged: (value) {
setState(() {
result = value;
});
},
),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
hintText
String
No
""
fillColor
Color
No
Color(0xFFF9F9F9)
borderColor
Color
No
Color(0xFFF9F9F9)
enabled
bool
No
true
isFocus
bool
No
true
radius
double
No
0
spaceBetween
double
No
-
actionWidget
Widget
No
-
searchIcon
Widget
No
Icon(Icons.search, size: 24, color: Color(0xff75767A),)
textEditingController
TextEditingController
No
TextEditingController()
hintTextStyle
TextStyle
No
TextStyle(color: Color(0xff75767A), fontSize: 14,)
padding
EdgeInsets
No
EdgeInsets.zero
onWidgetTap
VoidCallback
No
-
onChanged
Function(String)
No
-
PhoenixExpandableList #
PhoenixExpandableListPage is widget to show the with with expandable function
Usage Examples #
PhoenixExpandableList(
expendableData: expendableData[i],
margin: contentMargin ?? const EdgeInsets.only(top: 8, bottom: 16),
contentMargin: const EdgeInsets.all(16),
padding: const EdgeInsets.all(16),
expandColor: Colors.white,
shrinkColor: const Color(0xffF9F9F9),
radius: 5,
shrinkImage: SvgPicture.asset("assets/ic_minus.svg"),
expandImage: SvgPicture.asset("assets/ic_plus.svg"),
showData: expendableData[i].show,
callback: () {
setState(() {
expendableData[i].show = !expendableData[i].show;
});
},
)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
expendableData
ExpendableData
Yes
-
margin
EdgeInsetsGeometry
No
EdgeInsets.all(16)
contentMargin
EdgeInsetsGeometry
No
EdgeInsets.only(top: 8, bottom: 16)
padding
EdgeInsetsGeometry
No
EdgeInsets.all(16)
titlePadding
EdgeInsetsGeometry
No
EdgeInsets.zero
expandColor
Color
No
Colors.white
shrinkColor
Color
No
Colors.grey
radius
double
No
-
shrinkImage
Widget
No
Icon(Icons.add)
expandImage
Widget
No
Icon(Icons.minimize)
showData
bool
Yes
false
callback
VoidCallback
Yes
-
PhoenixWarning #
PhoenixWarning is widget to show any warning
Usage Examples #
PhoenixWarning(
warningVisibility: true,
messageWidget: const Text(
"This is example of warning. Put any text here",
style: TextStyle(
color: Colors.black,
fontSize: 10,
fontWeight: FontWeight.normal,
),
),
errorWidget: const Icon(Icons.error_outline, color: Colors.black),
borderColor: Colors.red.withOpacity(.8),
backgroundColor: Colors.red.withOpacity(.6),
margin: const EdgeInsets.only(top: 8),
padding: const EdgeInsets.all(8),
radius: 5,
spacerHeight: 100)
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
warningVisibility
bool
Yes
-
messageWidget
Widget
Yes
-
errorWidget
Widget
Yes
-
borderColor
Color
Yes
-
backgroundColor
Color
Yes
-
margin
EdgeInsetsGeometry
Yes
-
padding
EdgeInsetsGeometry
Yes
-
radius
double
Yes
-
spacerHeight
double
Yes
-
PhoenixListGroup #
PhoenixListGroup is widget generate a list of menu with a submenu inside
Usage Examples #
PhoenixListGroup(
groupList: _sampleGrouping,
),
// Sample of data to pass
Map<String, List<DataHelper>> _sampleGrouping = {
'Data 1': [
DataHelper(
title: 'Title Data 2.1',
desc: 'Description Data 2.1',
isSelected: true,
isVisible: false),
DataHelper(
title: 'Title Data 2.2',
desc: 'Description Data 2.2',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.3',
desc: 'Description Data 2.3',
isSelected: true,
isVisible: true),
],
'Data 2': [
DataHelper(
title: 'Title Data 2.1',
desc: 'Description Data 2.1',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.2',
desc: 'Description Data 2.2',
isSelected: true,
isVisible: false),
DataHelper(
title: 'Title Data 2.3',
desc: 'Description Data 2.3',
isSelected: true,
isVisible: true),
]
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
groupList
Map<String, List
Yes
-
hideLastDivider
bool
No
false
titlePadding
EdgeInsets
No
EdgeInsets.all(8)
PhoenixTextField #
PhoenixTextField is to create a Text Field
Usage Examples #
// Need to wrap with statefulWidget
late FocusNode _fn;
bool _isFocus = false;
@override
void initState() {
super.initState();
_fn = widget.focusNode ?? FocusNode();
_fn.addListener(() {
setState(() {
_isFocus = _fn.hasFocus;
/// Check if focus changed
if (!_isFocus) {
widget.validator?.call();
}
});
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: widget.onTap,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
children: [
Container(
width: double.maxFinite,
height: 50,
decoration: BoxDecoration(
color: widget.backgroundColor,
border: Border.all(
color: widget.isError
? const Color(0xffDC3224)
: const Color(0xffD9DBE0),
),
borderRadius: BorderRadius.circular(4),
),
alignment: Alignment.topLeft,
padding: const EdgeInsets.only(bottom: 4),
),
Positioned(
top: (widget.textEditingController.text.isNotEmpty || _isFocus)
? 5
: 0,
left: 0,
right: 0,
bottom: 4,
child: TextFormField(
autofillHints: widget.autoFillHints,
textInputAction: widget.textInputAction,
onFieldSubmitted: (_) => FocusScope.of(context).nextFocus(),
enabled: widget.enabled ?? true,
inputFormatters: widget.inputFormatters,
keyboardType: widget.keyboardType,
controller: widget.textEditingController,
obscureText: widget.obscureText ?? false,
focusNode: _fn,
onTap: widget.onTap,
decoration: InputDecoration(
isDense: true,
contentPadding: EdgeInsets.only(
left: 16,
right: 0,
bottom: (widget.textEditingController.text.isNotEmpty ||
_isFocus)
? 4
: 14,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
border: InputBorder.none,
errorBorder: InputBorder.none,
suffixIcon: widget.suffixIcon,
label: Container(
margin: const EdgeInsets.only(
top: 6,
),
child: Text(
widget.label,
style: (widget.textStyle ??
const TextStyle(
color: Color(0xFF212124),
fontSize: 14,
fontWeight: FontWeight.normal,
).copyWith(
color: widget.isError
? const Color(0xffDC3224)
: const Color(0xff75767A),
overflow: TextOverflow.ellipsis,
)),
),
),
alignLabelWithHint: true,
hintText: widget.hintText,
floatingLabelBehavior: widget.hintText != null
? FloatingLabelBehavior.always
: null,
hintStyle: const TextStyle(
color: Color(0xFF212124),
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
onChanged: (_) {
widget.validator?.call();
},
),
),
],
),
if (widget.description != null && !widget.isError)
Container(
margin: const EdgeInsets.only(top: 5),
child: Text(
widget.description!,
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 12,
fontWeight: FontWeight.normal,
).copyWith(
color: widget.isError
? const Color(0xffDC3224)
: const Color(0xff75767A),
),
),
),
if (!widget.noErrorSpace) ...[
const SizedBox(height: 4),
Visibility(
visible: widget.isError,
child: Text(
widget.errorMessage ?? "",
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 12,
fontWeight: FontWeight.normal,
).copyWith(color: const Color(0xffDC3224)),
),
),
const SizedBox(height: 8),
]
],
),
);
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
textEditingController
TextEditingController
Yes
-
validator
VoidCallback
No
-
isError
bool
No
false
label
String
Yes
-
errorMessage
String
Yes
-
suffixIcon
Widget
Yes
-
obscureText
bool
Yes
-
enabled
bool
Yes
-
keyboardType
TextInputType
Yes
-
inputFormatters
List
Yes
-
onTap
VoidCallback
Yes
-
autoFillHints
List
Yes
-
description
String
Yes
-
textStyle
TextStyle
Yes
-
disableTextStyle
TextStyle
Yes
-
noErrorSpace
bool
Yes
false
focusNode
FocusNode
Yes
-
backgroundColor
Color
Yes
-
hintText
String
Yes
-
PhoenixDropdown #
PhoenixDropdown is widget to dynamically create a dropdown
Usage Examples #
PhoenixDropdown<SampleData>(
label: 'Title',
value: sampleDataList[0],
errorMessage: 'Error choose',
errorTextStyle: TextStyle(fontSize: 12),
onChanged: (body) {},
items: sampleDataList.map((body) {
return DropdownMenuItem(
alignment: Alignment.centerLeft,
value: body,
child: Text(body.dataTitle!),
);
}).toList(),
)
// Sample of data to pass
final sampleDataList = [
SampleData('one', [1, 2, 3]),
SampleData('two', [1, 2, 3]),
SampleData('three', [1, 2, 3])
];
class SampleData {
String? dataTitle;
List? sampleList = [];
SampleData(this.dataTitle, this.sampleList);
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
isError
bool
No
false
label
String
No
-
suffixIcon
Widget
No
-
onTap
VoidCallback
No
-
value
T
Yes
-
items
List<DropdownMenuItem
Yes
-
onChanged
Function(T?)
No
-
errorMessage
String
No
-
errorTextStyle
TextStyle
No
-
PhoenixDialog #
PhoenixDialog is widget to show a dialog
Usage Examples #
// Wrap with statefulWidget
final PhoenixDialog _bottomSheetHowItWorks = PhoenixDialog();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Dialog Sample'),
),
body: Center(
child: ElevatedButton(
child: const Text("Show Dialog"),
onPressed: () {
_bottomSheetHowItWorks(
context,
title: 'Title of Dialog',
padding: EdgeInsets.zero,
children: [
for (final item in _items)
Padding(
padding: const EdgeInsets.symmetric(
vertical: 12,
horizontal: 20,
),
child: Row(
children: [
item.icon,
const SizedBox(height: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
item.title,
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
Text(
'Description ${item.title}',
style: const TextStyle(
color: Color(0xFF212124),
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
],
),
)
],
),
)
],
);
},
)));
}
// Sample of data to pass
final List<PhoenixProductItem> _items = [
PhoenixProductItem(
"Tile 1",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 2",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
PhoenixProductItem(
"Tile 3",
Image.asset(
"assets/tab_home.png",
width: 45,
height: 45,
)),
];
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
context
BuildContext
Yes
-
title
String
No
-
children
List
Yes
-
dismissible
bool
No
true
padding
EdgeInsets
No
-
PhoenixListGroupPartition #
PhoenixListGroupPartition is widget generate a list of menu with a submenu inside and with a dedicated container
Usage Examples #
PhoenixListGroupPartition(
groupList: _sampleGrouping,
),
// Example of data to pass
Map<String, List<DataHelper>> _sampleGrouping = {
'Data 1': [
DataHelper(
title: 'Title Data 2.1',
desc: 'Description Data 2.1',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.2',
desc: 'Description Data 2.2',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.3',
desc: 'Description Data 2.3',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.4',
desc: 'Description Data 2.4',
isSelected: true,
isVisible: true),
],
'Data 2': [
DataHelper(
title: 'Title Data 2.1',
desc: 'Description Data 2.1',
isSelected: true,
isVisible: true),
DataHelper(
title: 'Title Data 2.2',
desc: 'Description Data 2.2',
isSelected: true,
isVisible: false),
DataHelper(
title: 'Title Data 2.3',
desc: 'Description Data 2.3',
isSelected: true,
isVisible: true),
]
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
groupList
Map<String, List
Yes
-
PhoenixTabView #
PhoenixTabView is widget to display tabs menu active label on the center
Usage Examples #
final _tabs = {
'tab1': 'Tab1',
'tab2': 'Tab2',
'tab3': 'Tab3',
'tab4': 'Tab4'
};
PhoenixTabView(
tabs: _tabs,
builder: (BuildContext context, String id) {
return Center(child: Text(_tabs[id]!));
},
),
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
tabs
Map<String, String>
Yes
-
builder
Widget Fn(BuildContext, String)
Yes
-
currentIndex
int
No
-
menuBackgroundColor
Color
No
-
menuPadding
EdgeInsets
No
-
onTabChange
void Fn(int index)
No
-
indicatorColor
Color
No
-
labelColor
Color
No
-
unselectedLabelColor
Color
No
-
labelStyle
TextStyle
No
TextStyle( fontSize: 16,fontWeight: FontWeight.w500)
unselectedLabelStyle
TextStyle
No
TextStyle( fontSize: 16,fontWeight: FontWeight.w500)
tabController
TabController
No
-
PhoenixSearchNoContent #
PhoenixSearchNoContent is a widget to create a card that show searched is don't have any content
S
Usage Examples #
@override
Widget build(BuildContext context){
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Search No Content Sample App'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
PhoenixSearchNoContent(
title:const Text('Start Searching',style: TextStyle(fontSize: 16,fontWeight: FontWeight.w500),),
icon: SvgPicture.asset(
"assets/umrah_guide.svg",
),
subtitle: const Text('using relevant keywords',style: TextStyle(fontSize: 14,fontWeight: FontWeight.w400),),
),
],
)
);
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
icon
Widget
Yes
title
Widget
Yes
subtitle
Widget
Yes
PhoenixChip #
PhoenixChip is a widget to create a card that show suggestion chip when click on the search bar
S
Usage Examples #
class _PhoenixButtonPage extends State<PhoenixChipPage> {
final PhoenixDialog _bottomSheetHowItWorks = PhoenixDialog();
final List<String> _items = [
"Ihram",
"Before Ihram",
"During Ihram",
"After Ihram"
];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Chip Sample'),
),
body: PhoenixChip(
title: const Padding(
padding: EdgeInsets.only(top: 16, left: 16),
child: Text(
'Discover',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w400),
),
),
items: _items,
callback: (int index) {
_bottomSheetHowItWorks(
context,
title: _items[index],
children: []);
},
chipTextStyle: const TextStyle(fontSize: 14,fontWeight: FontWeight.w400),
outlineChipColor: Colors.grey,
backgroundChipColor: Colors.white,
lineChipWidth: 1,
chipTextPadding:
const EdgeInsets.symmetric(vertical: 4, horizontal: 16),
chipPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
chipSpacing: 8,
),
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
title
Widget
Yes
items
List
Yes
callback
Function(int index)
Yes
backgroundChipColor
Color
No
lineChipWidth
double
No
outlinedChipColor
Color
No
chipTextPadding
EdgeInsets
No
chipPadding
EdgeInsets
No
chipSpacing
double
No
chipTextStyle
TextStyle
No
PhoenixListviewText #
PhoenixSearchNoContent is a widget to create a card that show listview Text when search
S
Usage Examples #
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Listview Text Sample'),
),
body: const PhoenixListviewText(
title: Text('Suggestion',
style: TextStyle(fontWeight: FontWeight.w400,
fontSize: 16),
),
contents: [Text('Ihram',style: TextStyle(fontSize: 16,fontWeight: FontWeight.w400),),
Text("Before Ihram",style: TextStyle(fontSize: 16,fontWeight: FontWeight.w400)),
Text("After Ihram",style: TextStyle(fontSize: 16,fontWeight: FontWeight.w400)),
],
)
);
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
contents
List
Yes
title
Widget
Yes
radiusContentsBox
Radius
No
seperatorSpace
double
No
seperatorColor
Color
No
outlineBoxContentsColor
Color
No
boxContentsColor
Color
No
action
Widget
No
callback
Function(int index)
No
PhoenixCheckbox #
PhoenixCheckbox is a widget for showing a checkbox that can be checked and unchecked.
Usage Example #
class Page extends State<Page> {
bool isCheckboxChecked = false;
void onCheckboxChange(bool value) {
setState(() {
isCheckboxChecked = value;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
PhoenixCheckbox(
isChecked: isCheckboxChecked,
onChange: onCheckboxChange,
checkedIcon: SvgPicture.asset('assets/ic_check.svg'),
uncheckedIcon: SvgPicture.asset('assets/ic_uncheck.svg'),
)
],
),
],
),
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
isChecked
bool
No
false
onChange
dynamic Function(bool)
Yes
checkedIcon
Widget
No
SvgPicture.asset('assets/images/ic_check.svg', package: 'phoenix_widgets')
uncheckedIcon
Widget
No
SvgPicture.asset('assets/images/ic_uncheck.svg', package: 'phoenix_widgets')
PhoenixMore #
PhoenixMore is a labelled button that tells the user that there is more to be done or seen after tapping the button.
Usage Example #
class Page extends StatelessWidget {
Page({ super.key })
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
PhoenixMore(title: 'Read more')
],
),
],
)
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
title
String
Yes
onTap
VoidCallback
No
titleStyle
TextStyle
No
TextStyle(color: Color(0xFF00B3AF), fontSize: 16, fontWeight: FontWeight.w500),
PhoenixEndOfSection #
PhoenixEndOfSection is a widget to let the user know that they have reached the end of a section.
Usage Example #
class Page extends StatelessWidget {
Page({ super.key })
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
PhoenixEndOfSection(
label: 'End of the section',
logoImage: SvgPicture.asset('assets/logo.svg'),
),
],
),
],
)
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
label
String
Yes
logoImage
Widget
No
SvgPicture.asset('assets/images/logo_grey.svg', package: 'phoenix_widgets');
labelStyle
TextStyle
No
TextStyle(color: Color(0xFFE0E0E0), fontWeight: FontWeight.w300, fontSize: 12)
PhoenixTick #
PhoenixTick is a tick that can be shown as ticked or unticked.
Usage Example #
class Page extends StatelessWidget {
Page({ super.key })
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
PhoenixTick(
isTicked: true,
)
],
),
],
)
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
isTicked
bool
No
false
tickedIcon
Widget
No
SvgPicture.asset('assets/images/ic_ticked.svg', width: 24, height: 24, package: 'phoenix_widgets');
untickedIcon
Widget
No
SvgPicture.asset('assets/images/ic_unticked.svg', width: 24, height: 24, package: 'phoenix_widgets');
crossFadeDuration
Duration
No
Duration(milliseconds: 300)
PhoenixImageEaseOutFade #
PhoenixImageEaseOutFade is a widget that show two image with ease in and fade out animation
Usage Example #
class PhoenixImageEaseOutPage extends StatelessWidget {
const PhoenixImageEaseOutPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Image Ease Out Fade'),
),
body: const PhoenixImageEaseOutFade(
imageListCollection: [
"https://cdn3.iconfinder.com/data/icons/2018-social-media-logotypes/1000/2018_social_media_popular_app_logo_twitter-128.png",
"https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/387_Xbox_logo-512.png",
"https://cdn1.iconfinder.com/data/icons/logos-brands-in-colors/272/Google_2015_logo-512.png",
"https://cdn4.iconfinder.com/data/icons/iconsimple-logotypes/512/github-512.png",
"https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/395_Youtube_logo-512.png",
"https://cdn2.iconfinder.com/data/icons/social-icons-33/128/Instagram-512.png",
"https://cdn2.iconfinder.com/data/icons/social-media-2421/512/TikTok-512.png",
],
durationMiliseconds: 1500,
imagePadding: EdgeInsets.all(16),
),
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
imageListCollection
List<String>
yes
``
durationMiliseconds
int
yes
``
imageHeight
double
No
((MediaQuery.of(context).size.width / 16 * 9) / 2)
imagePadding
EdgeInsets
No
EdgeInsets.zero
PhoenixRichTextHandler #
PhoenixRichTextHandler is a widget that designed to display and render HTML content or rich text.
Usage Example #
class PhoenixRichTextHandlerPage extends StatelessWidget {
const PhoenixRichTextHandlerPage({super.key});
@override
Widget build(BuildContext context) {
String? htmlContent = '''
<h1>Heading 1</h1> <h2>Heading 2</h2> <h3>Heading 3</h3> <h4>Heading 4</h4> <hr /> <p>Image Banner</p> <a href="https://ikhlas.com/umrah/ms/my/" target="_blank" ><img src="https://images.contentstack.io/v3/assets/blt2a130c768c36b9df/blt172035f00f6ae58a/657985e9a794f21a9f4af11a/Panduan_Melaksanakan_Ibadah_Umrah.jpg" width="100%" height="auto" style="text-align: left" /></a> <br /><p> Text - Participate in our contest <i> for an opportunity to embark on an <u>Umrah</u> journey</i> with <strong> ikhlas.com</strong> </p> <p> Text with inline logo - 📣 Don't miss the chance to win Umrah 🕋 </p> <hr /> <p>Quote</p> <blockquote cite="https://www.huxley.net/bnw/four.html" style="text-align: center" > <p style="text-align: center"> The Closest Of People To Me On Judgment Day, Will Be Those Who Sent Most Salawat (Blessings) Upon Me </p> <footer>— Muhammad SAW</footer> </blockquote> <hr /> <div class="outer-container"> <div class="item"> Webview for iframe elements <div class="container"> <iframe class="responsive-iframe" src="https://www.instagram.com/p/CwnNVaOqudj/embed" ></iframe> </div> </div> </div>
''';
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('Phoenix Rich Text Handler'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.fromLTRB(16, 40, 16, 40),
child: RichTextHandler(content: htmlContent),
),
);
}
}
copied to clipboard
Available Parameters #
Param
Type
isRequired
Default
content
String
yes
``
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.