Flutter 构建一个构造函数,以便在页面视图上滚动到其他页面时调用列表中的项

Flutter 构建一个构造函数,以便在页面视图上滚动到其他页面时调用列表中的项,flutter,flutter-pageview,Flutter,Flutter Pageview,我是一个初学者,正在尝试构建一个构造函数来设置列表项,当滚动到下一页时,getter调用它们在页面视图中查看。我尝试了太多的事情,但都失败了。即使避免直接帮助提高自己,我还是被困在这里,需要帮助 import 'package:flutter/material.dart'; class Card { String image, name; Card({this.image, this.name}); } class CardBrain { List<Card> _c

我是一个初学者,正在尝试构建一个构造函数来设置列表项,当滚动到下一页时,getter调用它们在页面视图中查看。我尝试了太多的事情,但都失败了。即使避免直接帮助提高自己,我还是被困在这里,需要帮助

import 'package:flutter/material.dart';

class Card {
  String image, name;

  Card({this.image, this.name});
}

class CardBrain {
  List<Card> _cardData = [
    Card(image: 'images/item1.jpg', name: 'item1'),
    Card(image: 'images/item2.jpg', name: 'item2'),
  ];

  String getCard() {
    return _cardData[_cardNumber].image;
  }

  String getname() {
    return _cardData[_cardNumber].name;
  }

  int _cardNumber = 0;

  void nextCard(int itemNumber) {
    if (_cardNumber == 0;){
      itemNumber++;
    }

  }
}
 
class Images extends StatefulWidget {
  @override
  _ImagesState createState() => _ImagesState();
}

class _ImagesState extends State<Images> {
  PageController pageController = PageController();

  @override
  Widget build(BuildContext context) {
    return Container(
      child: PageView(
        onPageChanged: cardBrain.nextStory(1),
        controller: pageController,
        children: <Widget>[
          Container(
            color: Colors.white,
            child: Column(
              children: <Widget>[
                Image.asset(cardBrain.getCard(), fit: BoxFit.fitWidth),
                Text(cardBrain.getname(), ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
班级卡{
字符串图像、名称;
卡片({this.image,this.name});
}
卡德布莱恩班{
列表_cardData=[
卡片(图像:'images/item1.jpg',名称:'item1'),
卡片(图像:'images/item2.jpg',名称:'item2'),
];
字符串getCard(){
返回cardData[cardNumber].图像;
}
字符串getname(){
返回_cardData[_cardNumber].name;
}
int cardNumber=0;
void nextCard(int itemNumber){
如果(_cardNumber==0;){
itemNumber++;
}
}
}
类图像扩展了StatefulWidget{
@凌驾
_ImagesState createState()=>\u ImagesState();
}
类_ImagesState扩展状态{
PageController PageController=PageController();
@凌驾
小部件构建(构建上下文){
返回容器(
子:页面视图(
更改网页:cardBrain.nextStory(1),
控制器:页面控制器,
儿童:[
容器(
颜色:颜色,白色,
子:列(
儿童:[
Image.asset(cardBrain.getCard(),fit:BoxFit.fitWidth),
文本(cardBrain.getname(),),
],
),
),
],
),
);
}
}

首先,您应该使用
final
来确保公共成员变量不会被任意更改。此外,尽量使用构造函数:

class Card {
  final String image;
  final String name;

  const Card({
    this.image, 
    this.name
  });
}
考虑重写
toString()
,这对调试也很有用。使用getter而不是
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++;
    }
  }
}
请注意,
onPageChanged
需要传递一个函数,以便您可以使用(就像我上面所做的那样)<代码>索引是一个整数。使用getter,语法也会更改:

children: <Widget>[
  Image.asset(cardBrain.card, 
    fit: BoxFit.fitWidth
  ),
  Text(cardBrain.name),
],

首先,您应该使用
final
,以确保公共成员变量不会被任意更改。此外,尽量使用构造函数:

class Card {
  final String image;
  final String name;

  const Card({
    this.image, 
    this.name
  });
}
考虑重写
toString()
,这对调试也很有用。使用getter而不是
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++;
    }
  }
}
请注意,
onPageChanged
需要传递一个函数,以便您可以使用(就像我上面所做的那样)<代码>索引是一个整数。使用getter,语法也会更改:

children: <Widget>[
  Image.asset(cardBrain.card, 
    fit: BoxFit.fitWidth
  ),
  Text(cardBrain.name),
],

谢谢帮助很大,但在页面视图中滚动时仍无法进入第二个屏幕项目onPageChanged:(index)=>cardBrain.nextStory(1),“这应该是”cardBrain.nextCard(1)”我忘了编辑。即使在编辑之后,也没有得到下一张卡片的筛选。谢谢!帮助很大,但在页面视图中滚动时仍无法进入第二个屏幕项目onPageChanged:(index)=>cardBrain.nextStory(1),“这应该是”cardBrain.nextCard(1)”我忘了编辑。即使在编辑后,也不能筛选下一张卡片。