我为正在开发的Movie Review应用程序编写了以下代码。 Movie类具有一些 bool(boolean) 属性,以确认电影是否属于特定流派,例如isRomantic。
但是,例如,以下代码无法仅显示浪漫电影,而仅显示所有movieName。
我有两个问题:

  • 我做错了什么?
  • 假设下面的代码和上面提到的预期功能是我想要的应用程序所要做的全部,那么您说我的以下代码有多有效/优化?我是Dart的新手,希望获得一些反馈。

  • 谢谢。
    class MyApp extends StatelessWidget {
      List<Movie> movieList = listOfMovieObjects().where((isRomantic) => true);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Container(
              child: ListView(
                children: createListOfMovieItems(),
              ),
            ),
          ),
        );
      }
    
      List<Widget> createListOfMovieItems() {
        List<Widget> myList = [];
        for (var i = 0; i < movieList.length; i++) {
          myList.add(buildMovieItem(movieList[i], i));
        }
        return myList;
      }
    }
    
    class Movie {
      String movieName;
      bool isRomantic;
      bool isComedy;
      bool isAction;
    
      Movie({this.movieName, this.isRomantic, this.isComedy, this.isAction});
    }
    
    List<Movie> listOfMovieObjects() {
      return <Movie>[
        Movie(movieName: '1', isRomantic: true, isComedy: true, isAction: false),
        Movie(movieName: '2', isRomantic: false, isComedy: false, isAction: true),
        Movie(movieName: '3', isRomantic: false, isComedy: true, isAction: true),
        Movie(movieName: '4', isRomantic: true, isComedy: true, isAction: true),
      ];
    }
    
    Widget buildMovieItem(Movie movie) {
      return Center(
        child: Container(
          child: Text(
            movie.movieName,
            style: TextStyle(fontWeight: FontWeight.w800, fontSize: 80.0),
          ),
          height: 100.0,
          width: double.infinity,
        ),
      );
    }
    

    最佳答案

    问题在于,在代码where((isRomantic) => true)上,“isRomantic”是分配给当前元素的名称,而不是bool属性,并且该函数始终返回true,这就是为什么要获取所有电影的原因。
    同样,.where返回一个懒惰的可迭代对象,您应该使用.toList()方法来获取过滤列表。
    试试这个:

    List<Movie> movieList = listOfMovieObjects().where((m) => m.isRomantic).toList();
    

    07-27 13:51