对 Windows 平台的支持正式进入 Flutter 2.0,不过我在使用 package_info_plus
获取软件版本号的时候,将字符串转为数字遇到这个报错。
[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
1
^
明明只有一个数字 1
却提示不是合法的十进制数字。在这个 #182 issue 里找到了答案,C/C++ 在字符串结尾加了 \0
作为字符串结束符,插件里没有忽略这个字符(不知道插件里是怎么实现的,正常 FFI 转换的时候应该自动忽略的),导致看上去只有一个字符,实际有两个符号。
那么解决方案就简单了,截掉最后一个字符就行了,比如这样:
final numList = version.split('\x00')[0].split('.');
或者这样:
final numList = version.replaceAll('\x00', '').split('.');
要么这样:
final numList = version.subString(0, version.length - 1).split('.');
还能这样:
final numList = RegExp("[0-9\.]+").firstMatch(version).group(0).split('.');
总之得写那么长,不能用 version.trim().split('.')
,我试了 trim()
不会删除 \0
。
当然这种时候就要怀念 Python 了,如果是 Python,只需这样:
numList = version[:-1].split('.')