function - Flutter:如何从另一个类调用方法?

标签 function flutter dart

我是Dart和Flutter的新手。现在我在从另一个类调用方法时遇到了问题。

我试图使该方法静态化,但是该方法包含setState()方法,因此这是不可能的。

所以我必须从main.dart调用showDialogWith() >>> wallet.dart
主镖

import 'package:flutter/material.dart';
import 'dialog/operation.dart';
import 'pages/wallet.dart';

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

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future showDialogWith(String dialogName) async {
    Widget dialog;
    switch (dialogName) {
      case 'operations':
        setState(() {
          dialog = OperationsDialog();
        });
        break;
        // another cases and default...
    }
    await showDialog(
        context: context,
        child: dialog,
    );
  }

  @override
  Widget build(BuildContext context) {
   body: WalletContent();
  }
}

钱包。 Dart
class WalletContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialButton(
      onPressed: () {
        // here I have to call the 'showDialogWith()' method
      },
    );
  }
}

操作箭
class OperationsDialog extends StatefulWidget{
  OperationsDialog({Key key}) : super(key: key);

  @override
  _OperationDialogState createState() => new _OperationDialogState();
}

class _OperationDialogState extends State<OperationsDialog> {

  @override
  Widget build(BuildContext context) {
    return new SimpleDialog(
      title: new Text('Операции', textAlign: TextAlign.center),
    );
  }
}

最佳答案

您可以将函数作为参数传递。

@override
  Widget build(BuildContext context) {
  body: WalletContent(showDialogWith);
}

将功能字段添加到WalletContent中,并将其分配给MaterialButton
class WalletContent extends StatelessWidget {
  WalletContent(this.onPressed);

  final Function onPressed;

  @override
  Widget build(BuildContext context) {
    return MaterialButton(
      onPressed: () => onPressed(...), // Pass your desired string here
    );
  }
}

关于function - Flutter:如何从另一个类调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522028/

相关文章:

c++ - 绑定(bind)类方法并将其作为函数指针传递

javascript - javascript 中的 onclick 在 css 中激活

android - Graphql-Flutter问题:配置项目 ':connectivity'时出现问题

firebase - 是否有 Firestore 的 Dart 接口(interface) - 使用 https ://firebase. google.com/docs/firestore/quickstart 中的 API?

c - 我的 int isMember() 上的循环函数

c - 将二维字符串数组传递给函数?

regex - hh :mm:ss format in TextFormField or TextField without using pickers 中的 Flutter 输入时间

firebase - 如何获取文档列表而不在Flutter Cloud Firestore中监听更改?

dart - 如何在 dart 中将 Stream<T> 转换为 Stream<E>

flutter - Flutter中如何使用RSSI对蓝牙设备进行排序