Flutter:在函数中使用 setState?

标签 flutter dart

有什么方法可以在函数中使用 setState() (第 26 行)?我试图从我的 main.dart 文件中调用函数 item (其中包括 setState),但 Flutter 不喜欢这样。此外,item 函数与 main.dart 位于不同的文件中。有人可以帮我吗?

项目功能:

    item(itemName, color, itemVariable) {
  return Container(
    color: color ? Colors.grey[200] : Colors.white,
    child: Row(
      children: [
        Flexible(
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(
              "${itemVariable}x",
              style: const TextStyle(fontSize: 25),
            ),
          ),
        ),
        Text(
          itemName,
          style: const TextStyle(fontSize: 25),
        ),
        Flexible(
          child: Padding(
            padding: const EdgeInsets.fromLTRB(30, 5, 0, 10),
            child: TextField(
              onSubmitted: (value) {
                itemVariable = int.parse(value);
                print("Hodnota pro ${itemName} nastavena na: ${itemVariable}");
                setState(() {});
              },
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                filled: true,
                enabledBorder: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(15),
                  borderSide: const BorderSide(color: Colors.blue),
                ),
                focusedBorder: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(15),
                  borderSide: const BorderSide(color: Colors.blue, width: 2),
                ),
              ),
            ),
          ),
        ),
      ],
    ),
  );
}

main.dart文件:

import 'package:flutter/material.dart';
import 'package:intr_obleceni/items.dart';
import 'package:intr_obleceni/functions.dart';

void main() => runApp(
      const MaterialApp(
        home: Main(),
        title: "Intr - seznam oblečení",
      ),
    );

class Main extends StatefulWidget {
  const Main({Key? key}) : super(key: key);

  @override
  _MainState createState() => _MainState();
}

class _MainState extends State<Main> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Internát - seznam oblečení"),
        elevation: 2,
      ),
      body: ListView(
        children: [
          category("Bundy", false),
          item("Bunda", false, Bundy.bunda),
          item("Softčílová bunda", false, Bundy.softcilovaBunda),
          category("Ostatní", true),
          item("Ručník", true, Ostatni.rucnik)
        ],
      ),
    );
  }
}

最佳答案

不要在函数中调用 setState() 函数,而是在参数中包含回调函数,如下所示:

item(itemName, color, itemVariable {Function? callback}) {

// where you used setState(), use callback()
}

然后在您调用该项目函数的 main.dart 文件中,将 setState 包装在回调函数中。

关于Flutter:在函数中使用 setState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71243912/

相关文章:

android - 在 flutter 中显示全屏加载小部件

android - 如何在 AlertDialog 消失后保留列表值

flutter - 如何访问textformfield显示的内容

flutter - 可见性小部件占用行小部件中的区域?

android - 动态添加 GridTiles 到 List<Widget>

dart - 如何打开 native 文件资源管理器以在 flutter 中定位目录?

android - 当键盘弹出时,TextField 被隐藏

dart - Flutter - Mockito 在尝试抛出自定义异常时表现得很奇怪

dart - 通过 getField 镜像获取类变量的值

iOS APP从Apple Store更新后无法成功启动