Tag: Flutter Private Properties

  • Flutter Private Properties

    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. Libraries not only provide APIs, but are a unit of privacy: identifiers that start with an underscore _ are visible only inside the library.

    Every Dart app is a library, even if it doesn’t use a library directive. The import and library directives can help you create a modular and shareable code base.

    //File Name: main.dart
    import 'package:flutter/material.dart';
    
    /*
    * The arrow function allows us to create a simplified function consisting of a single expression.
    * We can omit the curly brackets and the return keyword
    */
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatefulWidget {
      /*
       * createState() is a method that takes no arguments but returns a State object
       * which is connected to a StatefulWidget
       */
      @override
      State<StatefulWidget> createState() {
        return _MyAppState();
      } //createState()
    } //StatefulWidget
    
    /* A leading underscore makes the property private, here leading underscore will turn
     * this public class in to private class. Now MyAppState class can only be used in
     * main.dart file, in our case in MyApp class.
     */
    class _MyAppState extends State<MyApp>{
      var _questionIndex = 0;
    
      void _answerQuestion() {
        setState( () {
          _questionIndex++;
        } );
        print(_questionIndex);
      }
    
      @override
      Widget build(BuildContext context) {
        var questions = [
          'What\'s your favorite color?',
          'What\'s your favorite animal?'
        ];
        return MaterialApp(
          /*
          * A Scaffold Widget provides a framework which implements the basic material design visual
          * layout structure of the flutter app.
           */
          home: Scaffold(
            appBar: AppBar(
              title: Text('First Flutter App'),
            ),
            body: Column(
              children: <Widget>[
                Text(questions[_questionIndex]),
                ElevatedButton(
                  child: Text('Answer1'),
                  //onPressed takes a function
                  onPressed: _answerQuestion,
                ),
                ElevatedButton(
                  child: Text('Answer2'),
                  onPressed: () => print('Answer2 chosen!'),
                ),
                ElevatedButton(
                  child: Text('Answer3'),
                  onPressed: () {
                    //...multiline function body
                    print('Answer3 chosen');
                  },
                ),
              ],
            ),
          ),
        );
      } //build()
    } //MyApp()
    

    Output

    Output

    Happy Coding!