【问题标题】:What does Underscore "_" before variable name mean for Flutter变量名前的下划线“_”对 Flutter 意味着什么
【发布时间】:2019-04-08 02:11:20
【问题描述】:

参考Flutter教程,遇到下划线_

我知道在 Java 中,_ 被用作私有变量的命名约定。

  1. 它是否也适用于 Flutter?请注意,Flutter 中没有公共/受保护的。
  2. _ 真的是私有的(其他类无法访问)还是只是一个命名约定?

变量

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);
  ...
}
  1. _ 是否也将 Widget 设为私有?这样的话,主类是不是无法评估Widget?

功能

Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);  // Add this line.
  ...
}

【问题讨论】:

标签: flutter dart


【解决方案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 不会警告您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        • 2022-01-07
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        相关资源
        最近更新 更多