变量名前的下划线“_”对 Flutter 意味着啥
Posted
技术标签:
【中文标题】变量名前的下划线“_”对 Flutter 意味着啥【英文标题】:What does Underscore "_" before variable name mean for Flutter变量名前的下划线“_”对 Flutter 意味着什么 【发布时间】:2019-04-08 02:11:20 【问题描述】:参考Flutter教程,遇到下划线_
。
我知道在 Java 中,_
被用作私有变量的命名约定。
-
它是否也适用于 Flutter?请注意,Flutter 中没有公共/受保护的。
_
真的是私有的(其他类无法访问)还是只是一个命名约定?
变量
class RandomWordsState extends State<RandomWords>
final List<WordPair> _suggestions = <WordPair>[];
final Set<WordPair> _saved = new Set<WordPair>();
final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
...
_
是否也将 Widget 设为私有?这样的话,主类是不是无法评估Widget?
功能
Widget _buildRow(WordPair pair)
final bool alreadySaved = _saved.contains(pair); // Add this line.
...
【问题讨论】:
***.com/a/53022431/10269042 【参考方案1】:这不只是一个命名约定。下划线字段、类和方法仅在定义它们的.dart
文件中可用。
通常的做法是将小部件的State
实现设为私有,这样它只能由相应的StatefulWidget
实例化:
class MyPage extends StatefulWidget
@override
_MyPageState createState() => _MyPageState();
class _MyPageState extends State<MyPage>
@override
Widget build(BuildContext context)
return Container();
【讨论】:
【参考方案2】:来自Dart guide
与 Java 不同,Dart 没有关键字 public、protected 和 私人的。如果标识符以下划线 (_) 开头,则它是私有的 到它的图书馆。详情请见Libraries and visibility。
【讨论】:
【参考方案3】:私有字段还有一个优势,即 Lint 可以识别哪些字段已声明/实例化但未使用,这有助于识别人为错误。
如果您声明一个公共字段,该字段将来可能会被该类之外的类访问,因此如果您错误地添加了该字段,Lint 不会警告您。
【讨论】:
以上是关于变量名前的下划线“_”对 Flutter 意味着啥的主要内容,如果未能解决你的问题,请参考以下文章