Giữ một trường ở chế độ riêng tư
Thuộc phần Quản lý trạng thái trong hành trình Flutter của Coddy. Bài học 7 trên 27.
Một bộ điều nhiệt không bao giờ nên vượt quá 26 hoặc thấp hơn 16 độ. Phương thức warmer có thể kiểm tra điều đó, nhưng chỉ khi không ai có thể thay đổi con số theo cách khác. Khi thuộc tính còn công khai, bất kỳ đoạn code nào cũng có thể ghi thermostat.degrees = 99.
Tên bắt đầu bằng _ là riêng tư: chỉ code trong cùng một tệp mới có thể dùng tên đó. Đặt lớp vào tệp riêng, đặt thuộc tính thành riêng tư, rồi cung cấp getter để bên ngoài đọc và các phương thức để thay đổi thuộc tính:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}Trang này nhập tệp bằng import 'thermostat.dart';. Trang có thể đọc thermostat.degrees, nhưng thermostat.degrees++ không còn biên dịch được: có getter nhưng không có cách nào thiết lập giá trị. Cách duy nhất để thay đổi số độ là thông qua các phương thức, vì vậy giới hạn luôn được giữ nguyên.
Mở thermostat.dart trong danh sách tệp để chỉnh sửa.
Thử thách
Trung bìnhCác nút thay đổi trực tiếp degrees trên trang mà không có giới hạn. Trong thermostat.dart:
- Đổi tên trường thành
_degreesvà thêm getterdegreestrả về giá trị đó. - Thêm
warmer(), hàm này tăng giá trị lên 1 cho đến 26, vàcooler(), hàm này giảm giá trị đi 1 cho đến 16.
Sau đó, để các nút trong main.dart gọi thermostat.warmer() và thermostat.cooler().
Tự làm thử
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'),
),
],
),
],
),
),
);
}
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Quản lý trạng thái
2Dart cho mô hình
Phương thức trong lớp của bạnGetter trong lớp của bạnGiữ một trường ở chế độ riêng tưCộng các phần tử trong danh sách bằng foldTự luyện tập: Trình biên dịch Flutter online