diff --git a/.gitignore b/.gitignore
index 1947834..0b481f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ ios/.generated/
 ios/Flutter/Generated.xcconfig
 ios/Runner/GeneratedPluginRegistrant.*
 *.log
+*.iml
diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh
new file mode 100755
index 0000000..e861097
--- /dev/null
+++ b/example/ios/Flutter/flutter_export_environment.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# This is a generated file; do not edit or check into version control.
+export "FLUTTER_ROOT=/Volumes/DATA/flutter/flutter"
+export "FLUTTER_APPLICATION_PATH=/Users/cobalt/dev/git/flutter/flutter_page_indicator/example"
+export "FLUTTER_TARGET=lib/main.dart"
+export "FLUTTER_BUILD_DIR=build"
+export "SYMROOT=${SOURCE_ROOT}/../build/ios"
+export "OTHER_LDFLAGS=$(inherited) -framework Flutter"
+export "FLUTTER_FRAMEWORK_DIR=/Volumes/DATA/flutter/flutter/bin/cache/artifacts/engine/ios"
+export "FLUTTER_BUILD_NAME=1.0.0"
+export "FLUTTER_BUILD_NUMBER=1"
+export "DART_OBFUSCATION=false"
+export "TRACK_WIDGET_CREATION=false"
+export "TREE_SHAKE_ICONS=false"
+export "PACKAGE_CONFIG=.packages"
diff --git a/example/pubspec.lock b/example/pubspec.lock
index 92859fa..9721a82 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -1,76 +1,62 @@
 # Generated by pub
-# See https://www.dartlang.org/tools/pub/glossary#lockfile
+# See https://dart.dev/tools/pub/glossary#lockfile
 packages:
-  analyzer:
-    dependency: transitive
-    description:
-      name: analyzer
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.32.4"
-  args:
-    dependency: transitive
-    description:
-      name: args
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.5.0"
   async:
     dependency: transitive
     description:
       name: async
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.8"
+    version: "2.5.0-nullsafety.3"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
-  charcode:
+    version: "2.1.0-nullsafety.3"
+  characters:
     dependency: transitive
     description:
-      name: charcode
-      url: "https://pub.flutter-io.cn"
+      name: characters
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.2"
-  collection:
-    dependency: transitive
-    description:
-      name: collection
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.14.11"
-  convert:
+    version: "1.1.0-nullsafety.5"
+  charcode:
     dependency: transitive
     description:
-      name: convert
-      url: "https://pub.flutter-io.cn"
+      name: charcode
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.2"
-  crypto:
+    version: "1.2.0-nullsafety.3"
+  clock:
     dependency: transitive
     description:
-      name: crypto
-      url: "https://pub.flutter-io.cn"
+      name: clock
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.6"
-  csslib:
+    version: "1.1.0-nullsafety.3"
+  collection:
     dependency: transitive
     description:
-      name: csslib
-      url: "https://pub.flutter-io.cn"
+      name: collection
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.14.5"
+    version: "1.15.0-nullsafety.5"
   cupertino_icons:
     dependency: "direct main"
     description:
       name: cupertino_icons
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.1.2"
+    version: "1.0.1+1"
+  fake_async:
+    dependency: transitive
+    description:
+      name: fake_async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.0-nullsafety.3"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -82,318 +68,103 @@ packages:
       path: ".."
       relative: true
     source: path
-    version: "0.0.3"
+    version: "0.0.3-nullsafety"
   flutter_test:
     dependency: "direct dev"
     description: flutter
     source: sdk
     version: "0.0.0"
