繁体   English   中英

如何从另一个有状态小部件调用一个有状态小部件中的方法

[英]how to Call method in one stateful widget from another stateful widget

我在主页 StatefullWidget 中有一个名为Counter()的方法,我想从我的 main.dart 调用这个方法。

我正在尝试从我的 main.dart 文件中调用方法 Counter() 。 我在下面发布代码

 here is my homepage, class

    import 'package:flutter/material.dart';
    class homepage extends StatefulWidget {
      const homepage({Key? key}) : super(key: key);
    
      @override
      _homepageState createState() => _homepageState();
    }
    
    class _homepageState extends State<homepage> {
      @override
      Widget build(BuildContext context) {
        return Container();
      }
      Counter(){
        //I want to call this method from my main.dart file
      }
    }

   Here is my main.dart file
import 'package:flutter/material.dart';
        Future<void> backgroundhandller(RemoteMessage message) async {
          **Counter()** //I want to call here
            
        }
        
        void main() async {
          FirebaseMessaging.onBackgroundMessage(backgroundhandller);
          runApp(MaterialApp(
            debugShowCheckedModeBanner: false,
            title: "Taxiyee_Messaging_app",
            home: LoginScreen(),
          ));
        }

您应该将您的Counter()方法声明为static (在您的build()方法之外)。

static void Counter() {
   //Your code
}

并使用调用(记得将主页导入main.dart文件)

Future<void> backgroundhandller(RemoteMessage message) async {
      homepage.Counter();
}

这可能会有所帮助

_homepageState class 是私有的,因为前面的_你不能访问它。 但是你可以把这个方法移到homepage class 然后你可以从你导入它的任何地方调用它。

您还可以通过使用小部件 object 像这样widget.counter()_homepageState class 中使用计数器方法

这将是结束代码:

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

  void count(){
    //I want to call this method from my main.dart file
  }

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

class _HomepageState extends State<Homepage> {
  @override
  Widget build(BuildContext context) {
    
    widget.count(); // This how you use it inside your State

    return Container();
  }
  
}

以下是如何在 main.dart 文件中使用它

import 'package:flutter/material.dart';
import 'homepage.dart';

Future<void> backgroundhandller(RemoteMessage message) async {
  Homepage().count() //call it here or anywhere like this      
}
    
void main() async {
  FirebaseMessaging.onBackgroundMessage(backgroundhandller);
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    title: "Taxiyee_Messaging_app",
    home: LoginScreen(),
  ));
}

您会注意到我已经对名称进行了一些更改以遵循惯例。 类名以大写字母开头,方法/函数以小写字母开头。

暂无
暂无

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

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