首页 > 解决方案 > 如何在另一个 dart 文件中声明函数并到达主要变量

问题描述

这是 Flutter 默认应用的一部分。

import 'package:flutter/material.dart';

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

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 _counter = 0;
  /*
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
  */
}

这就是我想做的。

import 'package:fdgdfg/main.dart';

class Functions {
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
}

我想在另一个文件中声明函数,我想从这个文件中访问并使用主文件的变量。但我不能使用这些变量,我不能 setstate .. 我该怎么做?

标签: flutterdart

解决方案


正如我在评论中所说,您似乎对Classes文件的工作方式和导入方式有一些严重的误解。我建议您访问https://dart.dev并了解有关 Dart 语言的更多信息。

无论如何,这里有一个示例,说明如何在另一个文件上创建classwith methods、导入该文件、实例化类并在 main 上使用其方法class。请注意,您不能像您尝试的那样setState在普通 Dart 上运行。class这只能在class扩展StatefulWidgetFlutter 类的情况下完成。

import 'package:flutter/material.dart';
import 'package:my_app/my_functions.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  final MyMethods methods = MyMethods();
  
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      child: Text('Say hello'),
      onPressed: () => methods.sayHello(),
    );
  }
}

my_functions.dart

class MyMethods {
  void sayHello(){
    print('Hello');
  }
}

在继续创建 Flutter 应用程序之前,您真的应该尝试更好地了解methodsclassescontext和工作原理。StatefulWidgets


推荐阅读