BuildContext là "địa chỉ" của widget trong cây — thực chất nó chính là Element của widget đó. Mọi thao tác "tìm ngược lên cây" đều đi qua context: Theme.of(context), MediaQuery.of(context), Navigator.of(context), ScaffoldMessenger.of(context).
Vì of(context) tìm từ vị trí của context đi lên, dùng context nào sẽ quyết định kết quả:
dart
Widget build(BuildContext context) {
return Scaffold(
body: Builder(
// innerContext nằm BÊN DƯỚI Scaffold nên Scaffold.of tìm thấy
builder: (innerContext) => TextButton(
onPressed: () => Scaffold.of(innerContext).openDrawer(),
child: const Text('Menu'),
),
),
);
}Dùng context của build() ở đây sẽ lỗi, vì context đó nằm phía trên Scaffold chứ không phải bên dưới.
Lưu ý: không dùng context sau một await khi chưa kiểm tra — widget có thể đã bị gỡ khỏi cây. Kiểm tra if (!context.mounted) return; trước khi gọi Navigator hay hiện SnackBar (lint use_build_context_synchronously sẽ cảnh báo chỗ này).