Flutter变量作用域问题:if-else块内定义的局部变量外部无法访问
Dart中if-else块内变量无法在外部访问的问题解决
问题原因
这其实是变量作用域的问题!在Dart(包括很多其他编程语言)里,if-else代码块属于局部作用域——你在块里面用String关键字重新声明的nameOfFileOnlyCleaned,只在当前的if或者else块里有效,一旦跳出这个块,这个变量就不存在了。外部代码自然找不到它,所以才会显示为空。
解决方法
有两种简单的方式能解决这个问题:
方法1:在块外声明变量,块内仅赋值
把变量的声明移到if-else块的外面,这样变量的作用域就覆盖到后续代码了,块里只需要给它赋值,不用再加String关键字:
String nameOfFile = list_attachments_Of_Reference[j].toString().split('/').last; // 先在外部声明变量,覆盖后续需要用到的作用域 String nameOfFileOnlyCleaned; if (nameOfFile.contains('?')) { nameOfFileOnlyCleaned = nameOfFile.substring(0, nameOfFile.indexOf('?')); } else{ nameOfFileOnlyCleaned = nameOfFile; } // 现在这里就能正常获取变量值了 String extensionFile = nameOfFileOnlyCleaned.split('.').last; String url_Of_File = list_attachments_Of_Reference[j].toString();
方法2:用三元运算符简化代码
如果逻辑简单,用三元运算符可以一行搞定变量赋值,代码更简洁:
String nameOfFile = list_attachments_Of_Reference[j].toString().split('/').last; // 用三元运算符直接完成判断和赋值 String nameOfFileOnlyCleaned = nameOfFile.contains('?') ? nameOfFile.substring(0, nameOfFile.indexOf('?')) : nameOfFile; // 后续代码正常使用变量 String extensionFile = nameOfFileOnlyCleaned.split('.').last; String url_Of_File = list_attachments_Of_Reference[j].toString();
内容的提问来源于stack exchange,提问作者Laurent Thomas
相关产品推荐
相关产品推荐

