我有类似的东西,我试了这么多方法,但不能像我想的那样调用函数.

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

  @override
  State<PageTest> createState() => PageTestState();
}

class PageTestState extends State<PageTest> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: topMyBar(),
      body: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [PageTestList()],
        ),
      ),
      floatingActionButton: floatingButton(),
    );
  }

  Widget floatingButton() {
    return FloatingActionButton.extended(
      onPressed: () {
        CALL pageTestListFunction() AND SETSTATE ON _PageTestListState;
      },
      backgroundColor: AppColors.status_ready,
      label: Text(
        'OK',
        style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
      ));
  }
}

-- END HERE --

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

  @override
  State<PageTestList> createState() => _PageTestListState();
}

class _PageTestListState extends State<PageTestList> {...
  Future<bool> pageTestListFunction() async {...}
}

有没有一种方法,当在FloatingActionButton上调用onPress,然后在PageTestList上调用setState时,从PageTestList调用函数?

谢谢!

推荐答案

在您的小部件中使用全局键.

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

  @override
  State<PageTest> createState() => PageTestState();
}

class PageTestState extends State<PageTest> {
  final _globalkey = GlobalKey<PageTestListState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: topMyBar(),
      body: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [PageTestList(key:_globalkey)],
        ),
      ),
      floatingActionButton: floatingButton(),
    );
  }

  Widget floatingButton() {
    return FloatingActionButton.extended(
        onPressed: () {
          //CALL pageTestListFunction() AND SETSTATE ON _PageTestListState;
          _globalkey.currentState?.pageTestListFunction();
        },
        backgroundColor: AppColors.status_ready,
        label: const Text(
          'OK',
          style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
        ));
  }
}


class PageTestList extends StatefulWidget {
  const PageTestList({Key? key}) : super(key: key);
  @override
  State<PageTestList> createState() => PageTestListState();
}

class PageTestListState extends State<PageTestList> {
  var color = Colors.red;
  void pageTestListFunction() async {
    setState(() {
      color = Colors.green;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color,
      width: 100,
      height: 100,
    );
  }
}

Flutter相关问答推荐

如何在Flutter的easy_translation包中链接嵌套的链接翻译?

我的flutter代码显示一个小部件被认为是死代码,为什么?

Flutter 翼doctor 显示的错误,我似乎不能修复.问题:系统32、Android工具链、Windows 10 SDK

如何处理Flutter Riverpod异步通知器中的状态和数据库

我不能在Fighting中裁剪图片输入错误,否则应用程序会崩溃

设置Flutter 中的ListView.Builder()的最小高度

如何使文本表格域在抖动中变圆?

有没有方法可以从当前时间轻松计算TimeStamp?

如何确定Flutter 中的文本 colored颜色 ?

Wired Firebase错误-[CLOUD_FIRESTORE/UNAvailable]该服务当前不可用

为什么用户界面不会在Flight中的复选框中更改?

火焰Flutter 在多个向量之间插补2

Flutter在CustomPainter的右上角和左上角添加了2条曲线

在 Flutter 中使用条件语句设置 ImageProvider Object 类型的背景图像

Flutter中如何实现带有变化图标的浮动操作按钮?

我想在文本结束后显示分隔线.它会在第一行、第二行或第三行结束

如何从另一个页面访问 Firebase 值?

Android Electric eel Mac M1:运行 flutter doctor -v 时无法找到Bundle 的 java 版本

如何在 flutter 中使用 tabbar 作为底部导航栏?

如何扫描来自给定链接或按钮的重定向中的所有 URL?