Skip to content

Instantly share code, notes, and snippets.

View philipmjohnson's full-sized avatar

Philip Johnson philipmjohnson

View GitHub Profile
@philipmjohnson
philipmjohnson / revenuecat-providers.dart
Last active September 17, 2025 18:11
Revenue Cat Providers
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ggc_app/features/common/functions/firebase_local_emulation.dart';
import 'package:ggc_app/features/revenuecat/data/configure_purchases.dart';
import 'package:ggc_app/features/revenuecat/data/constants.dart';
import 'package:ggc_app/features/revenuecat/data/dummy_offering.dart';
import 'package:ggc_app/features/user/data/user_providers.dart';
import 'package:ggc_app/repositories/firestore/firestore_providers.dart';
import 'package:purchases_flutter/purchases_flutter.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ggc_app/features/common/widgets/ggc_error.dart';
import 'package:ggc_app/features/common/widgets/ggc_loading_indicator.dart';
class GgcAsyncValueWidget extends StatelessWidget {
const GgcAsyncValueWidget({
required this.asyncValue,
required this.data,
required this.message,
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart' hide Badge;
import 'package:ggc_app/features/admin/data/role_provider.dart';
import 'package:ggc_app/features/admin/domain/role.dart';
import 'package:ggc_app/features/badge/data/badge_instance_provider.dart';
import 'package:ggc_app/features/badge/data/badge_provider.dart';
import 'package:ggc_app/features/badge/domain/badge.dart';
import 'package:ggc_app/features/badge/domain/badge_instance.dart';
import 'package:ggc_app/features/bed/data/bed_provider.dart';
import 'package:ggc_app/features/bed/domain/bed.dart';
@philipmjohnson
philipmjohnson / delete_planting_screen.dart
Last active August 14, 2025 19:23
Elided version of the widget displayed after the user clicks on the trash icon associated with a Planting.
// <imports deleted>
// Called with a bunch of data to support the deletion process
class DeletePlantingScreenInternal extends ConsumerStatefulWidget {
const DeletePlantingScreenInternal({
required this.chapters,
required this.gardens,
required this.users,
required this.gardenID,
required this.plantingID,
@philipmjohnson
philipmjohnson / ics_course_db.dart
Last active August 30, 2023 00:30
ICSCourseDB
enum CourseType {intro, advanced}
class ICSCourse {
final int courseNum;
List<ICSCourse> prerequisities = [];
ICSCourse(this.courseNum);
getType() {
return (courseNum <= 200) ? CourseType.intro : CourseType.advanced;
}
@philipmjohnson
philipmjohnson / ics_course.dart
Last active August 29, 2023 22:02
ICSCourse
enum CourseType {intro, advanced}
class ICSCourse {
final int courseNum;
List<ICSCourse> prerequisities = [];
ICSCourse(this.courseNum);
getType() {
return (courseNum <= 200) ? CourseType.intro : CourseType.advanced;
}
@philipmjohnson
philipmjohnson / birthday_cake.dart
Last active August 29, 2023 20:15
Dart Birthday Cake
class BirthdayCake {
final String ingredient;
final String frosting;
String inscription = '';
BirthdayCake({required this.ingredient, required this.frosting});
@override
String toString() {
return '<BirthdayCake ($ingredient, $frosting, $inscription, ${price()})>';
}
@philipmjohnson
philipmjohnson / main.dart
Last active November 12, 2022 21:00
flutter/development/ui/layout/example1
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
@philipmjohnson
philipmjohnson / bio.json
Created June 7, 2022 20:40
Sample bio.json file for TechFolios
{
"basics": {
"name": "Philip Johnson",
"label": "Professor",
"picture": "https://github.com/philipmjohnson.png",
"email": "johnson@hawaii.edu",
"phone": "808-956-3489",
"website": "https://philipmjohnson.github.io",
"summary": "I am a Professor of Information and Computer Sciences at the University of Hawaii at Manoa. I expect to retire in 2025.",
"location": { "address": "", "postalCode": "96822", "city": "Honolulu", "countryCode": "USA", "region": "Hawaii" },
@philipmjohnson
philipmjohnson / Attractions.js
Created June 1, 2022 16:44
Example Simple Schema for Vacay system
/**
* Create the schema for Stuff
* See: https://github.com/aldeed/meteor-autoform#common-questions
* See: https://github.com/aldeed/meteor-autoform#affieldinput
*/
Attractions.attachSchema(new SimpleSchema({
startdate: {
label: "Date",
type: Date,
optional: false,