diff --git a/veggieseasons/analysis_options.yaml b/veggieseasons/analysis_options.yaml
new file mode 100644
index 000000000..f117e8a5f
--- /dev/null
+++ b/veggieseasons/analysis_options.yaml
@@ -0,0 +1,30 @@
+include: package:pedantic/analysis_options.yaml
+
+analyzer:
+  strong-mode:
+    implicit-casts: false
+    implicit-dynamic: false
+
+linter:
+  rules:
+    - avoid_types_on_closure_parameters
+    - avoid_void_async
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - close_sinks
+    - constant_identifier_names
+    - control_flow_in_finally
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - non_constant_identifier_names
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - test_types_in_equals
+    - throw_in_finally
+    - unnecessary_brace_in_string_interps
+    - unnecessary_getters_setters
+    - unnecessary_new
+    - unnecessary_statements
diff --git a/veggieseasons/ios/Podfile.lock b/veggieseasons/ios/Podfile.lock
index 7e5a41704..9f4d4ab15 100644
--- a/veggieseasons/ios/Podfile.lock
+++ b/veggieseasons/ios/Podfile.lock
@@ -19,4 +19,4 @@ SPEC CHECKSUMS:
 
 PODFILE CHECKSUM: e8988baac3a50f787b9d3ed7ca44957b442f92a7
 
-COCOAPODS: 1.7.0
+COCOAPODS: 1.7.1
diff --git a/veggieseasons/lib/data/preferences.dart b/veggieseasons/lib/data/preferences.dart
index 6b81b165e..96f7007a7 100644
--- a/veggieseasons/lib/data/preferences.dart
+++ b/veggieseasons/lib/data/preferences.dart
@@ -32,19 +32,19 @@ class Preferences extends Model {
     return Set.from(_preferredCategories);
   }
 
