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