Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmAwJs 117 of 125 menu
◀ ▶

JSON и класс модели в Flutter

Тело HTTP-ответа в формате JSON превращают в структуры Dart функцией jsonDecode из dart:convert. Она возвращает dynamic - Map или List, с которыми удобнее работать через свой класс.

У модели делают фабрику fromJson, которая читает ключи Map. Список на экране строят через ListView.builder по длине массива:

import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; void main() { runApp(const MaterialApp(home: JsonListPage())); } class Todo { Todo({required this.id, required this.title}); final int id; final String title; factory Todo.fromJson(Map<String, dynamic> json) { return Todo( id: json['id'] as int, // JSON types may differ title: json['title'] as String, ); } } class JsonListPage extends StatefulWidget { const JsonListPage({super.key}); @override State<JsonListPage> createState() => _JsonListPageState(); } class _JsonListPageState extends State<JsonListPage> { late Future<List<Todo>> todos; @override void initState() { super.initState(); todos = loadTodos(); } Future<List<Todo>> loadTodos() async { final uri = Uri.parse('https://jsonplaceholder.typicode.com/todos?_limit=5'); final response = await http.get(uri); if (response.statusCode != 200) { throw Exception('Load error'); } final raw = jsonDecode(response.body) as List<dynamic>; return raw .map((item) => Todo.fromJson(item as Map<String, dynamic>)) .toList(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('JSON')), body: FutureBuilder<List<Todo>>( future: todos, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center(child: Text('${snapshot.error}')); } final items = snapshot.data!; return ListView.builder( itemCount: items.length, itemBuilder: (context, index) { final todo = items[index]; return ListTile( title: Text(todo.title), subtitle: Text('id: ${todo.id}'), ); }, ); }, ), ); } }

Загрузите список пользователей с jsonplaceholder, сделайте класс User с name и email. В ListTile покажите имя и почту.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить