This is the full Cloud Functions code explained in my blog post: How to schedule a Cloud Function to run in the future (in order to build a Firestore document TTL)
This file contains hidden or 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
private fun launchIntents(context: Context) { | |
val whatsappIntent = getWhatsappIntent(context) | |
val telegramIntent = getTelegramIntent(context) | |
val intents = listOfNotNull(whatsappIntent, telegramIntent) | |
val globalIntent = Intent() | |
val chooserIntent = Intent.createChooser(globalIntent, "Send message") | |
.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toTypedArray()) |
This file contains hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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); |
This file contains hidden or 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/gestures.dart'; | |
import 'package:flutter/rendering.dart'; | |
import 'package:flutter/widgets.dart' hide PageView; | |
/// This is copy-pasted from the Flutter framework with a support added for building | |
/// pages off screen using [Viewport.cacheExtents] and a [LayoutBuilder] | |
/// | |
/// Based on commit 3932ffb1cd5dfa0c3891c60977ee4f9cd70ade66 on channel dev | |
// Having this global (mutable) page controller is a bit of a hack. We need it |
NewerOlder