Как добавить элемент списка постучавших в Favorite_Item_Page - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть этот кусок кода. Он содержит список стран с любимой иконкой перед каждым листом списка. Я хочу, чтобы постучавший текст сохранялся / не сохранялся в Favorite_Page. Я пробовал это много раз, но не мог получить то, что я действительно хочу сделать. Пожалуйста, объясните весь код, если это возможно.

import 'package:flutter/material.dart';
    void main() => runApp(MyApp());
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text("Favorite Item"),
            ),
            body: FavoriteScreen(),
          ),
          initialRoute: '/',
          routes: {
            '/': (ctx) => FavoriteItem(),
          },
        );
      }
    }
    class FavoriteItem extends StatefulWidget {
      @override
      _FavoriteItemState createState() => _FavoriteItemState();
    }
    class _FavoriteItemState extends State<FavoriteItem> {
      static final List<String> countryList = [
        'India',
        'America',
        'Australia',
        'Russia',
        'Japan',
        'China',
        'Nepal',
      ];
      List<bool> _isFavorited = List.filled(countryList.length, false);
      @override
      Widget build(BuildContext context) {
        return Center(
          child: ListView.builder(
            itemCount: countryList.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(
                  countryList[index],
                ),
                trailing: IconButton(
                  onPressed: () =>
                      setState(() => _isFavorited[index] = !_isFavorited[index]),
                  icon: _isFavorited[index]
                      ? Icon(Icons.favorite)
                      : Icon(Icons.favorite_border),
                ),
              );
            },
          ),
        );
      }
    }

1 Ответ

0 голосов
/ 17 апреля 2020

(я француз, поэтому я, возможно, допустил некоторые ошибки в своем ответе: извините)

Этот фрагмент кода просто инициализирует список стран. Список _isFavorited заполнен ложью в начале. Это означает, что, нажимая на элемент, вы просто устанавливаете значение true в позиции страны в _isFavorited. Я объясню на примере со списком стран ['Япония', 'США', 'Франция'], _isFavorited = [false, false, false]. Если я нажму на США, _isFavorited будет равно [false, true, false]. Ваш фрагмент кода сохраняет это, но не текст, как вы просили ..

Вы можете попробовать это:

 List <String> _isFavorited=[];
 ...
 setState(){
    if (_isFavorited.contains(countryList[index])){
       _isFavorited.remove(country[index]);
    }else{
       _isFavortied.add(country[index]);
    }
 }    

В результате у вас может быть список с именем _isFavorited и названием страны, которая вам понравилась. Вы можете печатать этот список каждый раз, когда нажимаете на страну, чтобы проверить, работает ли она! Это то, что вы искали?

Надеюсь, это может помочь вам!

...