اجعل أحد الحقول خاصًا
جزء من قسم إدارة الحالة في رحلة 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 في قائمة الملفات لتحريره.
التحدي
متوسطتغيّر الأزرار 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'),
),
],
),
],
),
),
);
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس إدارة الحالة
2Dart للنماذج
الطرق في الأصناف الخاصة بكالمُعرِّفات في أصنافكاجعل أحد الحقول خاصًااجمع عناصر قائمة باستخدام foldتدرّب بنفسك: مترجم Flutter عبر الإنترنت