diff --git a/dart/FLUTTER_VERSION b/dart/FLUTTER_VERSION
index 4142ce8..b01d319 100644
--- a/dart/FLUTTER_VERSION
+++ b/dart/FLUTTER_VERSION
@@ -1 +1 @@
-e1b16729bfe369bdfd2c21027087f7d0181566e8
+b70a53807aca5c74c48298f68fcb6f041fedbe9a
diff --git a/dart/lib/components/askquestion.dart b/dart/lib/components/askquestion.dart
index 24c2fbf..3762a43 100644
--- a/dart/lib/components/askquestion.dart
+++ b/dart/lib/components/askquestion.dart
@@ -27,7 +27,7 @@
 
     // TODO(aghassemi): Switch to multi-line input when support is added.
     // https://github.com/flutter/flutter/issues/627
-    var input = new Input(placeholder: 'Your question',
+    var input = new Input(labelText: 'Your question', autofocus: true,
         onSubmitted: (String questionText) async {
       await appActions.askQuestion(
           deckState.deck.key, _currSlideNum, questionText);
@@ -37,7 +37,7 @@
       Navigator.pop(context);
     });
 
-    var view = new Row([input], alignItems: FlexAlignItems.stretch);
+    var view = new Row(children: [input], alignItems: FlexAlignItems.stretch);
 
     return new Scaffold(
         toolBar: new ToolBar(
diff --git a/dart/lib/components/deckgrid.dart b/dart/lib/components/deckgrid.dart
index 04199f5..1131d3f 100644
--- a/dart/lib/components/deckgrid.dart
+++ b/dart/lib/components/deckgrid.dart
@@ -44,7 +44,7 @@
 
   Widget _buildDrawer(BuildContext context, AppState appState) {
     return new Drawer(
-        child: new Block([
+        child: new Block(children: [
       new DrawerItem(
           icon: 'action/account_circle',
           child: stopWrapping(
@@ -86,7 +86,7 @@
     var resumeLiveBox;
     var presentationState = _appState.decks[deckData.key]?.presentation;
     if (presentationState != null && presentationState.isOwner) {
-      resumeLiveBox = new Row([
+      resumeLiveBox = new Row(children: [
         new Container(
             child: new Text("RESUME PRESENTING", style: style.Text.liveNow),
             decoration: style.Box.liveNow,
@@ -110,7 +110,7 @@
     var thumbnail = new AsyncImage(
         provider: imageProvider.getDeckThumbnailImage(presentationData.deck),
         fit: ImageFit.scaleDown);
-    var liveBox = new Row([
+    var liveBox = new Row(children: [
       new Container(
           child: new Text("LIVE NOW", style: style.Text.liveNow),
           decoration: style.Box.liveNow,
@@ -152,7 +152,7 @@
     }
 
     var titleContainer = new Container(
-        child: new BlockBody(titleChildren),
+        child: new BlockBody(children: titleChildren),
         padding: style.Spacing.normalPadding);
 
     titleContainer = stopWrapping(titleContainer);
@@ -169,8 +169,8 @@
     footer = new Flexible(child: footer, flex: 0);
     var content = new Container(
         child: new Card(
-            child: new Column([image, footer],
-                alignItems: FlexAlignItems.stretch)),
+            child: new Column(
+                children: [image, footer], alignItems: FlexAlignItems.stretch)),
         margin: style.Spacing.normalMargin);
 
     return new InkWell(key: new Key(key), child: content, onTap: onTap);
diff --git a/dart/lib/components/questionlist.dart b/dart/lib/components/questionlist.dart
index 121d779..8182ffb 100644
--- a/dart/lib/components/questionlist.dart
+++ b/dart/lib/components/questionlist.dart
@@ -61,7 +61,7 @@
     List<Widget> questionCards = _presentationState.questions
         .map((model.Question q) => _buildQuestionCard(context, q))
         .toList();
-    return new ScrollableViewport(child: new Block(questionCards));
+    return new ScrollableViewport(child: new Block(children: questionCards));
   }
 
   Widget _buildQuestionCard(BuildContext context, model.Question q) {
@@ -78,10 +78,10 @@
       titleChildren.add(jumpToSlide);
     }
 
-    Widget title = new Column([
+    Widget title = new Column(children: [
       new Text('${q.questioner.name} asked about',
           style: style.Text.subtitleStyle),
-      new Row(titleChildren)
+      new Row(children: titleChildren)
     ], alignItems: FlexAlignItems.start);
 
     Widget thumbnail = new Container(
@@ -90,13 +90,13 @@
             provider:
                 imageProvider.getSlideImage(_deckId, _slides[q.slideNum])));
 
-    Widget titleAndThumbnail = new Row([
+    Widget titleAndThumbnail = new Row(children: [
       new Flexible(child: title, flex: 2),
       new Flexible(child: thumbnail, flex: 1)
     ], alignItems: FlexAlignItems.start);
 
     Widget question = new Container(
-        child: new BlockBody([titleAndThumbnail, new Text(q.text)]),
+        child: new BlockBody(children: [titleAndThumbnail, new Text(q.text)]),
         padding: style.Spacing.normalPadding);
 
     Widget handoff = new GestureDetector(onTap: () async {
@@ -111,11 +111,12 @@
                 top: new BorderSide(color: style.theme.dividerColor))),
         child: new DefaultTextStyle(
             style: new TextStyle(color: style.theme.accentColor),
-            child: new Row([handoff], justifyContent: FlexJustifyContent.end)));
+            child: new Row(
+                children: [handoff], justifyContent: FlexJustifyContent.end)));
 
     return new Card(
         child: new Container(
-            child: new BlockBody([question, actions]),
+            child: new BlockBody(children: [question, actions]),
             margin: style.Spacing.listItemMargin));
   }
 }
diff --git a/dart/lib/components/slidelist.dart b/dart/lib/components/slidelist.dart
index 82758e8..ac09153 100644
--- a/dart/lib/components/slidelist.dart
+++ b/dart/lib/components/slidelist.dart
@@ -138,14 +138,16 @@
       'This is the teaser slide. It should be memorable and descriptive.');
   var titleAndNotes = new Flexible(
       child: new Container(
-          child: new Column([title, notes], alignItems: FlexAlignItems.start),
+          child: new Column(
+              children: [title, notes], alignItems: FlexAlignItems.start),
           padding: style.Spacing.normalPadding));
 
   var card = new Container(
       child: new Container(
           margin: style.Spacing.cardMargin,
           child: new Material(
-              elevation: 2, child: new Row([thumbnail, titleAndNotes]))),
+              elevation: 2,
+              child: new Row(children: [thumbnail, titleAndNotes]))),
       margin: style.Spacing.listItemMargin);
 
   var listItem = new InkWell(
diff --git a/dart/lib/components/slideshow.dart b/dart/lib/components/slideshow.dart
index 921181d..76dc606 100644
--- a/dart/lib/components/slideshow.dart
+++ b/dart/lib/components/slideshow.dart
@@ -82,7 +82,8 @@
     var image = new Flexible(child: _buildImage(context), flex: 5);
     var actions = new Flexible(child: _buildActions(context), flex: 0);
     var notes = new Flexible(child: _buildNotes(), flex: 3);
-    var nav = new Flexible(child: new Row(_buildThumbnailNavs()), flex: 3);
+    var nav =
+        new Flexible(child: new Row(children: _buildThumbnailNavs()), flex: 3);
 
     var items = [image, actions, notes, nav];
 
@@ -91,31 +92,37 @@
       items.add(footer);
     }
 
-    var layout = new Column(items, alignItems: FlexAlignItems.stretch);
+    var layout =
+        new Column(children: items, alignItems: FlexAlignItems.stretch);
 
     return layout;
   }
 
   Widget _buildLandscapeLayout(BuildContext context) {
     var notes = new Flexible(child: _buildNotes(), flex: 5);
-    var nav = new Flexible(child: new Column(_buildThumbnailNavs()), flex: 8);
+    var nav = new Flexible(
+        child: new Column(children: _buildThumbnailNavs()), flex: 8);
 
     var image = new Flexible(child: _buildImage(context), flex: 11);
     var actions = new Flexible(child: _buildActions(context), flex: 0);
 
     var notesAndNavColumn = new Flexible(
-        child: new Column([notes, nav], alignItems: FlexAlignItems.stretch),
+        child: new Column(
+            children: [notes, nav], alignItems: FlexAlignItems.stretch),
         flex: 4);
     var imageAndActionsColumn = new Flexible(
-        child: new Column([image, actions], alignItems: FlexAlignItems.stretch),
+        child: new Column(
+            children: [image, actions], alignItems: FlexAlignItems.stretch),
         flex: 16);
 
-    var layout = new Row([notesAndNavColumn, imageAndActionsColumn],
+    var layout = new Row(
+        children: [notesAndNavColumn, imageAndActionsColumn],
         alignItems: FlexAlignItems.stretch);
 
     var footer = _buildFooter();
     if (footer != null) {
-      layout = new Column([new Flexible(child: layout, flex: 8), footer],
+      layout = new Column(
+          children: [new Flexible(child: layout, flex: 8), footer],
           alignItems: FlexAlignItems.stretch);
     }
 
@@ -149,7 +156,7 @@
 
     var counter = _buildBubbleOverlay(
         '${_currSlideNum + 1} of ${_deckState.slides.length}', 0.5, 0.98);
-    image = new Stack([image, counter]);
+    image = new Stack(children: [image, counter]);
 
     return new ClipRect(child: image);
   }
@@ -187,7 +194,7 @@
     }
 
     var nextPreviousBubble = _buildBubbleOverlay(label, 0.5, 0.05);
-    container = new Stack([container, nextPreviousBubble]);
+    container = new Stack(children: [container, nextPreviousBubble]);
     container = new ClipRect(child: container);
 
     return new Flexible(child: container, flex: 1);
@@ -207,7 +214,7 @@
     _buildActions_followPresentation(left, right);
 
     return new ToolBar(
-        left: new Row(_buildActions_addMargin(left)), right: right);
+        left: new Row(children: _buildActions_addMargin(left)), right: right);
   }
 
   void _buildActions_prev(List<Widget> left, List<Widget> right) {
@@ -392,7 +399,7 @@
                 margin: style.Spacing.footerHorizontalMargin,
                 child: new DefaultTextStyle(
                     style: new TextStyle(color: style.theme.accentColor),
-                    child: new Row(children)))));
+                    child: new Row(children: children)))));
 
     return new Flexible(child: clipper, flex: 1);
   }
diff --git a/dart/lib/components/utils/stop_wrapping.dart b/dart/lib/components/utils/stop_wrapping.dart
index 7b89e5d..68d0e4b 100644
--- a/dart/lib/components/utils/stop_wrapping.dart
+++ b/dart/lib/components/utils/stop_wrapping.dart
@@ -9,6 +9,5 @@
   // overflow: hidden or text-overflow: ellipsis in Flutter yet.
   // This workaround simulates white-space: nowrap and overflow: hidden.
   // See https://github.com/flutter/flutter/issues/417
-  return new Viewport(
-      child: child, scrollDirection: ScrollDirection.horizontal);
+  return new Viewport(child: child, scrollDirection: Axis.horizontal);
 }
diff --git a/dart/lib/main.dart b/dart/lib/main.dart
index 29c09f5..dc642a7 100644
--- a/dart/lib/main.dart
+++ b/dart/lib/main.dart
@@ -53,16 +53,17 @@
     if (!_initialized) {
       return _buildSplashScreen();
     }
-    _navigator = context.ancestorStateOfType(NavigatorState);
+    _navigator =
+        context.ancestorStateOfType(const TypeMatcher<NavigatorState>());
     return new DeckGridPage();
   }
 
   Widget _buildSplashScreen() {
-    var stack = new Stack([
+    var stack = new Stack(children: [
       new AsyncImage(
           provider: imageProvider.splashBackgroundImageProvider,
           fit: ImageFit.cover),
-      new Row([
+      new Row(children: [
         new AsyncImage(
             provider: imageProvider.splashFlutterImageProvider,
             width: style.Size.splashLogo),
@@ -72,7 +73,8 @@
       ], justifyContent: FlexJustifyContent.center),
       new Container(
           child: new Row(
-              [new Text('Loading SyncSlides...', style: style.Text.splash)],
+              children:
+                  [new Text('Loading SyncSlides...', style: style.Text.splash)],
               alignItems: FlexAlignItems.end,
               justifyContent: FlexJustifyContent.center),
           padding: style.Spacing.normalPadding)
diff --git a/dart/pubspec.lock b/dart/pubspec.lock
index 5d48c44..3f442c6 100644
--- a/dart/pubspec.lock
+++ b/dart/pubspec.lock
@@ -12,7 +12,7 @@
   args:
     description: args
     source: hosted
-    version: "0.13.2"
+    version: "0.13.3+1"
   asn1lib:
     description: asn1lib
     source: hosted
@@ -20,7 +20,7 @@
   async:
     description: async
     source: hosted
-    version: "1.5.0"
+    version: "1.8.0"
   barback:
     description: barback
     source: hosted
@@ -46,7 +46,7 @@
   collection:
     description: collection
     source: hosted
-    version: "1.2.0"
+    version: "1.4.0"
   contrast:
     description: contrast
     source: hosted
@@ -92,11 +92,11 @@
   github:
     description: github
     source: hosted
-    version: "2.3.1"
+    version: "2.3.1+1"
   glob:
     description: glob
     source: hosted
-    version: "1.0.5"
+    version: "1.1.0"
   html:
     description: html
     source: hosted
@@ -116,7 +116,7 @@
   intl:
     description: intl
     source: hosted
-    version: "0.12.5"
+    version: "0.12.6"
   logging:
     description: logging
     source: hosted
@@ -136,23 +136,23 @@
   mojo:
     description: mojo
     source: hosted
-    version: "0.4.8"
+    version: "0.4.12"
   mojo_apptest:
     description: mojo_apptest
     source: hosted
-    version: "0.2.12"
+    version: "0.2.16"
   mojo_sdk:
     description: mojo_sdk
     source: hosted
-    version: "0.2.7"
+    version: "0.2.11"
   mojo_services:
     description: mojo_services
     source: hosted
-    version: "0.4.10"
+    version: "0.4.14"
   mojom:
     description: mojom
     source: hosted
-    version: "0.2.12"
+    version: "0.2.16"
   mustache4dart:
     description: mustache4dart
     source: hosted
@@ -174,7 +174,7 @@
   petitparser:
     description: petitparser
     source: hosted
-    version: "1.5.0"
+    version: "1.5.1"
   plugin:
     description: plugin
     source: hosted
@@ -210,11 +210,11 @@
   sky_engine:
     description: sky_engine
     source: hosted
-    version: "0.0.75"
+    version: "0.0.89"
   sky_services:
     description: sky_services
     source: hosted
-    version: "0.0.75"
+    version: "0.0.89"
   source_map_stack_trace:
     description: source_map_stack_trace
     source: hosted
@@ -230,15 +230,15 @@
   stack_trace:
     description: stack_trace
     source: hosted
-    version: "1.5.0"
+    version: "1.6.0"
   string_scanner:
     description: string_scanner
     source: hosted
-    version: "0.1.4"
+    version: "0.1.4+1"
   syncbase:
     description: syncbase
     source: hosted
-    version: "0.0.27"
+    version: "0.0.28"
   test:
     description: test
     source: hosted
@@ -258,11 +258,11 @@
   v23discovery:
     description: v23discovery
     source: hosted
-    version: "0.0.11"
+    version: "0.0.12"
   vector_math:
     description: vector_math
     source: hosted
-    version: "1.4.4"
+    version: "1.4.6"
   watcher:
     description: watcher
     source: hosted
@@ -278,8 +278,8 @@
   xml:
     description: xml
     source: hosted
-    version: "2.4.0"
+    version: "2.4.1"
   yaml:
     description: yaml
     source: hosted
-    version: "2.1.7"
+    version: "2.1.8"
diff --git a/dart/pubspec.yaml b/dart/pubspec.yaml
index e718cfd..ca27e2c 100644
--- a/dart/pubspec.yaml
+++ b/dart/pubspec.yaml
@@ -5,8 +5,8 @@
     path: "../../../../../flutter/packages/flutter"
   logging: ">=0.11.2 <0.12.0"
   mojo_services: ">=0.4.5 <0.5.0"
-  syncbase: ">=0.0.27 <0.1.0"
-  v23discovery: ">=0.0.11 < 0.1.0"
+  syncbase: ">=0.0.28 <0.1.0"
+  v23discovery: ">=0.0.12 < 0.1.0"
   uuid: ">=0.5.0 <0.6.0"
 dev_dependencies:
   flutter_tools:
