What does Underscore "_" before variable name mean for Flutter

FlutterDart

Flutter Problem Overview


with reference to the Flutter tutorial, I encountered an underscore, _.

I know that in Java, _ is used as a naming convention for a private variable.

  1. Does it also apply to Flutter? Noting that there is no public/protected in Flutter.
  2. Will the _ really be private (inaccessible by other classes) or is it just a naming convention?
Variable
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. Does the _ make the Widget private too? In this case, wouldn't the main class be unable to assess the Widget?
Function
Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);  // Add this line.
  ...
}

Flutter Solutions


Solution 1 - Flutter

It's not just a naming convention. Underscore fields, classes and methods will only be available in the .dart file where they are defined.

It is common practice to make the State implementation of a widget private, so that it can only be instantiated by the corresponding StatefulWidget:

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

Solution 2 - Flutter

From the Dart guide > Unlike Java, Dart doesn’t have the keywords public, protected, and > private. If an identifier starts with an underscore (_), it’s private > to its library. For details, see Libraries and visibility.

Solution 3 - Flutter

Private fields also have the advantage that Lint can identify which fields were declared/instantiated and not used, which helps identify human errors.

If you declare a public field, the field may be accessed by classes outside the class in the future and so Lint cannot warn you if you added the field by mistake.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlonelearnerView Question on Stackoverflow
Solution 1 - FlutterboformerView Answer on Stackoverflow
Solution 2 - FlutterTheMriView Answer on Stackoverflow
Solution 3 - FlutterKernel JamesView Answer on Stackoverflow