Menu
CoddyTech
flag Ar iconالعربيةdown icon

اجعل أحد الحقول خاصًا

جزء من قسم إدارة الحالة في رحلة Flutter على Coddy. الدرس 7 من 27.

يجب ألا تتجاوز درجة حرارة منظم الحرارة 26 أبدًا، وألا تنخفض عن 16 درجة. يمكن للطريقة warmer التحقق من ذلك، لكن فقط إذا لم يتمكن أحد من تغيير الرقم بطريقة أخرى. ما دام الحقل عامًا، يمكن لأي شيفرة كتابة thermostat.degrees = 99.

الاسم الذي يبدأ بـ _ يكون خاصًا: لا يمكن استخدامه إلا من الشيفرة الموجودة في الملف نفسه. ضع الصنف في ملف خاص به، واجعل الحقل خاصًا، وأتح للخارج قارئًا لقراءته وطرائق لتغييره:

// thermostat.dart
class Thermostat {
  int _degrees = 20;

  int get degrees => _degrees;

  void warmer() {
    if (_degrees < 26) {
      _degrees = _degrees + 1;
    }
  }
}

تستورد الصفحة الملف باستخدام import 'thermostat.dart';. يمكنها قراءة thermostat.degrees، لكن thermostat.degrees++ لن يُترجم بعد الآن: يوجد قارئ ولا توجد طريقة لتعيين القيمة. الطريقة الوحيدة لتغيير درجة الحرارة هي عبر الطرائق، لذا تظل الحدود محفوظة دائمًا.

افتح thermostat.dart في قائمة الملفات لتحريره.

challenge icon

التحدي

متوسط

تغيّر الأزرار degrees مباشرةً من الصفحة، من دون أي قيود. في thermostat.dart:

  • أعِد تسمية الحقل إلى _degrees وأضف أداة الوصول degrees التي تُرجعه.
  • أضف warmer()، التي تزيد القيمة بمقدار 1 حتى 26، وcooler()، التي تنقصها بمقدار 1 حتى 16.

ثم اجعل الأزرار في main.dart تستدعي thermostat.warmer() وthermostat.cooler().

جرّب بنفسك

import 'package:flutter/material.dart';

import 'thermostat.dart';

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

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 thermostat = Thermostat();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Thermostat')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('${thermostat.degrees}°C', style: const TextStyle(fontSize: 48)),
            const SizedBox(height: 16),
            Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      thermostat.degrees--;
                    });
                  },
                  child: const Text('Cooler'),
                ),
                const SizedBox(width: 16),
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      thermostat.degrees++;
                    });
                  },
                  child: const Text('Warmer'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس إدارة الحالة

تدرّب بنفسك: مترجم Flutter عبر الإنترنت