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