skadi 0.0.1
skadi: ^0.0.1 copied to clipboard
Flutter utilities packages
skadi #
A flutter package for custom widgets and utility function.
Installation #
Add this to pubspec.yaml
dependencies:
skadi: ^0.0.1
Widgets #
Widget | Description |
---|---|
[ConditionalWidget][other] | Build a widget base on a boolean condition |
[Divider0][other] | Divider with 0 height |
[EllipsisText][other] | Nullable Text with Ellipsis as default overflow |
[KeyboardDismiss][other] | Dismiss keyboard on tap |
[LoadingOverlay][other] | Create an overlay loading that cover entire screen and disable input |
[LoadingOverlayPopScope][other] | prevent or allow user from pop the screen when LoadingOverlay is displaying |
[ValueNotifierWrapper][other] | Wrapper with ValueNotifier when using StatelessWidget |
[WidgetDisposer][other] | Provide a dispose callback when using StatelessWidget |
Mixin #
AfterBuildMixin #
Create an override method that will call after the build method has been called
class _HomePageState extends State<NewPage> with AfterBuildMixin {
//this method will call after widget has been build
@override
void afterBuild(BuildContext context) {
}
@override
Widget build(BuildContext context) {
return Container();
}
}
BoolNotifierMixin #
Provider a ValueNotifier
- boolNotifier: a bool ValueNotifier
method
- toggleValue: toggle loadingNotifier
class _HomePageState extends State<NewPage> with BoolNotifierMixin {
@override
Widget build(BuildContext context) {
return Container();
}
}
Extension #
BuildContext extension #
Size screenSize = context.screenSize;
Color primaryColor = context.primaryColor;
Color accentColor = context.accentColor;
TextThemeData textTheme = context.textTheme;
Theme theme = context.theme;
MediaQueryData data = context.mediaQuery;
//
context.hideKeyboard();
TextStyle Extension #
Text("Hello Flutter", style: TextStyle().normal)
Text("Hello Flutter", style: TextStyle().medium)
Text("Hello Flutter", style: TextStyle().bold)
Text("Hello Flutter", style: TextStyle().semiBold)
Text("Hello Flutter", style: TextStyle().white)
Text("Hello Flutter", style: TextStyle().black)
Text("Hello Flutter", style: TextStyle().red)
Text("Hello Flutter", style: TextStyle().green)
Text("Hello Flutter", style: TextStyle().grey)
Text("Hello Flutter", style: TextStyle().underline)
Text("Hello Flutter", style: TextStyle().setColor(Colors.white))
Text("Hello Flutter", style: TextStyle().setFontSize(24))
### DateTime extension
```dart
DateTime.now().format(format: "dd mmm yyyy", locale: context.locale)
DateTime.now().isTheSameDay(DateTime.now())
DateTime.now().formatToLocalDate(format: "dd mmm yyyy", locale: context.locale)
List and map extension #
///Filter list
List<int> adult = [2,24,12,18].filter((age)=> age >= 18);
///Add age to Map if age isn't null
Map<String, int> data = {};
int? age = 20;
data.addIfNotNull("age",age);
///Return null if age doesn't exist
data.getIfExist("age");
Widget's Extension #
Text("Hello Flutter").padding(EdgeInsets.all(16.0)) // default value is EdgeInsets.all(8.0)
Text("Hello Flutter").margin(EdgeInsets.all(16.0)) // default value is EdgeInsets.all(8.0)
///As a value
Text("Hello Flutter").marginValue(all: 12)
Text("Hello Flutter").paddingValue(horizontal: 12, vertical: 8)
Text("Hello Flutter").cssSpacing(margin: [10,10], padding:[16])
//css margin and padding rule
Text("Hello Flutter").rotate(45)
///Rotate 45 degree
Text("Hello Flutter").flexible
Text("Hello Flutter").expanded
Text("Hello Flutter").clipOval
Text("Hello Flutter").opacity(0.5)
String extension #
String name = "chunlee".capitalize() // => Chunlee
Utility and Style #
DotTabIndicator #
[alt text]
TabBar(
...
indicator: DotTabIndicator(
color: Colors.blue,
dotAlignment: TabAlignment.bottom,
)
...
)
SmallUnderlineTabIndicator #
[alt text]
TabBar(
...
isScrollable: true, //This indicator work best with scrollable tab bar
indicator: SmallUnderlineTabIndicator(
color: Colors.blue,
paddingLeft: 16,
alignment: TabAlignment.bottom,
)
...
)
ShadowInputBorder #
This input border solve a problem that TextField doesn't have a default elevation.
[alt text]
TextFormField(
...
decoration: InputDecoration(
border: ShadowInputBorder(
elevation: 2.0, //required
fillColor: Colors.white, //required
shadowColor: Colors.black87,
),
)
...
)
SkadiUtils #
//Ping to google to check for internet connection
bool isConnected = await SkadiUtils.checkConnection();
//Convert degree to radian value
double radian = SkadiUtils.degreeToRadian(90);
//Future.delayed base on millisecond value
await SkadiUtils.wait(200);
//Get random image from unsplash
String carUrlImage = SkadiUtils.unsplashImage(width: 200, height: 200, category: "car");
//Get byte from asset bundle
Future<Uint8List> imageByte = await SkadiUtils.getBytesFromAsset("image asset path", 200); //200 is an image width
//Get random image from unsplash
String carUrlImage = SkadiUtils.unsplashImage(width: 200, height: 200, category: "car");
//Get random from picsum with provided: width and height
String randomUrlImage = SkadiUtils.picsumImage(200,300);