首页 > 解决方案 > 如何从另一个文件调用函数

问题描述

我有两个不同的 .dart 文件。

侧边栏文件,这个类中有一个函数来做某事

    class SideBar extends StatefulWidget {
      @override
      _SideBarState createState() => _SideBarState();
    }

    class _SideBarState extends State<SideBar>
        with SingleTickerProviderStateMixin<SideBar> { 

     void onIconPressed() {
          print('123');
      }

    }

主屏幕文件;

class HomeScreen extends StatelessWidget {
  static String routeName = "/HomeScreen";

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async => false,
      child: Scaffold(
          appBar: AppBar(
            leading: Builder(
              builder: (BuildContext context) {
                return IconButton(
                  icon: const Icon(Icons.menu),
                   onPressed: (){ }, ///////////////////////where i try to implement function
                
            

我想在另一个文件中调用这个函数。我尝试将 sidebar.dart 文件导入为侧边栏。然后调用 sidebar.onIconPressed() 之类的函数,但没有任何效果。我查看了小部件通信的东西,但无法得到它。有什么简单的方法可以解决这个问题。

编辑:我的解决方案不起作用的原因是因为我访问了具有 setstate 的 void。这就是为什么我总是收到空消息

标签: flutter

解决方案


class SideBar extends StatefulWidget {

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

    class _SideBarState extends State<SideBar>
        with SingleTickerProviderStateMixin<SideBar> { 


@override
  Widget build(BuildContext context) {
    return IconButton(
            icon: const Icon(Icons.menu),
             onPressed: (){ 
                onIconPressed();
       }, 
       
     void onIconPressed() {
          print('123');
      }

    }



class HomeScreen extends StatelessWidget {
  static String routeName = "/HomeScreen";

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async => false,
      child: Scaffold(
          appBar: AppBar(
            leading: Builder(
              builder: (BuildContext context) {
                return SideBar(....

推荐阅读