简体   繁体   English

Flutter - 如何调用这个 function?

[英]Flutter - How to call this function?

I have something like that, I tried so many ways and can't call the function like I want.我有类似的东西,我尝试了很多方法,不能像我想要的那样调用 function。

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 {...}
}

Is there a way to call the function from PageTestList when onPressed on floatingActionButton is called and then setState on PageTestList?当 onPressed on floatingActionButton 被调用然后 setState 在 PageTestList 上时,有没有办法从 PageTestList 调用 function?

Thank's!谢谢!

Use a global key in your widget.在小部件中使用全局键。

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,
    );
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM