Flutter 使用flatter path_provider查找使用Adobe AIR构建的应用程序的早期版本存储的txt文件

Flutter 使用flatter path_provider查找使用Adobe AIR构建的应用程序的早期版本存储的txt文件,flutter,flutter-dependencies,Flutter,Flutter Dependencies,我有一个使用AdobeAIR构建的现有Android/iOS应用程序。我用颤振从零开始重建它。到目前为止还不错,但我需要访问存储在设备上的文本文件,该文件存储用户ID。Adobe AIR中的文件路径为: \appName\Local Store\userID.txt 我正在寻找一种在我的Flitter应用程序中读取数据的方法。(目前正在使用path_provider插件。)任何帮助都将不胜感激。我每次尝试直接访问文件都失败了。当然,AdobeAIR和Flatter使用相同的沙箱存储本地文件,但沙

我有一个使用AdobeAIR构建的现有Android/iOS应用程序。我用颤振从零开始重建它。到目前为止还不错,但我需要访问存储在设备上的文本文件,该文件存储用户ID。Adobe AIR中的文件路径为:

\appName\Local Store\userID.txt


我正在寻找一种在我的Flitter应用程序中读取数据的方法。(目前正在使用path_provider插件。)任何帮助都将不胜感激。

我每次尝试直接访问文件都失败了。当然,AdobeAIR和Flatter使用相同的沙箱存储本地文件,但沙箱中的文件结构不同

我的解决方案是使用
file.listSync(递归:true)

我不知道这些文件的确切位置,但我知道它们在这个沙箱中的某个地方,所以递归搜索应该可以工作,它做到了

我首先获取applictaiondocuments目录,但这不是沙盒的根。为了获得根目录,我创建了
目录.path.lastIndexOf('/')
的子字符串

然后递归地在所有文件/文件夹中查找userID.txt和tempID.txt

如果找到这些文件,则内容将存储在我的Init类上的静态int中。一旦两个值都设置好,循环就会退出

这不是最优雅的解决方案,但我发现唯一一个是万无一失的。而且,由于这样可以避免现有用户再次登录的需要,以及支持20万人尝试记住他们使用的电子邮件地址的所有麻烦,所以这是值得的

注意:在我的情况下,此代码只需要运行一次,即安装后第一次运行应用程序

getPreviousUserIDs() async {
        dynamic directory = await getApplicationDocumentsDirectory();
        String path = directory.path.substring( 0, directory.path.lastIndexOf( '/' ) );
        dynamic file = io.Directory( path );
        
        List allContents = file.listSync( recursive: true );
        for ( var fileOrDir in allContents ) {
            if ( fileOrDir is io.File ) {
                
                if( fileOrDir.path.indexOf( 'userID.txt' ) > 0 ) {
            
                    // Set static value on Init.
                    Init.userID = int.parse( await fileOrDir.readAsString() );
                    
                } else if( fileOrDir.path.indexOf( 'tempID.txt' ) > 0 ) {
                    
                    // Set static value on Init.
                    Init.tempID = int.parse( await fileOrDir.readAsString() );
                    
                }
                
                if(     Init.userID != null
                    &&  Init.tempID != null )
                    break;
                
            }
        }
    }