Skip to content

Instantly share code, notes, and snippets.

View stevenosse's full-sized avatar
😁
I turn coffee into mobile apps

Steve stevenosse

😁
I turn coffee into mobile apps
View GitHub Profile
@stevenosse
stevenosse / currencies-with-flags.json
Created May 21, 2025 21:01 — forked from ibrahimhajjaj/currencies-with-flags.json
Currencies json that contains currency flag as image data, currency codes, currency name, currency base country name, currency base country code.
[
{
"code": "AED",
"name": "UAE Dirham",
"country": "United Arab Emirates",
"countryCode": "AE",
"flag": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAG5SURBVHja7JdLihRBEEBfVqUU6rQNggiCFxA8gswFRNy49gAeQdx4G8HbuHDvRkRUnKxPZ2dGhous6Y9TtavPZmITtYggXsWPSKOqrCkFK8stgAFKoOr1kiKAt8CD76/f/KYYj//u7bPpU28Mn199eGiBLabg7uWLUePLp08mB/j66xvA1gKVSkK9J/29guuxNCZrVX60905qZlD0xvd5XbPvmN22uo+XCFDZXI2Idjt0txuk9TFM+ve7Yk9MAkAPIKSuI3XdoEMX/aQAd4qSfYpHAI0RbVt0FGA/KYAtyvMMaBTUObRpBh2a0E3cgspewkkJQkDqGm3bQfNPL9/PtIQ+cmjC5OqbTaj9qppRcglCAFej3h9H8P9xnBUgCtRNBllYDj0QmxbWAkgxggiktFjg60PosAeMJnQtAIkRq7poBlIfK5cgRBQdzYC1dtLgVVVRluUJgEQo7XH0RminlBDCKUDK99AIwByXs4gcb0JJafaFc7aCjTlktQBIqpiVAPIYas5AcXEx6LCRzaxjKAn4465GjZ1zs13GBngMPAceLbyFfwJfTP8m2PR6SfGAM7eP07UB/g0Aw73uXdMbeJMAAAAASUVORK5CYII="
},
{
"code": "AFN",
@stevenosse
stevenosse / listenable_consumer.dart
Created January 17, 2025 18:21
Like BlocConsumer but for Value/ChangeNotifiers
import 'package:flutter/material.dart';
class ListenableConsumer<T extends Listenable> extends StatefulWidget {
final T listenable;
final Widget Function(BuildContext context, T value) builder;
final void Function(BuildContext context, T value) listener;
const ListenableConsumer({
super.key,
required this.listenable,
@stevenosse
stevenosse / adaptative_menu.button.dart
Last active August 9, 2024 07:57
AdaptativeMenuButton (Uses Popup menu button on Android & CupertinoActionSheet on iOS)
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class AdaptivePopupMenu extends StatelessWidget {
final List<AdaptiveMenuItem> menuItems;
final Widget child;
final String? iosCancelButtonLabel;
final BorderRadius? androidButtonRadius;
final double spacing;
@stevenosse
stevenosse / main.dart
Last active July 8, 2024 15:06
Draw a progress bar around a widget. This implementation extends ShapeBorder so it's usable around a Card (or any other widget expecting a ShapeBorder)
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final double _progress = .5;
@override
Widget build(BuildContext context) {
@stevenosse
stevenosse / main.dart
Created June 20, 2024 21:54
Confetti V2
import 'dart:math';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
@stevenosse
stevenosse / main.dart
Created June 20, 2024 13:32
Confetti experiment
import 'package:flutter/material.dart';
import 'dart:math';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
@stevenosse
stevenosse / main.dart
Last active June 1, 2024 16:53
POC: Zoomable GridView widget
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
@stevenosse
stevenosse / pop_confirm.dart
Last active May 28, 2024 11:16
PopConfirm
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
/// Flutter widget to execute asynchronous operations before a page is popped
/// Uses Flutter 3.16.x's PopScope attribute
class PopConfirm extends StatefulWidget {
const PopConfirm({
super.key,
@stevenosse
stevenosse / lifecycle_watcher.dart
Created November 20, 2023 15:16
LifecycleWatcher
import 'package:flutter/material.dart';
class LifecycleWatcher extends StatefulWidget {
const LifecycleWatcher({
super.key,
required this.child,
this.onResume,
this.onPause,
this.onInactive,
this.onHide,
@stevenosse
stevenosse / test_screenshot_util.dart
Last active January 20, 2025 21:02
testWidgets screenshot
/// Originally published on: https://gist.github.com/stevsct/fc84fee8bcc3271e2295d99d7c7ae49d
///
/// Inspired by https://pub.dev/packages/spot
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';