import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(home: const UsersScreen());
}
}
class UsersScreen extends StatefulWidget {
const UsersScreen({super.key});
@override
State<UsersScreen> createState() => _UsersScreenState();
}
class _UsersScreenState extends State<UsersScreen> {
late Future<List<String>> _future;
@override
void initState() {
super.initState();
_future = _loadUsers();
}
Future<List<String>> _loadUsers() async {
final uri = Uri.parse('https://jsonplaceholder.typicode.com/users');
final response = await http.get(uri);
if (response.statusCode != 200) {
throw Exception('Ошибка сервера: ${response.statusCode}');
}
final data = jsonDecode(response.body) as List;
return data.map((u) => u['name'] as String).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Пользователи')),
body: FutureBuilder<List<String>>(
future: _future,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
if (snapshot.hasError) {
return Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Ошибка: ${snapshot.error}'),
),
);
}
final items = snapshot.data ?? [];
if (items.isEmpty) {
return const Center(child: Text('Список пуст'));
}
return ListView.builder(
itemCount: items.length,
itemBuilder: (_, i) => ListTile(
leading: const Icon(Icons.person_outline),
title: Text(items[i]),
),
);
},
),
);
}
}
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(home: const UsersScreen());
}
}
class UsersScreen extends StatefulWidget {
const UsersScreen({super.key});
@override
State<UsersScreen> createState() => _UsersScreenState();
}
class _UsersScreenState extends State<UsersScreen> {
late Future<List<String>> _future;
@override
void initState() {
super.initState();
_future = _loadUsers();
}
Future<List<String>> _loadUsers() async {
final uri = Uri.parse('https://jsonplaceholder.typicode.com/users');
final response = await http.get(uri);
if (response.statusCode != 200) {
throw Exception('Ошибка сервера: ${response.statusCode}');
}
final data = jsonDecode(response.body) as List;
return data.map((u) => u['name'] as String).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Пользователи')),
body: FutureBuilder<List<String>>(
future: _future,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
if (snapshot.hasError) {
return Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Ошибка: ${snapshot.error}'),
),
);
}
final items = snapshot.data ?? [];
if (items.isEmpty) {
return const Center(child: Text('Список пуст'));
}
return ListView.builder(
itemCount: items.length,
itemBuilder: (_, i) => ListTile(
leading: const Icon(Icons.person_outline),
title: Text(items[i]),
),
);
},
),
);
}
}