You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用new_version包触发RangeError(index)错误求助

解决new_version ^0.3.1包的RangeError异常问题

异常信息

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 1
E/flutter ( 5988): #0      List.[] (dart:core-patch/growable_array.dart:264:36)
E/flutter ( 5988): #1      NewVersion._getAndroidStoreVersion (package:new_version/new_version.dart:195:26)
E/flutter ( 5988): <asynchronous suspension>
E/flutter ( 5988): #2      _SplashScreenState._checkVersion (package:cardicare/appScreens/Splash_Screen.dart:124:20)

问题代码

void _checkVersion() async
{
   final newVersion = NewVersion
   (
    androidId: androidAppId,
    iOSId: iOSAppId
   );
   final status = await newVersion.getVersionStatus();
  if(status!=null)
  { 
    if(status.canUpdate)
    {
      newVersion.showUpdateDialog
        (
          context: context, 
          versionStatus: status,
          dialogTitle: "Update!!!",
          //dismissButtonText: "Skip",
          dialogText: "Please update your app from "+"${status.localVersion}"+ " to "+ "${status.storeVersion}",
          allowDismissal: false,
          dismissAction: () 
          {
            SystemNavigator.pop();  
          },
          updateButtonText: "Let's Update"
        );    
    }
     print("app version on Device "+"${status.localVersion}");  
     print("app version on store "+"${status.storeVersion}");
  }     
}

问题原因

这个异常是因为new_version 0.3.1版本在解析Google Play商店页面时,未能找到存储版本号的DOM元素,导致代码尝试访问空列表的索引1,触发RangeError。常见诱因包括:

  • 应用ID填写错误,导致请求到错误的商店页面
  • Google Play页面结构更新,旧版本包的解析逻辑失效
  • 网络请求失败,未正确加载商店页面内容

解决方案

1. 验证应用ID正确性

确认androidAppId是Google Play商店中你的应用的完整包名(例如com.yourcompany.yourapp),检查是否存在拼写错误或格式问题。

2. 升级new_version包到最新版本

旧版本的解析逻辑存在兼容性问题,新版本已经修复了这类页面解析错误。修改pubspec.yaml中的依赖:

dependencies:
  new_version: ^最新版本号

执行flutter pub get完成依赖更新。

3. 添加异常捕获逻辑

在版本检测代码中添加try-catch块,避免未处理异常导致应用崩溃,并添加降级逻辑:

void _checkVersion() async {
  final newVersion = NewVersion(
    androidId: androidAppId,
    iOSId: iOSAppId
  );
  try {
    final status = await newVersion.getVersionStatus();
    if (status != null) {
      if (status.canUpdate) {
        newVersion.showUpdateDialog(
          context: context,
          versionStatus: status,
          dialogTitle: "Update!!!",
          dialogText: "Please update your app from ${status.localVersion} to ${status.storeVersion}",
          allowDismissal: false,
          dismissAction: () {
            SystemNavigator.pop();
          },
          updateButtonText: "Let's Update"
        );
      }
      print("app version on Device ${status.localVersion}");
      print("app version on store ${status.storeVersion}");
    }
  } catch (e) {
    print("版本检测失败: $e");
    // 异常时直接进入应用,避免卡在闪屏页
    // Navigator.pushReplacement(context, MaterialPageRoute(builder: (ctx) => HomeScreen()));
  }
}

4. 备选方案:使用官方in_app_update包

如果new_version的问题持续,推荐使用Flutter官方支持的in_app_update包,它直接调用Google Play的更新API,无需解析网页,稳定性更高。

内容的提问来源于stack exchange,提问作者Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:15:34