Skip to content

Instantly share code, notes, and snippets.

View brianegan's full-sized avatar

Brian Egan brianegan

View GitHub Profile
@brianegan
brianegan / stopwatch_widget_test_update.dart
Created February 21, 2019 12:14
Now uses `tester.binding.clock`
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:quiver/async.dart';
import 'package:quiver/testing/time.dart';
void main() {
group('CounterTimer', () {
testWidgets('counts down from 10 to 0', (WidgetTester tester) async {
// Create a Timer
final timer = CountdownTimer(
@brianegan
brianegan / main.dart
Created February 23, 2019 22:31
Const Widget vs new Widget vs method
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
@brianegan
brianegan / main.dart
Created March 4, 2019 16:27
Simple SVG implementation + Test
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SVG + Test',
@brianegan
brianegan / main.dart
Created March 4, 2019 23:29
Counter Bloc + Provider
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart';
class CounterBloc {
final _subject = BehaviorSubject<int>.seeded(0);
ValueObservable<int> get counter => _subject;
void increment() => _subject.value++;
@brianegan
brianegan / ez_animated_list.dart
Created March 5, 2019 18:55
An AnimatedList that does all the hard work for ya.
library ez_animated_list;
import 'package:flutter/widgets.dart';
typedef EzAnimatedItemBuilder<T> = Widget Function(
BuildContext context,
Animation<double> animation,
T item,
);
@brianegan
brianegan / counter_with_deactivate.dart
Created March 11, 2019 10:59
Shows how to filter events from a Stream based on events from another Stream
import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
import 'package:tuple/tuple.dart';
void main() => runApp(MyApp());
class CounterBloc {
final _counterSubject = BehaviorSubject.seeded(0);
final _isActive = BehaviorSubject.seeded(true);
Stream<int> counter;
@brianegan
brianegan / main.dart
Created March 19, 2019 12:40
Live Coded Scoped Model
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class Counter extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
@brianegan
brianegan / main.dart
Created June 19, 2019 17:21
Animations with Redux (or Streams or ChangeNotifiers, etc)
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';
void main() {
runApp(
MyApp(
store: Store<AppState>(
reducer,
@brianegan
brianegan / main.dart
Created June 19, 2019 17:22
Animations with Redux (or Streams or ChangeNotifiers, etc)
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';
void main() {
runApp(
MyApp(
store: Store<AppState>(
reducer,
@brianegan
brianegan / main.dart
Created July 18, 2019 16:00
Maintain scroll position between tabs
import 'package:flutter/material.dart';
void main() {
runApp(TabBarDemo());
}
class TabBarDemo extends StatefulWidget {
@override
_TabBarDemoState createState() => _TabBarDemoState();
}