-  front_end:
-    dependency: transitive
-    description:
-      name: front_end
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.1.4"
-  glob:
-    dependency: transitive
-    description:
-      name: glob
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.7"
-  html:
-    dependency: transitive
-    description:
-      name: html
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.13.3+3"
-  http:
-    dependency: transitive
-    description:
-      name: http
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.11.3+17"
-  http_multi_server:
-    dependency: transitive
-    description:
-      name: http_multi_server
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.5"
-  http_parser:
-    dependency: transitive
-    description:
-      name: http_parser
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "3.1.3"
-  io:
-    dependency: transitive
-    description:
-      name: io
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.3.3"
-  js:
-    dependency: transitive
-    description:
-      name: js
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.6.1+1"
-  json_rpc_2:
-    dependency: transitive
-    description:
-      name: json_rpc_2
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.9"
-  kernel:
-    dependency: transitive
-    description:
-      name: kernel
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.3.4"
-  logging:
-    dependency: transitive
-    description:
-      name: logging
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.11.3+2"
   matcher:
     dependency: transitive
     description:
       name: matcher
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.3+1"
+    version: "0.12.10-nullsafety.3"
   meta:
     dependency: transitive
     description:
       name: meta
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.6"
-  mime:
-    dependency: transitive
-    description:
-      name: mime
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.9.6+2"
-  multi_server_socket:
-    dependency: transitive
-    description:
-      name: multi_server_socket
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.2"
-  node_preamble:
-    dependency: transitive
-    description:
-      name: node_preamble
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.4.4"
-  package_config:
-    dependency: transitive
-    description:
-      name: package_config
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.5"
-  package_resolver:
-    dependency: transitive
-    description:
-      name: package_resolver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.4"
+    version: "1.3.0-nullsafety.6"
   path:
     dependency: transitive
     description:
       name: path
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.6.2"
-  plugin:
-    dependency: transitive
-    description:
-      name: plugin
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.0+3"
-  pool:
-    dependency: transitive
-    description:
-      name: pool
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.3.6"
-  pub_semver:
-    dependency: transitive
-    description:
-      name: pub_semver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.4.2"
-  quiver:
-    dependency: transitive
-    description:
-      name: quiver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.0+1"
-  shelf:
-    dependency: transitive
-    description:
-      name: shelf
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.7.3+3"
-  shelf_packages_handler:
-    dependency: transitive
-    description:
-      name: shelf_packages_handler
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
-  shelf_static:
-    dependency: transitive
-    description:
-      name: shelf_static
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.8"
-  shelf_web_socket:
-    dependency: transitive
-    description:
-      name: shelf_web_socket
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.2+4"
+    version: "1.8.0-nullsafety.3"
   sky_engine:
     dependency: transitive
     description: flutter
     source: sdk
     version: "0.0.99"
-  source_map_stack_trace:
-    dependency: transitive
-    description:
-      name: source_map_stack_trace
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.5"
-  source_maps:
-    dependency: transitive
-    description:
-      name: source_maps
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.10.7"
   source_span:
     dependency: transitive
     description:
       name: source_span
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.1"
+    version: "1.8.0-nullsafety.4"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.3"
+    version: "1.10.0-nullsafety.6"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.8"
+    version: "2.1.0-nullsafety.3"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
+    version: "1.1.0-nullsafety.3"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.1"
-  test:
+    version: "1.2.0-nullsafety.3"
+  test_api:
     dependency: transitive
     description:
-      name: test
-      url: "https://pub.flutter-io.cn"
+      name: test_api
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0"
+    version: "0.2.19-nullsafety.6"
   transformer_page_view:
     dependency: "direct main"
     description:
-      path: "/Users/jzoom/SourceCode/transformer_page_view"
-      relative: false
-    source: path
-    version: "0.1.0"
+      path: "."
+      ref: HEAD
+      resolved-ref: "8d44c4df6f0375bd2ac59bc1e8084a42e1cdb704"
+      url: "git://github.com/best-flutter/transformer_page_view.git"
+    source: git
+    version: "0.1.6"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.6"
-  utf:
-    dependency: transitive
-    description:
-      name: utf
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.9.0+5"
+    version: "1.3.0-nullsafety.5"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.8"
-  vm_service_client:
-    dependency: transitive
-    description:
-      name: vm_service_client
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.6"
-  watcher:
-    dependency: transitive
-    description:
-      name: watcher
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.9.7+10"
-  web_socket_channel:
-    dependency: transitive
-    description:
-      name: web_socket_channel
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.9"
-  yaml:
-    dependency: transitive
-    description:
-      name: yaml
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.15"
+    version: "2.1.0-nullsafety.5"
 sdks:
