Flattern: Filterliste gemäß einer bestimmten Bedingung

75

Ich habe eine Liste von Filmen. Das enthält alle animierten und nicht animierten Filme. Um festzustellen, ob es animiert ist oder nicht, gibt es ein Flag namens isAnimated .

Ich möchte nur Animationsfilme zeigen. Ich habe Code geschrieben, um nur Animationsfilme herauszufiltern, aber es wurde ein Fehler angezeigt.

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(

        primarySwatch: Colors.blue,
      ),
      home: new HomePage(),
    );
  }
}

class Movie {
  Movie({this.movieName, this.isAnimated, this.rating});
  final String movieName;
  final bool isAnimated;
  final double rating;
}

List<Movie> AllMovies = [
  new Movie(movieName: "Toy Story",isAnimated: true,rating: 4.0),
  new Movie(movieName: "How to Train Your Dragon",isAnimated: true,rating: 4.0),
  new Movie(movieName: "Hate Story",isAnimated: false,rating: 1.0),
  new Movie(movieName: "Minions",isAnimated: true,rating: 4.0),
];



class HomePage extends StatefulWidget{
  @override
  _homePageState createState() => new _homePageState();
}


class _homePageState extends State<HomePage> {

  List<Movie> _AnimatedMovies = null;

  @override
  void initState() {
    super.initState();
    _AnimatedMovies = AllMovies.where((i) => i.isAnimated);
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Container(
        child: new Text(
            "All Animated Movies here"
        ),
      ),
    );
  }
}

WhereIterable <Object> ist kein Subtyp vom Typ List <Object>

Tushar Pol
quelle

Antworten:

181

toList() fehlt, um das Ergebnis zu materialisieren

_AnimatedMovies = AllMovies.where((i) => i.isAnimated).toList();
Günter Zöchbauer
quelle
Freut mich zu hören: D
Günter Zöchbauer
2
Keine Arbeit hier :(. Es heißt Typ 'Where Iterable <>' ist kein Subtyp vom Typ 'List
Saeesh Tendulkar
4
Wenn Sie eine ListErgänzung benötigen.toList()
Günter Zöchbauer
1

Dabei gibt die Funktion in einer Liste Iterable zurück. Sie müssen es mit der Funktion List.from (Iterable) in List konvertieren.

Im obigen Szenario sollten Sie also das folgende Codefragment verwenden.

Iterable _AnimatedMoviesIterable = AllMovies.where ((i) => i.isAnimated);

_AnimatedMovies = List.from (_AnimatedMoviesIterable);

Gavara.Suneel
quelle
2
Iterables haben eine toList()Methode, die meiner Meinung nach viel einfacher zu lesen ist.
Günter Zöchbauer
1

Sie können die toList () -Methode verwenden, um Ihre gewünschte Ausgabe wie folgt zu erhalten

toList()Sammelt alle Elemente dieses Streams in a List.

So beheben Sie das oben genannte Problem:

Add a toList()(Dieser Code erstellt a List<dynamic>)

_AnimatedMovies = AllMovies.where((i) => i.isAnimated).toList();

Anstatt von

_AnimatedMovies = AllMovies.where((i) => i.isAnimated);

Geben Sie hier die Bildbeschreibung ein

Paresh Mangukiya
quelle