# Flutter SDK indir: https://flutter.dev
git clone https://github.com/flutter/flutter.git -b stable
# PATH'e ekle (Windows: ortam değişkenleri, Mac/Linux: ~/.zshrc)
flutter doctorflutter create todo_app_2025
cd todo_app_2025
flutter pub add firebase_core firebase_auth cloud_firestore
flutter pub add flutter_riverpod go_router firebase_messaging
flutter pub add uuidimport 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'routes/app_router.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(const ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final router = ref.watch(goRouterProvider);
return MaterialApp.router(
title: 'Todo 2025',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
routerConfig: router,
debugShowCheckedModeBanner: false,
);
}
}import 'package:go_router/go_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../screens/login_screen.dart';
import '../screens/home_screen.dart';
final goRouterProvider = Provider<GoRouter>((ref) {
return GoRouter(
initialLocation: '/',
routes: [
GoRoute(
path: '/',
builder: (context, state) => const LoginScreen(),
),
GoRoute(
path: '/home',
builder: (context, state) => const HomeScreen(),
),
],
);
});class HomeScreen extends ConsumerWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final todos = ref.watch(todoProvider);
return Scaffold(
appBar: AppBar(title: const Text("Завдання 2025")),
body: todos.when(
data: (todoList) => ListView.builder(
itemCount: todoList.length,
itemBuilder: (context, index) {
final todo = todoList[index];
return ListTile(
title: Text(todo.title),
trailing: Checkbox(
value: todo.completed,
onChanged: (val) => ref.read(todoProvider.notifier).toggle(todo),
),
onLongPress: () => ref.read(todoProvider.notifier).delete(todo),
);
},
),
loading: () => const Center(child: CircularProgressIndicator()),
error: (_, __) => const Text("Сталася помилка"),
),
floatingActionButton: FloatingActionButton(
onPressed: () => _showAddDialog(context, ref),
child: const Icon(Icons.add),
),
);
}
void _showAddDialog(BuildContext context, WidgetRef ref) {
final controller = TextEditingController();
showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: const Text("Нове завдання"),
content: TextField(controller: controller),
actions: [
TextButton(
onPressed: () {
ref.read(todoProvider.notifier).add(controller.text);
Navigator.pop(ctx);
},
child: const Text("Додати"),
),
],
),
);
}
}// lib/services/notification_service.dart
import 'package:firebase_messaging/firebase_messaging.dart';
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
print("Фонове сповіщення: ${message.messageId}");
}
class NotificationService {
static Future<void> init() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
await messaging.requestPermission();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
// Показати toast, коли сповіщення приходить
});
}
}await NotificationService.init();# EAS Build (безкоштовний рівень є)
npm install -g eas-cli
eas login
eas build:configure
eas build --platform all
# Після 30-40 хвилин приходять посилання .aab та .ipafun main() {
var аты = "Олена"
println(аты) // Нәтиже: Олена
аты = "Ігор" // Мәнді өзгерту
println(аты) // Нәтиже: Ігор
}var жас: Int = 25
var биіктік: Double = 1.75fun main() {
val қала = "Київ"
println(қала) // Нәтиже: Київ
// val қала = "Львів" // Қате: Тұрақтыны қайта тағайындауға болмайды
}fun main() {
val тізім = mutableListOf("Алма", "Банан")
тізім.add("Жүзім") // Тізімге элемент қосуға болады
println(тізім) // Нәтиже: [Алма, Банан, Жүзім]
}fun main() {
val туған_жыл = 1998 // Өзгермейтін мән
var жас = 2025 - туған_жыл // Жыл сайын өзгеруі мүмкін
println("Сіздің жасыңыз: $жас") // Нәтиже: Сіздің жасыңыз: 27
жас = 28 // Жаңа мән
println("Келесі жылы: $жас") // Нәтиже: Келесі жылы: 28
}function функция_аты($параметр) {
// Орындалатын код
return $нәтиже;
}function қосу($сан1, $сан2) {
$нәтиже = $сан1 + $сан2;
return $нәтиже;
}
echo қосу(5, 3); // Нәтиже: 8function сәлемдесу($аты, $тіл = "Українська") {
return "Сәлем, $аты! Тіл: $тіл";
}
echo сәлемдесу("Олена"); // Нәтиже: Сәлем, Олена! Тіл: Українська
echo сәлемдесу("Ігор", "English"); // Нәтиже: Сәлем, Ігор! Тіл: Englishfunction сан_тексеру($сан) {
if ($сан > 0) {
return "Сан оң";
} else {
return "Сан теріс немесе нөл";
}
}
echo сан_тексеру(10); // Нәтиже: Сан оң
echo сан_тексеру(-5); // Нәтиже: Сан теріс немесе нөл$көбейту = function($сан) {
return $сан * 2;
};
echo $көбейту(5); // Нәтиже: 10