簡體   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