Đọc trường bằng bộ điều khiển
Thuộc phần Tạo tính tương tác trong hành trình Flutter của Coddy. Bài học 24 trên 34.
onChanged nhận mọi ký tự. Thường thì bạn chỉ muốn lấy văn bản khi nhấn nút, như Thêm hoặc Gửi. Để làm vậy, hãy gán cho trường nhập liệu một bộ điều khiển (controller):
final TextEditingController _controller = TextEditingController();
TextField(controller: _controller)Bộ điều khiển nằm trong State, cùng với các biến khác. Nó là final vì bộ điều khiển luôn giữ nguyên, chỉ có văn bản bên trong thay đổi. _controller.text là nội dung hiện tại của trường nhập liệu, còn _controller.clear() xóa nội dung đó.
void _send() {
print(_controller.text);
_controller.clear();
}Bạn nên hủy bộ điều khiển khi màn hình bị hủy. Đó là công dụng của dispose: Flutter gọi phương thức này khi State không còn tồn tại.
@override
void dispose() {
_controller.dispose();
super.dispose();
}Thử thách
Trung bình- Thêm
final TextEditingController _controllervào State và truyền nó cho trường bằngcontroller:. - Cho
_addhiển thị văn bản trong trường theo dạngLast added: Buy milk, sau đó xóa nội dung trường. - Thêm phương thức
disposenhư trong phần lý thuyết.
Tự làm thử
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _last = 'nothing';
void _add() {}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Tasks')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
decoration: const InputDecoration(
labelText: 'New task',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 12),
ElevatedButton(onPressed: _add, child: const Text('Add')),
const SizedBox(height: 24),
Text('Last added: $_last', style: const TextStyle(fontSize: 20)),
],
),
),
);
}
}
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 Tạo tính tương tác
3Widget có trạng thái
Tự tạo lớp WidgetHiển thị SnackBarsetState vẽ lại màn hìnhViết StatefulWidgetBộ đếm tăng giảmHot Reload giữ nguyên trạng thái6Trường văn bản
Trường văn bản đầu tiênPhản hồi khi nhậpĐọc trường bằng bộ điều khiểnSố từ trường văn bảnSố thập phân với toStringAsFixedTự luyện tập: Trình biên dịch Flutter online