-  dart: ">=2.0.0-dev.68.0 <3.0.0"
+  dart: ">=2.12.0-0.0 <3.0.0"
   flutter: ">=0.1.4 <3.0.0"
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index 59144dc..4c3dd7a 100644
--- a/example/pubspec.yaml
+++ b/example/pubspec.yaml
@@ -18,7 +18,7 @@ dependencies:
 
   # The following adds the Cupertino Icons font to your application.
   # Use with the CupertinoIcons class for iOS style icons.
-  cupertino_icons: ^0.1.2
+  cupertino_icons: ^1.0.1+1
 
   flutter_page_indicator:
     path: ../
diff --git a/lib/flutter_page_indicator.dart b/lib/flutter_page_indicator.dart
index 1ab652c..7afbe2a 100644
--- a/lib/flutter_page_indicator.dart
+++ b/lib/flutter_page_indicator.dart
@@ -123,12 +123,14 @@ class ScalePainter extends BasePainter {
         : radius + ((index + 1) * (size + space));
 
     double progress = page - index;
-    _paint.color = Color.lerp(widget.activeColor, widget.color, progress);
+    _paint.color =
+        Color.lerp(widget.activeColor, widget.color, progress) ?? Color(0);
     //last
     canvas.drawCircle(new Offset(radius + (index * (size + space)), radius),
         lerp(radius, radius * widget.scale, progress), _paint);
     //first
-    _paint.color = Color.lerp(widget.color, widget.activeColor, progress);
+    _paint.color =
+        Color.lerp(widget.color, widget.activeColor, progress) ?? Color(0);
     canvas.drawCircle(new Offset(secondOffset, radius),
         lerp(radius * widget.scale, radius, progress), _paint);
   }
@@ -154,12 +156,14 @@ class ColorPainter extends BasePainter {
         ? radius
         : radius + ((index + 1) * (size + space));
 
-    _paint.color = Color.lerp(widget.activeColor, widget.color, progress);
+    _paint.color =
+        Color.lerp(widget.activeColor, widget.color, progress) ?? Color(0);
     //left
     canvas.drawCircle(
         new Offset(radius + (index * (size + space)), radius), radius, _paint);
     //right
-    _paint.color = Color.lerp(widget.color, widget.activeColor, progress);
+    _paint.color =
+        Color.lerp(widget.color, widget.activeColor, progress) ?? Color(0);
     canvas.drawCircle(new Offset(secondOffset, radius), radius, _paint);
   }
 }
@@ -219,22 +223,22 @@ class _PageIndicatorState extends State<PageIndicator> {
     switch (widget.layout) {
       case PageIndicatorLayout.NONE:
         return new NonePainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       case PageIndicatorLayout.SLIDE:
         return new SlidePainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       case PageIndicatorLayout.WARM:
         return new WarmPainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       case PageIndicatorLayout.COLOR:
         return new ColorPainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       case PageIndicatorLayout.SCALE:
         return new ScalePainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       case PageIndicatorLayout.DROP:
         return new DropPainter(
-            widget, widget.controller.page ?? 0.0, index, _paint);
+            widget, widget.controller?.page ?? 0.0, index, _paint);
       default:
         throw new Exception("Not a valid layout");
     }
