Skip to content

Instantly share code, notes, and snippets.

View chimon2000's full-sized avatar

Ryan chimon2000

View GitHub Profile
@chimon2000
chimon2000 / list.extension.dart
Last active November 2, 2020 06:47
state_examples: common classes
// A simple helper function to allow us to immutably add to lists.
extension ImmutableList<T> on List<T> {
List<T> concat(T item) => List<T>.from(<T>[...this, item]);
}
@chimon2000
chimon2000 / main.dart
Last active November 3, 2020 04:33
state_examples: riverpod main root
void main() {
// For widgets to be able to read providers, we need to wrap the entire
// application in a "ProviderScope" widget.
// This is where the state of our providers will be stored.
runApp(ProviderScope(child: App()));
}
@chimon2000
chimon2000 / notes.controller.dart
Last active November 3, 2020 04:38
notes controller
// We create a "provider", which will store a reference to NotesController.
final notesProvider = StateNotifierProvider((ref) => NotesController());
class NotesController extends StateNotifier<NotesState> {
NotesController() : super(NotesState.initial());
void addNote() {
var notes = state.notes.concat(state.input);
state = state.copyWith(notes: notes, input: '');
}
@chimon2000
chimon2000 / base_command.dart
Created October 27, 2020 06:17
Command Pattern in Dart (binder)
abstract class BaseCommand<T> {
BuildContext _context;
BaseCommand(this._context);
T locate<T>(LogicRef<T> ref) => _context.use(ref);
T read<T>(StateRef<T> ref) => _context.read(ref);
Future<T> run();
}
@chimon2000
chimon2000 / base_command.dart
Created October 22, 2020 00:54
Command Pattern in Dart (Cubit + GetIt)
import 'package:get_it/get_it.dart';
abstract class BaseCommand<T> {
GetIt getIt = GetIt.instance;
D locate<D>() => getIt.get<D>();
Future<T> run();
}
@chimon2000
chimon2000 / base.command.dart
Last active July 30, 2021 14:41
Command Pattern in Dart
abstract class BaseCommand<T> {
BuildContext _context;
BaseCommand(BuildContext context) {
/// Get root context
/// If we're passed a context that is known to be root, skip the lookup, it will throw an error otherwise.
_context = (context == _lastKnownRoot) ? context : context.read();
_lastKnownRoot = _context;
}
@chimon2000
chimon2000 / counter_cubit.dart
Created July 16, 2020 07:07
counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
}
@chimon2000
chimon2000 / counter_bloc.dart
Last active July 16, 2020 07:06
Bloc counter
enum CounterEvent { increment }
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0);
@override
Stream<int> mapEventToState(CounterEvent event) async* {
switch (event) {
case CounterEvent.increment:
yield state + 1;
@chimon2000
chimon2000 / counter_page.dart
Created July 16, 2020 06:53
counter_page.dart
class CounterPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Counter')),
body: BlocBuilder<CounterCubit, int>(
builder: (context, count) => Center(child: Text('$count')),
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
@chimon2000
chimon2000 / use_state_notifier.dart
Created May 5, 2020 02:59
Flutter Hook for StateNotifier
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:state_notifier/state_notifier.dart';
T useStateNotifier<T>(StateNotifier<T> notifier) {
final state = useState<T>(null);
useEffect(() {
return notifier.addListener((s) => state.value = s);
}, [notifier]);