You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			236 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			236 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:math';
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| 
 | |
| extension ExtendedText on Widget {
 | |
|   showOverlay({double? width, double? height}){
 | |
|     return Container(
 | |
|       width: width ?? double.infinity,
 | |
|       height: height ?? 60,
 | |
|       decoration: BoxDecoration(
 | |
|         gradient: LinearGradient(colors: [
 | |
|           Colors.black.withOpacity(0.2),
 | |
|           Colors.black.withOpacity(0.1),
 | |
|           Colors.black.withOpacity(0.004),
 | |
|         ], begin: Alignment.topCenter, end: Alignment.bottomCenter, tileMode: TileMode.clamp),
 | |
|       ),
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| extension ImageExt on Image {
 | |
|   Widget circular() {
 | |
|     return ClipRRect(
 | |
|       clipBehavior: Clip.hardEdge,
 | |
|       borderRadius: BorderRadius.circular(100),
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| extension WidgetExt on Widget {
 | |
|   Widget toWidget() {
 | |
|     return this as Widget;
 | |
|   }
 | |
| 
 | |
|   Widget sized({double? width, double? height}) {
 | |
|     return SizedBox(
 | |
|       width: width,
 | |
|       height: height,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
|   Widget inkWell({required VoidCallback onTap,double radius=0}){
 | |
|     return InkWell(
 | |
|       child: Material(child: this,color: Colors.transparent,),
 | |
|       onTap: onTap,
 | |
|     );
 | |
|   }
 | |
|   Widget sizeSq(double size) {
 | |
|     return SizedBox(
 | |
|       width: size,
 | |
|       height: size,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget fillParent({double hFactor = 1, double? vFactor}) {
 | |
|     return FractionallySizedBox(
 | |
|       heightFactor: null,
 | |
|       widthFactor: hFactor,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget margin(
 | |
|       {double top = 0, double bottom = 0, double left = 0, double right = 0}) {
 | |
|     var pad =
 | |
|     EdgeInsets.only(top: top, left: left, bottom: bottom, right: right);
 | |
|     try {
 | |
|       (this as dynamic).margin = pad;
 | |
|     } catch (err) {
 | |
|       return Padding(
 | |
|         padding: pad,
 | |
|         child: this,
 | |
|       );
 | |
|     }
 | |
|     return this;
 | |
|   }
 | |
| 
 | |
|   Widget toClip({double r = 40}) {
 | |
|     return ClipRRect(
 | |
|       borderRadius: BorderRadius.all(
 | |
|         Radius.circular(r),
 | |
|       ),
 | |
|       clipBehavior: Clip.antiAlias,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   // Widget scrollable({Axis? direction, bool fadingEdge = true}) {
 | |
|   //   var scrollview = SingleChildScrollView(
 | |
|   //     child: this,
 | |
|   //     controller: ScrollController(),
 | |
|   //     scrollDirection: direction ?? Axis.vertical,
 | |
|   //   );
 | |
|   //   return fadingEdge ? scrollview.fadingEdge() : scrollview;
 | |
|   // }
 | |
| 
 | |
|   Widget expand() {
 | |
|     return Expanded(
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget align(Alignment alignment) {
 | |
|     return Align(
 | |
|       alignment: alignment,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget center() {
 | |
|     return Center(
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget padding(EdgeInsets padding) {
 | |
|     return Padding(
 | |
|       padding: padding,
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget paddingAll(double padding) {
 | |
|     return Padding(
 | |
|       padding: EdgeInsets.all(padding),
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   // Widget onTap(VoidCallback onTap, {double corners = 0}) {
 | |
|   //   return Clickable.widget(child: this, corners: corners, onTap: onTap);
 | |
|   // }
 | |
| 
 | |
|   Widget ignoreInteraction() {
 | |
|     return IgnorePointer(
 | |
|       child: this,
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| // extension xScrollView on ScrollView {
 | |
| //   Widget fadingEdge() => FadingEdgeScrollView.fromScrollView(
 | |
| //     child: this,
 | |
| //     gradientFractionOnEnd: 0.08,
 | |
| //     gradientFractionOnStart: 0.08,
 | |
| //     shouldDisposeScrollController: true,
 | |
| //   );
 | |
| // }
 | |
| //
 | |
| // extension x2ScrollView on SingleChildScrollView {
 | |
| //   Widget fadingEdge() => FadingEdgeScrollView.fromSingleChildScrollView(
 | |
| //     child: this,
 | |
| //     gradientFractionOnEnd: 0.08,
 | |
| //     gradientFractionOnStart: 0.08,
 | |
| //     shouldDisposeScrollController: true,
 | |
| //   );
 | |
| // }
 | |
| 
 | |
| class Position {
 | |
|   final double x, y, w, h;
 | |
| 
 | |
|   Position(this.x, this.y, this.w, this.h);
 | |
| }
 | |
| 
 | |
| extension KeyExt on GlobalKey {
 | |
|   Position globalPosition() {
 | |
|     RenderBox box = currentContext!.findRenderObject() as RenderBox;
 | |
|     Offset xy = box.localToGlobal(Offset.zero);
 | |
|     Size wh = box.size;
 | |
|     return Position(xy.dx, xy.dy, wh.width, wh.height);
 | |
|   }
 | |
| }
 | |
| 
 | |
| extension StateExt on State {
 | |
|   reload({VoidCallback? b}) {
 | |
|     setState(b ?? () {});
 | |
|   }
 | |
| }
 | |
| 
 | |
| // extension LocatiionExt on Location {
 | |
| //   LatLng toLatLng() {
 | |
| //     return LatLng(lat!, lng!);
 | |
| //   }
 | |
| // }
 | |
| 
 | |
| // extension xList<T> on List<T> {
 | |
| //   T randomItem() {
 | |
| //     final random = new Random();
 | |
| //     var i = random.nextInt(this.length);
 | |
| //     return this[i];
 | |
| //   }
 | |
| //
 | |
| //   List<T> append(List<T> items) {
 | |
| //     this.addAll(items);
 | |
| //     return this;
 | |
| //   }
 | |
| //
 | |
| //   bool isFirst(T item) => first == item;
 | |
| //
 | |
| //   bool isLast(T item) => last == item;
 | |
| //
 | |
| //   getOneByOne(
 | |
| //       {required int delayMillis,
 | |
| //       required Function(T) callback, VoidCallback? complete}) async {
 | |
| //     for (var i in this) {
 | |
| //       await delay(delayMillis);
 | |
| //       callback(i);
 | |
| //     }
 | |
| //     complete!();
 | |
| //   }
 | |
| // }
 | |
| 
 | |
| extension xFuture<T> on Future<T?> {
 | |
|   thenWithDelay(int millis, Function(T) thenBlock) {
 | |
|     then((value) {
 | |
|       Future.delayed(Duration(milliseconds: millis))
 | |
|           .then((value) => thenBlock(value));
 | |
|     });
 | |
|   }
 | |
| }
 | |
| 
 | |
| extension xDouble on int {
 | |
|   Duration durationMillis() => Duration(milliseconds: this);
 | |
| 
 | |
|   Duration durationSec() => Duration(seconds: this);
 | |
| 
 | |
|   Duration durationHour() => Duration(hours: this);
 | |
| }
 |