Останні пвідомленн

#1
Flutter / Flutter: JSON та API — Основи ...
Останй допис від Sehza - Квт. 01, 2025, 01:19 PM
Flutter — це популярний фреймворк від Google для створення кросплатформених додатків. Одним із ключових аспектів розробки є робота з даними, які часто надходять із зовнішніх джерел через API у форматі JSON. У цій статті ми розглянемо, що таке JSON і API, як їх використовувати у Flutter, і надамо практичні приклади коду. Цей матеріал ідеально підійде як для новачків, так і для розробників, які хочуть поглибити свої знання.

Що таке JSON та API?
JSON (JavaScript Object Notation) — це легкий формат обміну даними, який легко читається людьми та обробляється машинами. Він широко використовується для передачі даних між сервером і клієнтом. Приклад JSON:

{
  "id": 1,
  "name": "Продукт",
  "price": 29.99
}


API (Application Programming Interface) — це набір правил, які дозволяють додаткам взаємодіяти з зовнішніми сервісами. У контексті Flutter, ми зазвичай використовуємо REST API, щоб отримувати або надсилати дані у форматі JSON.

Як працювати з JSON та API у Flutter?
Для роботи з API у Flutter потрібні:
  • HTTP-запити: Бібліотека http для надсилання запитів.
  • Парсинг JSON: Перетворення JSON у Dart-об'єкти.
  • Асинхронність: Використання async/await для обробки запитів.
Нижче розглянемо покроковий процес із прикладами.

Крок 1: Додавання залежностей
Додайте бібліотеку http у файл pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0


Запустіть flutter pub get, щоб встановити залежність.

Крок 2: Створення моделі для JSON
Припустимо, ми отримуємо дані про користувача у такому форматі:

{
  "id": 1,
  "name": "Олександр",
  "email": "[email protected]"
}


Створимо модель у Dart:

class User {
  final int id;
  final String name;
  final String email;

  User({required this.id, required this.name, required this.email});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      email: json['email'],
    );
  }
}


Метод fromJson дозволяє перетворити JSON у об'єкт Dart.

Крок 3: Виконання HTTP-запиту
Тепер зробимо GET-запит до API (наприклад, до тестового сервісу jsonplaceholder.typicode.com):

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  User? user;
  bool isLoading = false;

  Future<void> fetchUser() async {
    setState(() {
      isLoading = true;
    });

    final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/users/1'));
    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      setState(() {
        user = User.fromJson(data);
        isLoading = false;
      });
    } else {
      setState(() {
        isLoading = false;
      });
      throw Exception('Не вдалося завантажити дані');
    }
  }

  @override
  void initState() {
    super.initState();
    fetchUser();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Flutter JSON та API')),
      body: Center(
        child: isLoading
            ? CircularProgressIndicator()
            : user != null
                ? Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text('ID: ${user!.id}'),
                      Text('Ім'я: ${user!.name}'),
                      Text('Email: ${user!.email}'),
                    ],
                  )
                : Text('Дані відсутні'),
      ),
    );
  }
}


У цьому прикладі:
  • Ми надсилаємо GET-запит до API.
  • Парсимо отриманий JSON у об'єкт User.
  • Відображаємо дані на екрані з індикатором завантаження.

Крок 4: Робота зі списком даних
Якщо API повертає список (наприклад, кілька користувачів), оновимо код:

class _HomeScreenState extends State<HomeScreen> {
  List<User> users = [];
  bool isLoading = false;

  Future<void> fetchUsers() async {
    setState(() {
      isLoading = true;
    });

    final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/users'));
    if (response.statusCode == 200) {
      final List<dynamic> data = jsonDecode(response.body);
      setState(() {
        users = data.map((json) => User.fromJson(json)).toList();
        isLoading = false;
      });
    } else {
      setState(() {
        isLoading = false;
      });
      throw Exception('Не вдалося завантажити список');
    }
  }

