This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 }>() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |