diff --git a/flutter/.analysis_options b/flutter/.analysis_options
new file mode 100644
index 0000000..427c5c3
--- /dev/null
+++ b/flutter/.analysis_options
@@ -0,0 +1,3 @@
+analyzer:
+  exclude:
+    - deps/*
diff --git a/flutter/.gitignore b/flutter/.gitignore
index d815521..794c51a 100644
--- a/flutter/.gitignore
+++ b/flutter/.gitignore
@@ -5,6 +5,7 @@
 .pub/
 build/
 doc/
+deps/
 ios/.generated/
 packages
 pubspec.lock
diff --git a/flutter/FLUTTER_VERSION b/flutter/FLUTTER_VERSION
new file mode 100644
index 0000000..e7a3bf0
--- /dev/null
+++ b/flutter/FLUTTER_VERSION
@@ -0,0 +1 @@
+731c5903c2894df36174edc8facd39613d37e163
diff --git a/flutter/Makefile b/flutter/Makefile
index 3b96309..c7c9ed1 100644
--- a/flutter/Makefile
+++ b/flutter/Makefile
@@ -5,28 +5,34 @@
 .DEFAULT_GOAL := all
 .SUFFIXES:
 
+DIRNAME := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+FLUTTER_BIN := $(DIRNAME)/deps/flutter/bin
+DART_BIN := $(FLUTTER_BIN)/cache/dart-sdk/bin
+PATH := $(FLUTTER_BIN):$(DART_BIN):$(PATH)
+
 .PHONY: all
-all: .packages doc
+all: .packages deps
 	@true # silences watch
 
-.packages: pubspec.yaml
+.packages: pubspec.yaml deps/flutter
 	pub get
 
 .PHONY: upgrade
-upgrade:
+upgrade: deps/flutter
 	pub upgrade
 
 .PHONY: analyze
-analyze:
-	@echo "=== Analyzing Dart code ==="
-	# dartanalyzer lib/main.dart --lints --fatal-hints --fatal-warnings
-	@true
+analyze: deps/flutter
+	@echo "=== Analyzing application code ==="
+	dartanalyzer lib/main.dart --lints --fatal-hints --fatal-warnings
+	@echo "=== Analyzing test code ==="
+	dartanalyzer $(shell find test -name "*.dart") --lints --fatal-hints --fatal-warnings
 
 .PHONY: fmt
-fmt: packages
+fmt: packages deps/flutter
 	dartfmt --overwrite lib
 
-doc:
+doc: deps/flutter $(shell find lib/ -name "*.dart")
 	dartdoc
 	@touch $@
 
@@ -34,7 +40,23 @@
 # NOTE: $FLUTTER_ENGINE is automatically picked up by flutter but is explcitly
 # set here for calrity until the correct path can be set using a jiri profile.
 .PHONY: test
-test: analyze
+test: analyze deps/flutter
 	@echo "=== Running tests ==="
-	# flutter test
-	@true
+	flutter test test/unit/example_test.dart
+	flutter test test/widget/flutter_demo_test.dart
+
+.PHONY: depclean
+depclean:
+	@rm -rf $(shell find . -name "packages")
+	@rm -rf deps
+	@rm -rf .packages
+	@rm -rf pubspec.lock
+
+deps: deps/flutter
+
+deps/flutter:
+	git clone https://github.com/flutter/flutter.git -b alpha $@
+	cd $@ && git checkout $(shell echo -e `cat FLUTTER_VERSION`)
+	flutter doctor
+	pub get
+	@touch $@
diff --git a/flutter/lib/widgets/flutter_demo.dart b/flutter/lib/widgets/flutter_demo.dart
index 0e2e292..9645fa8 100644
--- a/flutter/lib/widgets/flutter_demo.dart
+++ b/flutter/lib/widgets/flutter_demo.dart
@@ -5,8 +5,9 @@
 import 'package:flutter/material.dart';
 
 class FlutterDemo extends StatefulWidget {
-  FlutterDemo({Key key}): super(key: key);
+  FlutterDemo({Key key}) : super(key: key);
 
+  @override
   FlutterDemoState createState() => new FlutterDemoState();
 }
 
@@ -19,12 +20,12 @@
     });
   }
 
+  @override
   Widget build(BuildContext context) {
     return new Scaffold(
         appBar: new AppBar(title: new Text('Flutter Demo')),
-        body: new Center(
-            child: new Text(
-                'Button tapped $counter time${ counter == 1 ? '' : 's' }.')),
+        body: new Center(child: new Text(
+            'Button tapped $counter time${ counter == 1 ? '' : 's' }.')),
         floatingActionButton: new FloatingActionButton(
             onPressed: incrementCounter,
             tooltip: 'Increment',
diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml
index 89098ec..5cfacfb 100644
--- a/flutter/pubspec.yaml
+++ b/flutter/pubspec.yaml
@@ -2,8 +2,8 @@
 description: Create a new Flutter project.
 dependencies:
   flutter:
-    path: ../../../../../flutter/packages/flutter
+    path: deps/flutter/packages/flutter
 dev_dependencies:
   test: ^0.12.6
   flutter_test:
-    path: ../../../../../flutter/packages/flutter_test
+    path: deps/flutter/packages/flutter_test
diff --git a/flutter/test/flutter_demo_test.dart b/flutter/test/flutter_demo_test.dart
deleted file mode 100644
index 7a18709..0000000
--- a/flutter/test/flutter_demo_test.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2016 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-import "package:test/test.dart";
-import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:reader/widgets/flutter_demo.dart';
-
-void main() {
-  test("Example State test", () {
-    testWidgets((WidgetTester tester) {
-      GlobalKey key = new GlobalKey();
-      tester.pumpWidget(new MaterialApp(
-          title: 'Test App',
-          routes: <String, WidgetBuilder>{
-            '/': (BuildContext context) => new FlutterDemo(key: key)
-          }));
-
-      // Test State.
-      StatefulElement element = tester.findElementByKey(key);
-      FlutterDemoState state = element.state;
-
-      expect(tester.findText("Flutter Demo"), isNotNull);
-      expect(tester.findText("Button tapped 0 times."), isNotNull);
-
-      state.incrementCounter();
-      // Advance the flutter framework to the next tick.
-      tester.pump();
-
-      expect(state.counter, equals(1));
-      expect(tester.findText("Button tapped 1 time."), isNotNull);
-
-      // NOTE: There is an animation segue for the floating action button in
-      // the material scaffold. The FAB is not tappable during this initial
-      // segue, the FAB will not be responsive to tapping until the animation
-      // ends at 400ms.
-      //
-      // SEE: https://git.io/vaLPb
-      tester.pump(new Duration(milliseconds: 400));
-
-      // Test Widget input and rendering.
-      StatefulElement fab = tester.findElement((Element element) {
-        return element.widget is FloatingActionButton;
-      });
-
-      expect(fab, isNotNull);
-
-      tester.tap(fab);
-      tester.pump();
-
-      expect(state.counter, equals(2));
-      expect(tester.findText("Button tapped 2 times."), isNotNull);
-    });
-  });
-}
diff --git a/flutter/test/unit/example_test.dart b/flutter/test/unit/example_test.dart
new file mode 100644
index 0000000..6f938ea
--- /dev/null
+++ b/flutter/test/unit/example_test.dart
@@ -0,0 +1,11 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import 'package:test/test.dart';
+
+void main() {
+  test('this is a unit test', () {
+    expect(42, 42);
+  });
+}
diff --git a/flutter/test/widget/flutter_demo_test.dart b/flutter/test/widget/flutter_demo_test.dart
new file mode 100644
index 0000000..3c22fda
--- /dev/null
+++ b/flutter/test/widget/flutter_demo_test.dart
@@ -0,0 +1,54 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import 'package:test/test.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:reader/widgets/flutter_demo.dart';
+
+void main() {
+  test("Example State test", () {
+    testWidgets((WidgetTester tester) {
+      tester.pumpWidget(new MaterialApp(
+          title: 'Test App',
+          routes: <String, WidgetBuilder>{
+            '/': (BuildContext context) => new FlutterDemo()
+          }));
+
+      // Ensure default redner is correct.
+      expect(tester, hasWidget(find.text("Flutter Demo")));
+      expect(tester, hasWidget(find.text("Button tapped 0 times.")));
+
+      // Test state methods effect the render.
+      FlutterDemoState state = tester.stateOf(find.byType(FlutterDemo));
+      state.incrementCounter();
+
+      // Advance the flutter framework to the next tick.
+      tester.pump();
+
+      expect(state.counter, equals(1));
+      expect(tester, hasWidget(find.text("Button tapped 1 time.")));
+
+      // NOTE: There is an animation segue for the floating action button in
+      // the material scaffold. The FAB is not tappable during this initial
+      // segue, the FAB will not be responsive to tapping until the animation
+      // ends at 400ms.
+      //
+      // SEE: https://git.io/vwrlS
+      tester.pump(new Duration(milliseconds: 400));
+
+      Finder fab = find.byType(FloatingActionButton);
+      expect(tester, hasWidget(fab));
+
+      tester.tap(fab);
+      tester.pump();
+
+      expect(state.counter, equals(2));
+      expect(tester, hasWidget(find.text("Button tapped 2 times.")));
+
+      // Wait for animations to end.
+      tester.pump(const Duration(seconds: 1));
+    });
+  });
+}
