【问题标题】:Why is my star system isnt work in flutter为什么我的星系统不能在颤振中工作
【发布时间】:2021-08-13 07:34:32
【问题描述】:

这是我让星星始终变黄变灰的代码,但没有奏效。为什么?

Widget placeButton(BuildContext context, String name, String image, String id) {
      var color;
      var isClicked = true;
      return Column(children: [
        Padding(
          padding: const EdgeInsets.fromLTRB(130.0, 0.0, 130.00, 0.0),
          child: ClipRRect(
            borderRadius: BorderRadius.circular(20),
            child: SizedBox(
              height: 300,
              width: 400,
              child: GestureDetector(
                onTap: () {
                  Navigator.pushNamed(context, id);
                },
                child: Card(
                  child: ListTile(
                    title: Padding(
                      padding: const EdgeInsets.fromLTRB(20, 5, 20, 0),
                      child: Text(AppLocalizations.of(context)!.translate(name),
                          style: TextStyle(fontFamily: 'Manrope', fontSize: 18)),
                    ),
                    subtitle: Image.network(
                      image,
                      height: 250,
                    ),
                  ),
                ),
              ),
            ),
          ),
        ),
        Container(
          height: 40,
          width: 200,
          padding: EdgeInsets.only(top: 0),
          color: Colors.white,
          child: ListTile(
            leading: Text(
              "Rating:",
              style: TextStyle(fontFamily: 'Klasik'),
            ),
            trailing: IconButton(
              splashRadius: 20,
              icon: Icon(Icons.star_border_outlined, color: color),
              
              onPressed: () {
                if (isClicked) {
                  color = Colors.grey;
                  isClicked = !isClicked;
                } else {
                  color = Colors.yellow;
                  isClicked = !isClicked;
                }
              },
            ),
          ),
        ),
      ]);
    }

P/S:请随时向我询问以下代码。我试过 setState 但它没有用。它返回如下错误: 未定义函数“setState”。 尝试导入定义“setState”的库,将名称更正为现有函数的名称,或定义名为“setState”的函数。

【问题讨论】:

  • 显示完整的小部件代码,不仅是 placebutton 代码。没有它,我会说 setState 不适合你,因为你的小部件不是 StatefulWidget
  • 这能回答你的问题吗? The function setState is not defined. Flutter
  • 不,我不能让它工作
  • 显示完整代码。

标签: flutter dart setstate


【解决方案1】:

setState 仅在StatefulWidget 范围内可用。您可能希望将 StatelessWidget 更改为有状态的。完成后,您需要在build 方法或从build 调用的任何其他方法(例如本例中的placeButton)之外引入变量color 和isClicked。然后,您可以致电 setState 并更改这些值。

这是一个简化的例子

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  // Define these outside of your build method
  Color color = Colors.grey;
  bool isClicked = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: placeButton(context, 'name', 'image', 'id')),
    );
  }

  Widget placeButton(
    BuildContext context,
    String name,
    String image,
    String id,
  ) {
    // rest of your function...
    onPressed: () {
      // Use setState to change the values
      setState(() {
        if (isClicked) {
          color = Colors.grey;
          isClicked = !isClicked;
        } else {
          color = Colors.yellow;
          isClicked = !isClicked;
        }
      });
    },
  }
}

当使用setState 时,Flutter 将再次运行build 函数并注意到color 和isClicked 的值发生了变化,并使用这些新值来更新UI。

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2021-03-13
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多