@@ -263,7 +267,7 @@ class _PageIndicatorState extends State<PageIndicator> {
   }
 
   void _onController() {
-    double page = widget.controller.page ?? 0.0;
+    double page = widget.controller?.page ?? 0.0;
     index = page.floor();
 
     setState(() {});
@@ -271,22 +275,22 @@ class _PageIndicatorState extends State<PageIndicator> {
 
   @override
   void initState() {
-    widget.controller.addListener(_onController);
+    widget.controller?.addListener(_onController);
     super.initState();
   }
 
   @override
   void didUpdateWidget(PageIndicator oldWidget) {
     if (widget.controller != oldWidget.controller) {
-      oldWidget.controller.removeListener(_onController);
-      widget.controller.addListener(_onController);
+      oldWidget.controller?.removeListener(_onController);
+      widget.controller?.addListener(_onController);
     }
     super.didUpdateWidget(oldWidget);
   }
 
   @override
   void dispose() {
-    widget.controller.removeListener(_onController);
+    widget.controller?.removeListener(_onController);
     super.dispose();
   }
 }
@@ -325,15 +329,15 @@ class PageIndicator extends StatefulWidget {
   // Only valid when layout==PageIndicatorLayout.drop
   final double dropHeight;
 
-  final PageController controller;
+  final PageController? controller;
 
   final double activeSize;
 
   PageIndicator(
-      {Key key,
+      {Key? key,
       this.size: 20.0,
       this.space: 5.0,
-      this.count,
+      this.count = 0,
       this.activeSize: 20.0,
       this.controller,
       this.color: Colors.white30,
diff --git a/pubspec.lock b/pubspec.lock
index 8c0490c..b640497 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -1,69 +1,55 @@
 # Generated by pub
-# See https://www.dartlang.org/tools/pub/glossary#lockfile
+# See https://dart.dev/tools/pub/glossary#lockfile
 packages:
-  analyzer:
-    dependency: transitive
-    description:
-      name: analyzer
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.32.4"
-  args:
-    dependency: transitive
-    description:
-      name: args
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.5.0"
   async:
     dependency: transitive
     description:
       name: async
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.8"
+    version: "2.5.0-nullsafety.3"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
-  charcode:
+    version: "2.1.0-nullsafety.3"
+  characters:
     dependency: transitive
     description:
-      name: charcode
-      url: "https://pub.flutter-io.cn"
+      name: characters
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.2"
-  collection:
+    version: "1.1.0-nullsafety.5"
+  charcode:
     dependency: transitive
     description:
-      name: collection
-      url: "https://pub.flutter-io.cn"
+      name: charcode
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.14.11"
-  convert:
+    version: "1.2.0-nullsafety.3"
+  clock:
     dependency: transitive
     description:
-      name: convert
-      url: "https://pub.flutter-io.cn"
+      name: clock
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.2"
-  crypto:
+    version: "1.1.0-nullsafety.3"
+  collection:
     dependency: transitive
     description:
-      name: crypto
-      url: "https://pub.flutter-io.cn"
+      name: collection
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.6"
-  csslib:
+    version: "1.15.0-nullsafety.5"
+  fake_async:
     dependency: transitive
     description:
-      name: csslib
-      url: "https://pub.flutter-io.cn"
+      name: fake_async
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.14.5"
+    version: "1.2.0-nullsafety.3"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -74,305 +60,88 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
-  front_end:
-    dependency: transitive
-    description:
-      name: front_end
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.1.4"
-  glob:
-    dependency: transitive
-    description:
-      name: glob
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.7"
-  html:
-    dependency: transitive
-    description:
-      name: html
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.13.3+3"
-  http:
-    dependency: transitive
-    description:
-      name: http
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.11.3+17"
-  http_multi_server:
-    dependency: transitive
-    description:
-      name: http_multi_server
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.5"
-  http_parser:
-    dependency: transitive
-    description:
-      name: http_parser
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "3.1.3"
-  io:
-    dependency: transitive
-    description:
-      name: io
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.3.3"
-  js:
-    dependency: transitive
-    description:
-      name: js
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.6.1+1"
-  json_rpc_2:
-    dependency: transitive
-    description:
-      name: json_rpc_2
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.9"
-  kernel:
-    dependency: transitive
-    description:
-      name: kernel
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.3.4"
-  logging:
-    dependency: transitive
-    description:
-      name: logging
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.11.3+2"
   matcher:
     dependency: transitive
     description:
       name: matcher
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.3+1"
+    version: "0.12.10-nullsafety.3"
   meta:
     dependency: transitive
     description:
       name: meta
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.6"
-  mime:
-    dependency: transitive
-    description:
-      name: mime
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.9.6+2"
-  multi_server_socket:
-    dependency: transitive
-    description:
-      name: multi_server_socket
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.2"
-  node_preamble:
-    dependency: transitive
-    description:
-      name: node_preamble
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.4.4"
-  package_config:
-    dependency: transitive
-    description:
-      name: package_config
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.5"
-  package_resolver:
-    dependency: transitive
-    description:
-      name: package_resolver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.4"
+    version: "1.3.0-nullsafety.6"
   path:
     dependency: transitive
     description:
       name: path
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.6.2"
-  plugin:
-    dependency: transitive
-    description:
-      name: plugin
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.0+3"
-  pool:
-    dependency: transitive
-    description:
-      name: pool
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.6"
-  pub_semver:
-    dependency: transitive
-    description:
-      name: pub_semver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.4.2"
-  quiver:
-    dependency: transitive
-    description:
-      name: quiver
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.0+1"
-  shelf:
-    dependency: transitive
-    description:
-      name: shelf
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.7.3+3"
-  shelf_packages_handler:
-    dependency: transitive
-    description:
-      name: shelf_packages_handler
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.4"
-  shelf_static:
-    dependency: transitive
-    description:
-      name: shelf_static
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.8"
-  shelf_web_socket:
-    dependency: transitive
-    description:
-      name: shelf_web_socket
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.2+4"
+    version: "1.8.0-nullsafety.3"
   sky_engine:
     dependency: transitive
     description: flutter
     source: sdk
     version: "0.0.99"
-  source_map_stack_trace:
-    dependency: transitive
-    description:
-      name: source_map_stack_trace
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.5"
-  source_maps:
-    dependency: transitive
-    description:
-      name: source_maps
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.10.7"
   source_span:
     dependency: transitive
     description:
       name: source_span
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.1"
+    version: "1.8.0-nullsafety.4"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.3"
+    version: "1.10.0-nullsafety.6"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.8"
+    version: "2.1.0-nullsafety.3"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
+    version: "1.1.0-nullsafety.3"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.1"
-  test:
+    version: "1.2.0-nullsafety.3"
+  test_api:
     dependency: transitive
     description:
-      name: test
-      url: "https://pub.flutter-io.cn"
+      name: test_api
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0"
+    version: "0.2.19-nullsafety.6"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.1.6"
-  utf:
-    dependency: transitive
-    description:
-      name: utf
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.9.0+5"
+    version: "1.3.0-nullsafety.5"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.0.8"
-  vm_service_client:
-    dependency: transitive
-    description:
-      name: vm_service_client
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.2.6"
-  watcher:
-    dependency: transitive
-    description:
-      name: watcher
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "0.9.7+10"
-  web_socket_channel:
-    dependency: transitive
-    description:
-      name: web_socket_channel
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.9"
-  yaml:
-    dependency: transitive
-    description:
-      name: yaml
-      url: "https://pub.flutter-io.cn"
+      url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.15"
+    version: "2.1.0-nullsafety.5"
 sdks:
-  dart: ">=2.0.0-dev.68.0 <3.0.0"
+  dart: ">=2.12.0-0.0 <3.0.0"
   flutter: ">=0.1.4 <3.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index d4dfab8..b13dd8a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: flutter_page_indicator
 description: Page indicator for flutter, with multiple build-in layouts.
-version: 0.0.3
+version: 0.0.3-nullsafety
 author: JZoom <jzoom8112@gmail.com>
 homepage: https://github.com/jzoom/flutter_page_indicator
 
@@ -9,7 +9,7 @@ dependencies:
     sdk: flutter
 
 environment:
-  sdk: ">=2.0.0-dev.48.0 <3.0.0"
+  sdk: ">=2.12.0-0 <3.0.0"
   flutter: ">=0.1.4 <3.0.0"