Skip to content

Instantly share code, notes, and snippets.

Avatar

Scotty kangabru

View GitHub Profile
@kangabru
kangabru / typedFormData.ts
Created Aug 20, 2020
Adds expected value types to FormData
View typedFormData.ts
// Before: untyped 😥
const form1 = new FormData()
form1.get('url') // Is 'url' expected?
form1.append('image', '?') // Do I pass in a string or blob?
// After: same functionality but with types 😁
const form2 = TypedFormData<{ title: string, image: Blob }>()
@kangabru
kangabru / magnifying_glass.dart
Last active Aug 17, 2020
Allows you to display a 'magnifying glass' widget which helps users see what's under their finger while they are drawing
View magnifying_glass.dart
import 'dart:math';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
/// The radius of the mag glass.
const double _RADIUS = 60.0;
/// The distance the mag glass will be offset from the touch point.
const double _OFFSET = _RADIUS * 1.5;
@kangabru
kangabru / screenshot.dart
Last active Aug 17, 2020
Allows you extract an image of specific widgets within your app. Includes the ability to ignore certain widgets and to crop the final image.
View screenshot.dart
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
// Note: [ui.Image] represents the lower level image data while [Image] represents a renderable image.
/// Provides the ability to take screenshots of specific widgets.
mixin Screenshot<T extends StatefulWidget> on State<T> {
@kangabru
kangabru / list_picker.dart
Last active Aug 17, 2020
A Flutter scrollable horizontal list widget which animates into place on load.
View list_picker.dart
import 'package:flutter/material.dart';
import './animation_mixins.dart'; // See my other gist for this
/// A scrollable horizontal list which animates into place on load.
class ListPicker extends StatefulWidget {
final List<Widget> children;
final double paddingX, paddingY;
const ListPicker({
this.children,
this.paddingX = 12.0,
@kangabru
kangabru / animation_widgets.dart
Last active Aug 17, 2020
A couple of handy Flutter widgets I use for animations.
View animation_widgets.dart
import 'package:flutter/material.dart';
import './animation_mixins.dart'; // See my other gist for this
// Ímplicitly animates an int to the given value.
class AnimatedInt extends StatelessWidget {
final int value;
final Duration duration; // milliseconds
final TextStyle style;
AnimatedInt({
@required this.value,
@kangabru
kangabru / animation_mixins.dart
Created Jun 7, 2020
A couple of handy Flutter mixins I use for animations.
View animation_mixins.dart
import 'dart:async';
import 'package:flutter/material.dart';
/// A mixin to perform context dependent function when the widget loads.
mixin FirstLoad<T extends StatefulWidget> on State<T> {
bool _hasLoaded = false;
bool get isFirstLoad => !_hasLoaded;
/// Calls the given callback on the first load only.
/// This should NOT be called in [initState] as the UI will not have rendered it.
View svg_override.dart
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:xml/xml.dart';
import 'package:flutter/services.dart';
/// An example widget which uses an [SvgOverride] widget to render an SVG with dynamic colors.
class ZenButtonCookie extends StatelessWidget {
final CookieColor color; // My internal color object. Adapt this for your needs.
const ZenButtonCookie(this.color);
You can’t perform that action at this time.