Построитель списков Flutter изменит цвет кнопки

#android #flutter #dart

Вопрос:

Я создаю приложение для просмотра фильмов. Я сделал свое приложение таким:

  1. Главный.dart, который запускает проект и содержит весь процесс Tmdb (База данных фильмов)
  2. Root_page.dart, которые содержат все «неподвижные» элементы (панель приложений, нижняя панель навигации, просмотр страницы…)
  3. Посылка.dart, которые содержат все переменные и ресурсы моего проекта ()
  4. Файлы страниц (домашняя страница.dart, избранная страница.dart…)(Обратите внимание, что мой проект еще не завершен).

(Извините, если вы не понимаете какой-то текст, это потому, что мое приложение на французском языке)

Мой Макет Figma

Так вот в чем моя проблема :

Я сделал список карт, которые показывают последние фильмы в кинотеатре (с помощью Tmdb (

 class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    loadmovies();
    super.initState();
  }

  loadmovies() async {
    TMDB tmdbWithCustomLogs = TMDB(ApiKeys(apikey, readaccesstoken),
        logConfig: ConfigLogger(showLogs: true, showErrorLogs: true));
    Map latestresult = await tmdbWithCustomLogs.v3.movies.getNowPlaying();
    setState(() {
      latestmovies = latestresult['results'];
    });
  }

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: RootPage(),
    );
  }
}
 

) ). Я хотел добавить «любимую кнопку» (проверьте мой макет figma).

Проблема в том, что я использовал ListView.builder (), поэтому, когда я добавил кнопку и ontap (), все кнопки одновременно изменили цвет.

Это моя домашняя страница.dart:

 class _HomePageState extends State<HomePage> {
  int _selectedIndex = 0;

  _onSelected(int index) {
    setState(() => _selectedIndex = index);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: [
              Container(
                  //subtitle
                  margin: const EdgeInsets.only(top: 70, left: 16),
                  child: Text(
                    dAppTitle,
                    style: GoogleFonts.kanit(
                        fontWeight: FontWeight.w400,
                        color: dLightGray,
                        fontSize: 20),
                  )),
              Container(
                  //title
                  margin: const EdgeInsets.only(left: 16),
                  child: Text(
                    dHomePageMoviesSubTitle,
                    style: GoogleFonts.kanit(
                        fontWeight: FontWeight.w400,
                        color: Colors.black,
                        fontSize: 24),
                  )),
              Container(
                  //cards
                  margin: const EdgeInsets.only(top: 5),
                  height: 250,
                  child: ListView.builder(
                      itemBuilder: (context, index) => Container(
                          height: 100,
                          width: 150,
                          margin: const EdgeInsets.all(8),
                          decoration: const BoxDecoration(
                            borderRadius: BorderRadius.all(Radius.circular(25)),
                            boxShadow: [
                              BoxShadow(
                                  color: Colors.black38,
                                  spreadRadius: 0,
                                  blurRadius: 10)
                            ],
                          ),
                          child: ClipRRect(
                              borderRadius:
                                  const BorderRadius.all(Radius.circular(25)),
                              child: Stack(children: [
                                Flexible(
                                    child: Image(
                                        image: NetworkImage(
                                            'https://image.tmdb.org/t/p/w500'  
                                                latestmovies[index]
                                                    ['poster_path']),
                                        fit: BoxFit.cover)),
                                IconButton(
                                  onPressed: () => setState(
                                      () => pressAttention = !pressAttention),
                                  icon: const Icon(Icons.star_rounded),
                                  color: _selectedIndex == index
                                      ? Colors.red
                                      : Colors.white,
                                  iconSize: 35,
                                )
                              ]))),
                      scrollDirection: Axis.horizontal,
                      itemCount: latestmovies.length)),
              Container(
                  //title
                  margin: const EdgeInsets.only(left: 16),
                  child: Text(
                    dHomePageCinemaSubtitle,
                    style: GoogleFonts.kanit(
                        fontWeight: FontWeight.w400,
                        color: Colors.black,
                        fontSize: 20),
                  )),
              ListView.builder(
                padding: const EdgeInsets.only(top: 5),
                itemCount: 5,
                physics: const NeverScrollableScrollPhysics(),
                shrinkWrap: true,
                itemBuilder: (context, index) => const ListTile(
                    title: Text(dCinemaTileName),
                    subtitle: Text(dCinemaTileAdress),
                    leading: SizedBox(
                        height: 50,
                        width: 50,
                        child: ClipRRect(
                          borderRadius: BorderRadius.all(Radius.circular(10)),
                          child: Image(
                            image: AssetImage('images/cinema.jpg'),
                            fit: BoxFit.cover,
                          ),
                        ))),
              )
            ]),
      ),
    );
  }
}