DateFormat ile Tarihler
Coddy'nin Flutter Journey'sinin Veri ve Ağ bölümünün bir parçası. Ders 20 / 27.
Sunucular tarihleri, yıl, ay, gün ve ardından saat gelecek şekilde, "2026-11-03T18:30:00" gibi sabit bir biçimde metin olarak gönderir. DateTime.parse, bu metni bir DateTime değerine dönüştürür. Olduğu gibi yazdırıldığında bir DateTime, 2026-11-03 18:30:00.000 şeklinde görünür; bunu telefonda kimse okumak istemez.
intl paketi, tarihleri insanların okuyabileceği biçimde düzenler. DateFormat, tarihin bölümlerini temsil eden harflerden oluşan bir örüntü alır:
import 'package:intl/intl.dart';
final day = DateTime.parse('2026-11-03T18:30:00');
DateFormat('EEE, MMM d').format(day) // Sal, Kas 3
DateFormat('EEEE d MMMM').format(day) // Salı 3 KasımE haftanın gününü, M ayı ve d ayın gününü belirtir. Daha fazla harf daha uzun bir biçim verir: EEE, Tue; EEEE, Tuesday; MMM, Nov; MMMM, November; MM, 11 anlamına gelir. Büyük-küçük harf önemlidir: D, yılın gününü belirtir. Örüntüdeki virgüller ve boşluklar olduğu gibi korunur.
Görev
KolayEtkinlik listesi ham tarihleri gösteriyor. Her birini DateFormat ile biçimlendir; böylece ilk etkinlik Tue, Nov 3 şeklinde görünür. intl içe aktarımı zaten mevcut.
Kendin dene
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'api.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: EventsScreen(),
);
}
}
class EventsScreen extends StatefulWidget {
const EventsScreen({super.key});
@override
State<EventsScreen> createState() => _EventsScreenState();
}
class _EventsScreenState extends State<EventsScreen> {
late Future<List<Event>> _events;
@override
void initState() {
super.initState();
_events = loadEvents();
}
Future<List<Event>> loadEvents() async {
final body = await fetch('/events');
final items = jsonDecode(body) as List<dynamic>;
return items.map((item) => Event.fromJson(item as Map<String, dynamic>)).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Events')),
body: FutureBuilder<List<Event>>(
future: _events,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(child: Text('Could not load: ${snapshot.error}'));
}
if (snapshot.hasData) {
final events = snapshot.data!;
return ListView.builder(
itemCount: events.length,
itemBuilder: (context, index) {
final event = events[index];
return ListTile(
title: Text(event.title),
subtitle: Text('${event.start}'),
);
},
);
}
return const Center(child: CircularProgressIndicator());
},
),
);
}
}
class Event {
Event({required this.title, required this.start});
final String title;
final DateTime start;
factory Event.fromJson(Map<String, dynamic> json) {
return Event(
title: json['title'] as String,
start: DateTime.parse(json['start'] as String),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Veri ve Ağ bölümündeki tüm dersler
3Çağrılar Başarısız Olduğunda
try ile Hataları YakalamaHata Fırlatmafinally ile TemizlemeFutureBuilder Hata DurumuYeniden Dene DüğmesiKendi başına pratik yap: Online Flutter derleyicisi