Menu
CoddyTech

Getters במחלקות שלכם

חלק מהיחידה ניהול מצב במסלול ה-Flutter של Coddy. שיעור 6 מתוך 27.

אין צורך לשמור ערכים מסוימים, כי אפשר לחשב אותם מתוך ערכים אחרים. מספר הכוסות שנותרו הוא היעד פחות מספר הכוסות ששתית עד עכשיו. גטר מחשב אותו בכל פעם שמבקשים:

class WaterLog {
  int glasses = 0;
  int goal = 8;

  int get left => goal - glasses;
  bool get done => glasses >= goal;
}

לגטר יש טיפוס, המילה get ושם, בלי סוגריים. => פירושו „התוצאה היא”. קוראים אותו כמו שדה: log.left, אף פעם לא log.left().

שדה ישמור את המספר שהיה בו בזמן שהערך נקבע. גטר מחושב מחדש בכל קריאה, ולכן הוא אף פעם לא מיושן: שתו כוס, ובבנייה הבאה log.left יהיה קטן באחד.

challenge icon

אתגר

קל

הדף מבצע את החישוב בעצמו, וכשהיעד מושג המספר יורד מתחת לאפס. העבר את הכללים אל WaterLog:

  • הוסף getter בשם left: היעד פחות מספר הכוסות.
  • הוסף getter בשם done: הערך יהיה true ברגע שמספר הכוסות מגיע ליעד.
  • הצג Goal reached! כאשר log.done הוא true, ואחרת הצג 8 to go, אחר כך 7 to go וכן הלאה, לפי log.left.

נסו בעצמכם

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class WaterLog {
  int glasses = 0;
  int goal = 8;

  void drink() {
    glasses = glasses + 1;
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final log = WaterLog();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Water')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              '${log.goal - log.glasses} to go',
              style: const TextStyle(fontSize: 32),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  log.drink();
                });
              },
              child: const Text('Drink a glass'),
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה ניהול מצב

תרגלו בעצמכם: קומפיילר Flutter אונליין