Прежде всего, вы должны использовать final
, чтобы гарантировать, что переменные-члены publi c не будут изменены произвольно. Вдобавок постарайтесь максимально использовать конструкторы const
:
class Card {
final String image;
final String name;
const Card({
this.image,
this.name
});
}
Рассмотрите возможность переопределения toString()
, что также может быть полезно для отладки. Используйте геттеры вместо getX()
, поскольку мы не на Java (или на любом другом языке без свойств). Это выглядит лучше:
class CardBrain {
var _cardData = <Card>[
Card(image: 'images/item1.jpg', name: 'item1'),
Card(image: 'images/item2.jpg', name: 'item2'),
];
var _cardNumber = 0;
String get card => _cardData[_cardNumber].image;
String get name => _cardData[_cardNumber].name;
void nextCard(int itemNumber) {
if (_cardNumber == 0){
itemNumber++;
}
}
}
Я предпочитаю использовать var
и final
для автоматического определения типа, но это не обязательно. См. do c. У вас также есть некоторые проблемы с виджетом:
onPageChanged: cardBrain.nextStory(1), // NO
onPageChanged: (index) => cardBrain.nextStory(1), // OK
Обратите внимание, что onPageChanged
требует передачи функции, поэтому вы можете использовать анонимную функцию (как я сделал выше). index
- целое число. При использовании геттеров синтаксис также изменяется:
children: <Widget>[
Image.asset(cardBrain.card,
fit: BoxFit.fitWidth
),
Text(cardBrain.name),
],
Ваш код не показывает, что делает nextStory(int)
, и мы также не знаем, где cardBrain
был объявлен. Вы можете инициализировать их так:
class _ImagesState extends State<Images> {
final cardBrain = CardBrain();
final pageController = PageController();
// other code...
}