Flutter:另一个类/文件中的访问函数

问题描述 投票:0回答:1

在以下设置中,我将如何允许fileb.dart访问reset中的功能filea.dart

filea.dart

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test',
      theme: ThemeData(
        primaryColor: Colors.pink[200],
      ),
      home: MyHomePage(title: ''),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

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

class MyHomePageState extends State<MyHomePage>
{


  int testCount = 0;

  void test() {
    setState(() {
      testCount++;
    });
  }

fileb.dart

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

class Buttons extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Padding(
          padding: const EdgeInsets.only(bottom: 11.0, top: 20),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              FloatingActionButton(
                heroTag: "btn1",
                onPressed: () => MyHomePageState.test(),
                child: const Icon(Icons.cancel),
                splashColor: Colors.pink[900],
                backgroundColor: Colors.pink[200],
              ),
              ),
            ],
          ),
        ),
      ],
    );
  }
}

要进行这项工作,我需要更改什么?

flutter dart
1个回答
0
投票

除非您是static,否则您不能在另一个类中调用函数,并且该函数不应处理non-static / local的任何变量,否则它将出错。

另一种调用函数的方法是将其作为参数传递给页面。


0
投票

您可以通过函数回调来实现。将测试回调传递给ButtonWifget的constructor,并在fab按钮onPressed中使用该回调,如下所述的示例代码:

// In Button class 
Buttons({this.testCallback});
final Function testCallback;
 ...
 FloatingActionButton(
                heroTag: "btn1",
                onPressed: testCallback,
)

// In MyHomePage class, pass the callback wherever you have used `Buttons` widget
Buttons(testCallback:test());

希望这对您有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.