Dart: ánh xạ danh sách (list.map)


Câu trả lời:


139

bạn có thể dùng

moviesTitles.map((title) => Tab(text: title)).toList()

thí dụ:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),

14
Tại sao chúng ta cần toList?
onmyway133

2
@ onmyway133 vì câu hỏi là về lập bản đồ danh sách
AbdulMomen عبدالمؤمن Ngày

4
@AbdulMomen عبدالمؤمن Tôi tin rằng câu hỏi là tại sao nó lại cần ngay từ đầu. Trong Swift, ánh xạ một Mảng <E> trả về một Mảng <R> của kiểu kết quả mới. Tại sao kết quả của ánh xạ Danh sách Dart <E> không phải là một danh sách?
Michael Long

14
@MichaelLong bởi ở đây, trong Dart, map<T>trả về một Iterable<T>thay vì aList<T>
AbdulMomen عبدالمؤمن

41
Cái Iterableđó map()trả về là lười biếng. Nó chưa được đánh giá, chỉ khi ai đó thực sự lặp lại nó. Việc gọi toList(), ngoài việc trả về một danh sách thực tế, buộc đánh giá này.
Gábor

19

Tôi mới xao xuyến. Tôi thấy rằng một người cũng có thể đạt được nó theo cách này.

 tabs: [
    for (var title in movieTitles) Tab(text: title)
  ]

Lưu ý: Nó yêu cầu phiên bản sdk phi tiêu phải> = 2.3.0, xem tại đây


3

Tôi thử cùng một phương pháp này, nhưng với một danh sách khác với nhiều giá trị hơn trong bản đồ hàm. Vấn đề của tôi là quên một báo cáo trả lại. Cái này rất quan trọng :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),

1
Đó là vì hàm của bạn được khai báo với {}câu hỏi là hàm một dòng
Mehrdad Shokri

1

Có, bạn cũng có thể làm theo cách này

 List<String> listTab = new List();
 map.forEach((key, val) {
  listTab.add(val);
 });

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),

0
...data.map((title) { return Text(title);}).toList(),

Nó làm việc tốt cho tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.