Skip to content

Instantly share code, notes, and snippets.

View snapsl's full-sized avatar
💭
coding...

snapsl

💭
coding...
View GitHub Profile
@snapsl
snapsl / riverpod_extension.dart
Created July 15, 2024 12:35
Riverpod onRefresh extension
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
extension OnRefresh<T> on WidgetRef {
/// Use for [RefreshIndicator.onRefresh]
Future<void> onRefresh(Refreshable<T> provider) async {
try {
return await refresh(provider);
} catch (_) {
return;
@snapsl
snapsl / windowclass.dart
Last active May 19, 2024 13:41
Window class matching material 3 guidelines.
import 'package:flutter/widgets.dart'
show BoxConstraints, BuildContext, MediaQuery;
/// BoxConstraints matching the material3 guidelines
const BoxConstraints materialBoxConstraints = BoxConstraints(maxWidth: 840);
/// https://m3.material.io/foundations/layout/applying-layout/window-size-classes
enum WindowClass implements Comparable<WindowClass> {
small(_smallWidth),
medium(_mediumWidth),
@snapsl
snapsl / connectivity_status_provider.dart
Last active March 21, 2024 14:15
Use connectivity plus with riverpod
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'connectivity_status_provider.g.dart';
@riverpod
Stream<List<ConnectivityResult>> connectivityStatus(
ConnectivityStatusRef ref,
) async* {
final Connectivity connectivity = Connectivity();
@snapsl
snapsl / sensor_provider.dart
Last active March 20, 2024 17:57
User sensor plus data with riverpod 2.0
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:sensors_plus/sensors_plus.dart';
part 'sensor_provider.g.dart';
// https://pub.dev/packages/sensors_plus
@riverpod
Stream<AccelerometerEvent> accelerometer(AccelerometerRef ref) =>
accelerometerEventStream();
import 'package:package_info_plus/package_info_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'package_info_provider.g.dart';
@riverpod
Future<PackageInfo> packageInfo(PackageInfoRef ref) =>
PackageInfo.fromPlatform();
import 'package:flutter/foundation.dart';
extension MobilePlatform on TargetPlatform {
/// Checks if platform is mobile.
bool isMobilePlatform() =>
this == TargetPlatform.android || this == TargetPlatform.iOS;
}
extension CupertinoPlatform on TargetPlatform {
/// Checks if platform is an apple device.
import 'dart:math' as math;
extension RandomListItem<T> on List<T> {
static final _rand = math.Random();
/// picks a random item from the list.
T randomItem() => this[_rand.nextInt(length)];
}