  @override
  void initState() {
    super.initState();
    fetchUsers();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Список користувачів')),
      body: isLoading
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: users.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(users[index].name),
                  subtitle: Text(users[index].email),
                );
              },
            ),
    );
  }
}


Тут ми використовуємо ListView.builder для відображення списку користувачів.

Поради для роботи з JSON та API у Flutter
  • Обробка помилок: Завжди перевіряйте статус-код відповіді та додавайте обробку винятків.
  • Оптимізація: Використовуйте FutureBuilder для асинхронного відображення даних.
  • Безпека: Для реальних додатків додавайте API-ключі та захищені з'єднання (HTTPS).
  • Кодогенерація: Для великих JSON-структур використовуйте інструменти, як-от json_serializable, щоб автоматично створювати моделі.

Висновок
Робота з JSON та API у Flutter — це базова навичка для створення сучасних додатків. У цій статті ми розглянули, як виконувати HTTP-запити, парсити JSON і відображати дані в інтерфейсі. Спробуйте ці приклади самостійно, адаптуйте їх під свої потреби та експериментуйте з реальними API!
#2
Python / Python Tkinter Віджети: Прикла...
Останй допис від Sehza - Квт. 01, 2025, 01:16 PM

Python — одна з найпопулярніших мов програмування у світі, а бібліотека Tkinter є стандартним інструментом для створення графічних інтерфейсів користувача (GUI). У цій статті ми розглянемо основні віджети Tkinter, надамо приклади коду та пояснимо, як їх використовувати для створення простих, але функціональних програм. Цей матеріал буде корисним як для початківців, так і для тих, хто хоче поглибити свої знання в розробці GUI на Python.

Що таке Tkinter і чому варто його використовувати?
Tkinter — це вбудована бібліотека Python, яка дозволяє створювати віконні додатки з кнопками, текстовими полями, мітками та іншими елементами інтерфейсу. Вона проста у використанні, легка для освоєння та підходить для створення як невеликих утиліт, так і більш складних програм. Завдяки своїй універсальності, Tkinter є чудовим вибором для розробників-початківців.

Основні віджети Tkinter: Приклади з кодом
Нижче наведено приклади найпоширеніших віджетів Tkinter із поясненнями та кодом. Ви можете скопіювати ці приклади та протестувати їх самостійно.

1. Мітка (Label)
Мітка використовується для відображення тексту або зображень у вікні.

import tkinter as tk

window = tk.Tk()
window.title("Приклад Tkinter")
window.geometry("300x200")

label = tk.Label(window, text="Привіт, це мітка!", font=("Arial", 14))
label.pack(pady=20)

window.mainloop()


У цьому прикладі ми створили просте вікно з текстом "Привіт, це мітка!". Метод pack() розміщує віджет у центрі.

2. Кнопка (Button)
Кнопка дозволяє користувачу виконувати дії при натисканні.

import tkinter as tk

def button_click():
    label.config(text="Ти натиснув кнопку!")

window = tk.Tk()
window.title("Кнопка Tkinter")
window.geometry("300x200")

label = tk.Label(window, text="Натисни кнопку нижче", font=("Arial", 12))
label.pack(pady=10)

button = tk.Button(window, text="Натисни мене", command=button_click, bg="green", fg="white")
button.pack(pady=10)

window.mainloop()


Тут ми додали кнопку, яка змінює текст мітки при натисканні. Аргументи bg і fg задають колір фону та тексту.

3. Текстове поле (Entry)
Текстове поле дозволяє користувачу вводити дані.

import tkinter as tk

def show_text():
    entered_text = entry.get()
    label.config(text=f"Ти ввів: {entered_text}")

window = tk.Tk()
window.title("Текстове поле")
window.geometry("300x200")

label = tk.Label(window, text="Введи щось:", font=("Arial", 12))
label.pack(pady=10)

entry = tk.Entry(window, width=20)
entry.pack(pady=10)

