class ProfilePageState extends State<ProfilePage> {
final controller = TextEditingController();
@override
Widget build(BuildContext context) {
return TextField(controller: controller);
}
} class ProfilePageState extends State<ProfilePage> {
final controller = TextEditingController();
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(controller: controller);
}
} class FeedPageState extends State<FeedPage> {
final scrollController = ScrollController();
@override
void initState() {
super.initState();
scrollController.addListener(_onScroll);
}
void _onScroll() {
if (scrollController.position.pixels > 300) {
// Например, показываем кнопку "Наверх".
}
}
@override
void dispose() {
scrollController.removeListener(_onScroll);
scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ListView(
controller: scrollController,
children: const [],
);
}
} class MessagesPageState extends State<MessagesPage> {
@override
void initState() {
super.initState();
chatRepository.messagesStream.listen((message) {
setState(() {
// Добавляем новое сообщение на экран.
});
});
}
} class MessagesPageState extends State<MessagesPage> {
late final StreamSubscription<Message> subscription;
@override
void initState() {
super.initState();
subscription = chatRepository.messagesStream.listen((message) {
if (!mounted) return;
setState(() {
// Добавляем новое сообщение на экран.
});
});
}
@override
void dispose() {
subscription.cancel();
super.dispose();
}
} class CartPageState extends State<CartPage> {
@override
void initState() {
super.initState();
cartNotifier.addListener(_onCartChanged);
}
void _onCartChanged() {
setState(() {});
}
} class CartPageState extends State<CartPage> {
@override
void initState() {
super.initState();
cartNotifier.addListener(_onCartChanged);
}
void _onCartChanged() {
if (!mounted) return;
setState(() {});
}
@override
void dispose() {
cartNotifier.removeListener(_onCartChanged);
super.dispose();
}
} class OrdersPageState extends State<OrdersPage> {
final ordersBloc = OrdersBloc();
@override
Widget build(BuildContext context) {
return BlocBuilder<OrdersBloc, OrdersState>(
bloc: ordersBloc,
builder: (context, state) {
return OrdersList(orders: state.orders);
},
);
}
} class OrdersPageState extends State<OrdersPage> {
final ordersBloc = OrdersBloc();
@override
void dispose() {
ordersBloc.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocBuilder<OrdersBloc, OrdersState>(
bloc: ordersBloc,
builder: (context, state) {
return OrdersList(orders: state.orders);
},
);
}
} class OrdersPage extends StatelessWidget {
const OrdersPage({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => OrdersBloc(),
child: const OrdersView(),
);
}
} BlocProvider.value(
value: existingOrdersBloc,
child: const OrdersView(),
); class CodePageState extends State<CodePage> {
Timer? timer;
int secondsLeft = 60;
@override
void initState() {
super.initState();
timer = Timer.periodic(const Duration(seconds: 1), (_) {
setState(() {
secondsLeft--;
});
});
}
} class CodePageState extends State<CodePage> {
Timer? timer;
int secondsLeft = 60;
@override
void initState() {
super.initState();
timer = Timer.periodic(const Duration(seconds: 1), (_) {
if (!mounted) return;
setState(() {
secondsLeft--;
});
});
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}
} class DialogService {
BuildContext? context;
void saveContext(BuildContext value) {
context = value;
}
void showError(String message) {
showDialog(
context: context!,
builder: (_) => AlertDialog(content: Text(message)),
);
}
} class DialogService {
void showError(BuildContext context, String message) {
showDialog(
context: context,
builder: (_) => AlertDialog(content: Text(message)),
);
}
} void openDetails(Product product) {
analyticsService.onNextEvent = () {
debugPrint('User opened ${product.title}');
Navigator.of(context).pushNamed('/details');
};
} void openDetails(Product product) {
analyticsService.trackProductOpened(product.id);
Navigator.of(context).pushNamed('/details');
} class ProductCache {
final Map<String, Product> products = {};
void save(Product product) {
products[product.id] = product;
}
} class ProductCache {
static const maxItems = 100;
final Map<String, Product> products = {};
void save(Product product) {
if (products.length >= maxItems) {
products.remove(products.keys.first);
}
products[product.id] = product;
}
} import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:leak_tracker/leak_tracker.dart';
void main() {
FlutterMemoryAllocations.instance.addListener(
(ObjectEvent event) {
LeakTracking.dispatchObjectEvent(event.toMap());
},
);
LeakTracking.start();
runApp(const App());
} leak_tracker: 3 memory leak(s): not disposed: 3, not GCed: 0, GCed late: 0
class BadExample extends StatelessWidget {
const BadExample({super.key});
@override
Widget build(BuildContext context) {
FocusNode();
return const SizedBox();
}
} Future<void> loadData() async {
final result = await repository.loadProfile();
if (!mounted) return;
setState(() {
profile = result;
});
}