-  void addPreferredCategory(VeggieCategory category) async {
+  Future<void> addPreferredCategory(VeggieCategory category) async {
     _preferredCategories.add(category);
     await _saveToSharedPrefs();
     notifyListeners();
   }
 
-  void removePreferredCategory(VeggieCategory category) async {
+  Future<void> removePreferredCategory(VeggieCategory category) async {
     _preferredCategories.remove(category);
     await _saveToSharedPrefs();
     notifyListeners();
   }
 
-  void setDesiredCalories(int calories) async {
+  Future<void> setDesiredCalories(int calories) async {
     _desiredCalories = calories;
     await _saveToSharedPrefs();
     notifyListeners();
diff --git a/veggieseasons/lib/screens/details.dart b/veggieseasons/lib/screens/details.dart
index 292bcd2d8..27ba8d7b4 100644
--- a/veggieseasons/lib/screens/details.dart
+++ b/veggieseasons/lib/screens/details.dart
@@ -23,7 +23,7 @@ class ServingInfoChart extends StatelessWidget {
   // value of this vitamin" data adjusted for the user's preferred calorie
   // target.
   Widget _buildVitaminText(int standardPercentage, Future<int> targetCalories) {
-    return FutureBuilder(
+    return FutureBuilder<int>(
       future: targetCalories,
       builder: (context, snapshot) {
         final target = snapshot?.data ?? 2000;
@@ -172,7 +172,7 @@ class InfoView extends StatelessWidget {
           Row(
             mainAxisSize: MainAxisSize.max,
             children: <Widget>[
-              FutureBuilder(
+              FutureBuilder<Set<VeggieCategory>>(
                 future: prefs.preferredCategories,
                 builder: (context, snapshot) {
                   return Text(
@@ -284,7 +284,7 @@ class _DetailsScreenState extends State<DetailsScreen> {
           Expanded(
             child: ListView(
               children: [
-                CupertinoSegmentedControl(
+                CupertinoSegmentedControl<int>(
                   children: {
                     0: Text('Facts & Info'),
                     1: Text('Trivia'),
diff --git a/veggieseasons/lib/screens/list.dart b/veggieseasons/lib/screens/list.dart
index 5dbd34684..6ff8f5ee5 100644
--- a/veggieseasons/lib/screens/list.dart
+++ b/veggieseasons/lib/screens/list.dart
@@ -13,7 +13,8 @@ import 'package:veggieseasons/styles.dart';
 import 'package:veggieseasons/widgets/veggie_card.dart';
 
 class ListScreen extends StatelessWidget {
-  Widget _generateVeggieRow(veggie, Preferences prefs, {bool inSeason = true}) {
+  Widget _generateVeggieRow(Veggie veggie, Preferences prefs,
+      {bool inSeason = true}) {
     return Padding(
       padding: EdgeInsets.only(left: 16, right: 16, bottom: 24),
       child: FutureBuilder<Set<VeggieCategory>>(
diff --git a/veggieseasons/lib/screens/settings.dart b/veggieseasons/lib/screens/settings.dart
index 7480837b5..4ecef5284 100644
--- a/veggieseasons/lib/screens/settings.dart
+++ b/veggieseasons/lib/screens/settings.dart
@@ -126,7 +126,7 @@ class CalorieSettingsScreen extends StatelessWidget {
 }
 
 class SettingsScreen extends StatelessWidget {
-  Widget _buildCaloriesItem(BuildContext context, Preferences prefs) {
+  SettingsItem _buildCaloriesItem(BuildContext context, Preferences prefs) {
     return SettingsItem(
       label: 'Calorie Target',
       icon: SettingsIcon(
@@ -146,7 +146,7 @@ class SettingsScreen extends StatelessWidget {
         },
       ),
       onPress: () {
-        Navigator.of(context).push(
+        Navigator.of(context).push<void>(
           CupertinoPageRoute(
             builder: (context) => CalorieSettingsScreen(),
             title: 'Calorie Target',
@@ -156,7 +156,7 @@ class SettingsScreen extends StatelessWidget {
     );
   }
 
-  Widget _buildCategoriesItem(BuildContext context, Preferences prefs) {
+  SettingsItem _buildCategoriesItem(BuildContext context, Preferences prefs) {
     return SettingsItem(
       label: 'Preferred Categories',
       subtitle: 'What types of veggies you prefer!',
@@ -166,7 +166,7 @@ class SettingsScreen extends StatelessWidget {
       ),
       content: SettingsNavigationIndicator(),
       onPress: () {
-        Navigator.of(context).push(
+        Navigator.of(context).push<void>(
           CupertinoPageRoute(
             builder: (context) => VeggieCategorySettingsScreen(),
             title: 'Preferred Categories',
diff --git a/veggieseasons/lib/widgets/close_button.dart b/veggieseasons/lib/widgets/close_button.dart
index ee72a3aa2..1238e094f 100644
--- a/veggieseasons/lib/widgets/close_button.dart
+++ b/veggieseasons/lib/widgets/close_button.dart
@@ -69,12 +69,12 @@ class _ColorChangingIconState
   }
 
   @override
-  void forEachTween(visitor) {
+  void forEachTween(TweenVisitor<dynamic> visitor) {
     _colorTween = visitor(
       _colorTween,
       widget.color,
-      (dynamic value) => ColorTween(begin: value),
-    );
+      (dynamic value) => ColorTween(begin: value as Color),
+    ) as ColorTween;
   }
 }
 
diff --git a/veggieseasons/lib/widgets/settings_group.dart b/veggieseasons/lib/widgets/settings_group.dart
index 0687ffd05..921ad57e7 100644
--- a/veggieseasons/lib/widgets/settings_group.dart
+++ b/veggieseasons/lib/widgets/settings_group.dart
@@ -69,7 +69,7 @@ class SettingsGroup extends StatelessWidget {
     this.header,
     this.footer,
   })  : assert(items != null),
-        assert(items.length > 0);
+        assert(items.isNotEmpty);
 
   final List<SettingsItem> items;
   final Widget header;
diff --git a/veggieseasons/lib/widgets/veggie_card.dart b/veggieseasons/lib/widgets/veggie_card.dart
index 3f39887bd..f04f69edc 100644
--- a/veggieseasons/lib/widgets/veggie_card.dart
+++ b/veggieseasons/lib/widgets/veggie_card.dart
@@ -143,7 +143,7 @@ class VeggieCard extends StatelessWidget {
   Widget build(BuildContext context) {
     return PressableCard(
       onPressed: () {
-        Navigator.of(context).push(CupertinoPageRoute(
+        Navigator.of(context).push<void>(CupertinoPageRoute(
           builder: (context) => DetailsScreen(veggie.id),
           fullscreenDialog: true,
         ));
diff --git a/veggieseasons/lib/widgets/veggie_headline.dart b/veggieseasons/lib/widgets/veggie_headline.dart
index 9d0847320..493a93bf6 100644
--- a/veggieseasons/lib/widgets/veggie_headline.dart
+++ b/veggieseasons/lib/widgets/veggie_headline.dart
@@ -68,7 +68,7 @@ class VeggieHeadline extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return GestureDetector(
-      onTap: () => Navigator.of(context).push(CupertinoPageRoute(
+      onTap: () => Navigator.of(context).push<void>(CupertinoPageRoute(
             builder: (context) => DetailsScreen(veggie.id),
             fullscreenDialog: true,
           )),
diff --git a/veggieseasons/pubspec.lock b/veggieseasons/pubspec.lock
index f0a1d0356..6d31cfcd4 100644
--- a/veggieseasons/pubspec.lock
+++ b/veggieseasons/pubspec.lock
@@ -7,14 +7,14 @@ packages:
       name: archive
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.8"
+    version: "2.0.10"
   args:
     dependency: transitive
     description:
       name: args
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.5.0"
+    version: "1.5.2"
   async:
     dependency: transitive
     description:
@@ -64,15 +64,6 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.1.2"
-  dart_config:
-    dependency: transitive
-    description:
-      path: "."
-      ref: HEAD
-      resolved-ref: a7ed88a4793e094a4d5d5c2d88a89e55510accde
-      url: "https://github.com/MarkOSullivan94/dart_config.git"
-    source: git
-    version: "0.5.0"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -84,7 +75,7 @@ packages:
       name: flutter_launcher_icons
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.7.0"
+    version: "0.7.2+1"
   flutter_test:
     dependency: "direct dev"
     description: flutter
@@ -103,14 +94,14 @@ packages:
       name: image
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.7"
+    version: "2.1.4"
   intl:
     dependency: "direct main"
     description:
       name: intl
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.15.7"
+    version: "0.15.8"
   matcher:
     dependency: transitive
     description:
@@ -133,7 +124,7 @@ packages:
     source: hosted
     version: "1.6.2"
   pedantic:
-    dependency: transitive
+    dependency: "direct dev"
     description:
       name: pedantic
       url: "https://pub.dartlang.org"
@@ -145,7 +136,7 @@ packages:
       name: petitparser
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.1"
+    version: "2.2.1"
   quiver:
     dependency: transitive
     description:
@@ -166,7 +157,7 @@ packages:
       name: shared_preferences
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.3"
+    version: "0.5.3+1"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -234,14 +225,14 @@ packages:
       name: xml
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.3.1"
+    version: "3.4.1"
   yaml:
     dependency: transitive
     description:
       name: yaml
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.15"
+    version: "2.1.16"
 sdks:
   dart: ">=2.3.0-dev <3.0.0"
-  flutter: ">=0.1.4 <2.0.0"
+  flutter: ">=1.5.0 <2.0.0"
diff --git a/veggieseasons/pubspec.yaml b/veggieseasons/pubspec.yaml
index 4fb057ee5..81d48509c 100644
--- a/veggieseasons/pubspec.yaml
+++ b/veggieseasons/pubspec.yaml
@@ -12,15 +12,16 @@ dependencies:
 
   cupertino_icons: ^0.1.2
   font_awesome_flutter: ^8.4.0
-  intl: ^0.15.7
+  intl: ^0.15.8
   scoped_model: ^1.0.1
-  shared_preferences: ^0.4.3
+  shared_preferences: ^0.5.3+1
 
 dev_dependencies:
   flutter_test:
     sdk: flutter
 
-  flutter_launcher_icons: ^0.7.0
+  pedantic: 1.5.0
+  flutter_launcher_icons: ^0.7.2+1
 
 flutter:
 
diff --git a/veggieseasons/test/widget_test.dart b/veggieseasons/test/widget_test.dart
index 65c35a3e6..f1181b0c4 100644
--- a/veggieseasons/test/widget_test.dart
+++ b/veggieseasons/test/widget_test.dart
@@ -7,5 +7,5 @@
 import 'package:flutter_test/flutter_test.dart';
 
 void main() {
-  testWidgets('This test always passes', (WidgetTester tester) async {});
+  testWidgets('This test always passes', (tester) async {});
 }