Menu
CoddyTech

Widżety z danych za pomocą map

Część sekcji Listy i ekrany ścieżki Flutter w Coddy. Lekcja 15 z 33.

Metoda map listy tworzy nową listę, uruchamiając funkcję dla każdego elementu. Dzięki niej możesz przekształcić listę danych w listę widżetów:

ListView(
  children: books.map((book) => ListTile(title: Text(book.title))).toList(),
)

(book) => ListTile(...) to krótka funkcja: przyjmuje jeden book i zwraca kafelek znajdujący się za strzałką. map wywołuje ją dla każdej książki, po kolei.

map nie zwraca jeszcze List, więc zakończ wyrażenie przez .toList(): children: wymaga listy. Kolekcja for wykonuje to samo zadanie. Użyj tego rozwiązania, które łatwiej ci się czyta; w prawdziwych aplikacjach zobaczysz oba.

map przekształca też dane w inne dane: books.map((book) => book.title).toList() to List<String> zawierająca tytuły.

challenge icon

Wyzwanie

Łatwy

Lista zawiera pięć książek, ale na ekranie wyświetlane są trzy kafelki wpisane ręcznie. Zastąp te trzy kafelki wyrażeniem books.map(...).toList(), aby każda książka miała kafelek z tytułem i autorem w podtytule.

Spróbuj swoich sił

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final List<Book> books = [
      Book('Dune', 'Frank Herbert'),
      Book('Emma', 'Jane Austen'),
      Book('Ulysses', 'James Joyce'),
      Book('Coraline', 'Neil Gaiman'),
      Book('Beloved', 'Toni Morrison'),
    ];
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(title: const Text('Books')),
        body: ListView(
          children: [
            ListTile(
              title: Text(books[0].title),
              subtitle: Text(books[0].author),
            ),
            ListTile(
              title: Text(books[1].title),
              subtitle: Text(books[1].author),
            ),
            ListTile(
              title: Text(books[2].title),
              subtitle: Text(books[2].author),
            ),
          ],
        ),
      ),
    );
  }
}

class Book {
  final String title;
  final String author;

  Book(this.title, this.author);
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Listy i ekrany

Poćwicz samodzielnie: Kompilator Flutter online