flutter 使用PageView更改容器颜色,构建器索引和使用颜色列表设置状态

6qftjkof  于 2023-05-01  发布在  Flutter
关注(0)|答案(1)|浏览(104)

所有我需要的是主要的父容器是改变颜色时,用户转到不同的页面,但无论我尝试它不会改变。

class AppCardColors {
  static Color? orange = Colors.orange[500];
  static Color? blue = Colors.blue[700];
  static Color? red = Colors.red[600];

  static List<Color?> colorsList = [
    Colors.orange[500],
    Colors.blue[700],
    Colors.red[600],
  ];
}

上面的类是我从中获得我想要的颜色的类,正如你所看到的,我想要colorsList变量中的颜色。

//ignore: must_be_immutable
class MyWidget extends StatefulWidget {
  MyWidget({required this.child, Key? key}) : super(key: key);
  Widget child;

  @override
  State<MyWidget createState() => _MyWidgetState();
}

class _QuestionMainTemplateState extends State<QuestionMainTemplate> {
  @override
  Widget build(BuildContext context) {
    PageController pageController = PageController();
    int colorIndex = 0;

    return Scaffold(
      body: SizedBox(
        height: double.maxFinite,
        width: double.maxFinite,
        child: Stack(
          alignment: Alignment.center,
          children: [
            Container(
              width: double.maxFinite,
              height: double.maxFinite,
              color: AppCardColors.colorsList[colorIndex], //where i want the color to change
            ),
            Positioned(
              left: 20,
              top: 50,
              child: IconButton(
                onPressed: () {},
                icon: const Icon(
                  color: Colors.white,
                  size: 30,
                  Icons.exit_to_app_rounded,
                ),
              ),
            ),
            Positioned(
              top: 125,
              child: Container(
                width: MediaQuery.of(context).size.width,
                height: 5000,
                child: PageView.builder(
                    controller: pageController,
                    onPageChanged: (index) {
                      setState(() {
                        colorIndex = index % AppCardColors.colorsList.length;
//where the color is chnaged
                        print(colorIndex);
                      });
                    },
                    itemCount: 5,
                    itemBuilder: (_, index) => IrrelevantWidget()),
              ),
            ),
          ],
        ),
      ),
    );
  }
}`

我尝试了各种各样的方法来分配不同的颜色,但没有任何工作,直到现在

dbf7pr2w

dbf7pr2w1#

您可以尝试在每次页面更改时触发的pageController中添加侦听器

// page controller init
pageController = PageController(initialPage: widget.index)
  ..addListener(() {
    // update image index
    currentImage = pageController.page!.toInt();

    // // start the animation
    // animationController!.reset();
    // animationController!.forward();

    setState(() {});
  });

记住在initState方法中添加侦听器

相关问题