diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart
index f38cdfb6e..f7889d008 100644
--- a/flutter/lib/desktop/pages/remote_page.dart
+++ b/flutter/lib/desktop/pages/remote_page.dart
@@ -399,6 +399,20 @@ class _ImagePaintState extends State<ImagePaint> {
     final m = Provider.of<ImageModel>(context);
     var c = Provider.of<CanvasModel>(context);
     final s = c.scale;
+    var cursorScale = 1.0;
+
+    if (Platform.isWindows) {
+      // debug win10
+      final isViewAdaptive = c.viewStyle.style == kRemoteViewStyleAdaptive;
+      if (zoomCursor.value && isViewAdaptive) {
+        cursorScale = s * c.devicePixelRatio;
+      }
+    } else {
+      final isViewOriginal = c.viewStyle.style == kRemoteViewStyleOriginal;
+      if (zoomCursor.value || isViewOriginal) {
+        cursorScale = s;
+      }
+    }
 
     mouseRegion({child}) => Obx(() => MouseRegion(
         cursor: cursorOverImage.isTrue
@@ -414,10 +428,10 @@ class _ImagePaintState extends State<ImagePaint> {
                             _lastRemoteCursorMoved = false;
                             _firstEnterImage.value = true;
                           }
-                          return _buildCustomCursor(context, s);
+                          return _buildCustomCursor(context, cursorScale);
                         }
                       }())
-                    : _buildDisabledCursor(context, s)
+                    : _buildDisabledCursor(context, cursorScale)
             : MouseCursor.defer,
         onHover: (evt) {},
         child: child));
@@ -466,19 +480,7 @@ class _ImagePaintState extends State<ImagePaint> {
     if (cache == null) {
       return MouseCursor.defer;
     } else {
-      bool shouldScale = false;
-      if (Platform.isWindows) {
-        final isViewAdaptive =
-            Provider.of<CanvasModel>(context, listen: false).viewStyle.style ==
-                kRemoteViewStyleAdaptive;
-        shouldScale = zoomCursor.value && isViewAdaptive;
-      } else {
-        final isViewOriginal =
-            Provider.of<CanvasModel>(context, listen: false).viewStyle.style ==
-                kRemoteViewStyleOriginal;
-        shouldScale = zoomCursor.value || isViewOriginal;
-      }
-      final key = cache.updateGetKey(scale, shouldScale);
+      final key = cache.updateGetKey(scale);
       if (!cursor.cachedKeys.contains(key)) {
         debugPrint("Register custom cursor with key $key");
         // [Safety]
diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart
index b2df5faac..f49bb270c 100644
--- a/flutter/lib/models/model.dart
+++ b/flutter/lib/models/model.dart
@@ -540,6 +540,7 @@ class CanvasModel with ChangeNotifier {
   double _y = 0;
   // image scale
   double _scale = 1.0;
+  double _devicePixelRatio = 1.0;
   Size _size = Size.zero;
   // the tabbar over the image
   // double tabBarHeight = 0.0;
@@ -563,6 +564,7 @@ class CanvasModel with ChangeNotifier {
   double get x => _x;
   double get y => _y;
   double get scale => _scale;
+  double get devicePixelRatio => _devicePixelRatio;
   Size get size => _size;
   ScrollStyle get scrollStyle => _scrollStyle;
   ViewStyle get viewStyle => _lastViewStyle;
@@ -611,8 +613,9 @@ class CanvasModel with ChangeNotifier {
     _lastViewStyle = viewStyle;
     _scale = viewStyle.scale;
 
+    _devicePixelRatio = ui.window.devicePixelRatio;
     if (kIgnoreDpi && style == kRemoteViewStyleOriginal) {
-      _scale = 1.0 / ui.window.devicePixelRatio;
+      _scale = 1.0 / _devicePixelRatio;
     }
     _x = (size.width - displayWidth * _scale) / 2;
     _y = (size.height - displayHeight * _scale) / 2;
@@ -772,11 +775,9 @@ class CursorData {
 
   int _doubleToInt(double v) => (v * 10e6).round().toInt();
 
-  double _checkUpdateScale(double scale, bool shouldScale) {
+  double _checkUpdateScale(double scale) {
     double oldScale = this.scale;
-    if (!shouldScale) {
-      scale = 1.0;
-    } else {
+    if (scale != 1.0) {
       // Update data if scale changed.
       final tgtWidth = (width * scale).toInt();
       final tgtHeight = (width * scale).toInt();
@@ -817,8 +818,8 @@ class CursorData {
     return scale;
   }
 
-  String updateGetKey(double scale, bool shouldScale) {
-    scale = _checkUpdateScale(scale, shouldScale);
+  String updateGetKey(double scale) {
+    scale = _checkUpdateScale(scale);
     return '${peerId}_${id}_${_doubleToInt(width * scale)}_${_doubleToInt(height * scale)}';
   }
 }