小部件在不应该重建的时候

问题描述 投票:-1回答:1

所以我有一个PopUpMenuButton,它有一些选择,

PopupMenuButton(
    icon: Icon(
      Icons.tune,
      color: FortBuddyTheme.grey,
      size: 24,
    ),
    color: Colors.white,
    onCanceled: () {},
    onSelected: (int value) {
      if (selectedChart == 0) {
        setState(() {
          playlist = 'p2';
          name = 'Solo';
          color = 0xff4af699;
        });
      } else if (selectedChart == 1) {
        setState(() {
          playlist = 'p10';
          name = 'Duo';
          color = 0xFFA29BFE;
        });
      } else if (selectedChart == 2) {
        setState(() {
          playlist = 'p9';
          name = 'Squad';
          color = 0xFF0984E3;
        });
      }
    },
    itemBuilder: (_) => [
      PopupMenuItem(
        child: Text(
          'Show Solos Chart',
          style: TextStyle(
            fontFamily:
                FortBuddyTheme.fontName,
            fontSize: 16,
            letterSpacing: 0.5,
            height: 0.9,
            color:
                FortBuddyTheme.darkerText,
          ),
        ),
        value: 0,
      ),
      PopupMenuItem(
        child: Text(
          'Show Duos Chart',
          style: TextStyle(
            fontFamily:
                FortBuddyTheme.fontName,
            fontSize: 16,
            letterSpacing: 0.5,
            height: 0.9,
            color:
                FortBuddyTheme.darkerText,
          ),
        ),
        value: 1,
      ),
      PopupMenuItem(
        child: Text(
          'Show Squad Chart',
          style: TextStyle(
            fontFamily:
                FortBuddyTheme.fontName,
            fontSize: 16,
            letterSpacing: 0.5,
            height: 0.9,
            color:
                FortBuddyTheme.darkerText,
          ),
        ),
        value: 2,
      ),
    ],
  )),

它具有一些if语句,这些语句检查并设置一些变量,这些变量由窗口小部件使用,但是即使变量在setState下更改,也不会重建窗口小部件。(小部件)

MainContainer(
        animation: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
            parent: animationController,
            curve:
                Interval((1 / count) * 3, 1.0, curve: Curves.fastOutSlowIn))),
        animationController: animationController,
        title: name,
        key: UniqueKey(),
        child: LineChartSample1(
          key: UniqueKey(),
          playlist: playlist,
          title: '$name' + 's',
          color: color,
        ),
      ),

还请注意,正在通过addAllListData()函数添加小部件,该功能将所有小部件添加到列表中,稍后该列表将通过builder方法进行构建。

android flutter dart widget
1个回答
0
投票
更改您的if语句,使用value而不是selectedChart。像这样:
© www.soinside.com 2019 - 2024. All rights reserved.