button = tk.Button(window, text="Показати", command=show_text)
button.pack(pady=10)

window.mainloop()


У цьому прикладі користувач може ввести текст у поле Entry, а після натискання кнопки текст відобразиться у мітці.

4. Прапорець (Checkbutton)
Прапорець дозволяє користувачу вибирати кілька варіантів.

import tkinter as tk

window = tk.Tk()
window.title("Прапорець Tkinter")
window.geometry("300x200")

var1 = tk.BooleanVar()
var2 = tk.BooleanVar()

check1 = tk.Checkbutton(window, text="Варіант 1", variable=var1)
check1.pack(pady=10)

check2 = tk.Checkbutton(window, text="Варіант 2", variable=var2)
check2.pack(pady=10)

def check_status():
    label.config(text=f"Варіант 1: {var1.get()}, Варіант 2: {var2.get()}")

button = tk.Button(window, text="Перевірити", command=check_status)
button.pack(pady=10)

label = tk.Label(window, text="")
label.pack(pady=10)

window.mainloop()


Цей код створює два прапорці, і при натисканні кнопки відображається їхній стан (True або False).

5. Список (Listbox)
Список дозволяє відображати кілька елементів, з яких користувач може вибрати один або кілька.

import tkinter as tk

window = tk.Tk()
window.title("Список Tkinter")
window.geometry("300x200")

listbox = tk.Listbox(window, height=5)
items = ["Елемент 1", "Елемент 2", "Елемент 3", "Елемент 4"]
for item in items:
    listbox.insert(tk.END, item)
listbox.pack(pady=10)

def show_selection():
    selected = listbox.get(listbox.curselection())
    label.config(text=f"Вибрано: {selected}")

button = tk.Button(window, text="Показати вибір", command=show_selection)
button.pack(pady=10)

label = tk.Label(window, text="")
label.pack(pady=10)

window.mainloop()


Цей приклад показує, як створити список і отримати вибраний елемент.

Поради для створення GUI з Tkinter
  • Організація віджетів: Використовуйте менеджери розміщення, такі як pack(), grid() або place(), щоб контролювати розташування елементів.
  • Стилізація: Додавайте кольори, шрифти та розміри для покращення зовнішнього вигляду.
  • Обробка подій: Зв'язуйте функції з віджетами за допомогою аргументу command.
  • Модульність: Розбивайте код на функції для зручності підтримки.

Висновок
Tkinter — це потужний інструмент для створення графічних інтерфейсів у Python. У цій статті ми розглянули основні віджети, такі як мітки, кнопки, текстові поля, прапорці та списки, і показали, як їх застосовувати на практиці. Спробуйте ці приклади самостійно, експериментуйте з кодом і створюйте власні додатки! Якщо ви хочете дізнатися більше про Python Tkinter, продовжуйте досліджувати документацію та приклади.
#3
C# / C# Область змінної з вкладеним...
Останй допис від Sehza - Лист. 14, 2024, 03:15 PM
#4
C# / C#: Робота з циклами While (Пр...
Останй допис від Sehza - Лист. 14, 2024, 03:14 PM
#5
SQL / Числові типи SQL - SMALLINT, I...
Останй допис від Sehza - Лист. 14, 2024, 03:12 PM
#6
SQL / Ключове слово SQL DELETE (Прак...
Останй допис від Sehza - Лист. 14, 2024, 03:10 PM
#7
Php / Інтерфейси PHP та поліморфізм ...
Останй допис від Sehza - Лист. 14, 2024, 03:08 PM
#8
Php / PHP: Оператори присвоєння (Пра...
Останй допис від Sehza - Лист. 14, 2024, 03:06 PM
#9
Html / HTML: Додавання зображень (Пра...
Останй допис від Sehza - Лист. 14, 2024, 03:02 PM
#10
Html / HTML: спеціальний символ (Віде...
Останй допис від Sehza - Лист. 14, 2024, 03:01 PM