【问题标题】:How to declare function in another dart file and reach main variables如何在另一个 dart 文件中声明函数并到达主要变量
【发布时间】:2020-07-14 20:21:29
【问题描述】:

这是 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 .. 我该怎么做?

【问题讨论】:

  • 您似乎对类和导入文件的工作方式有一些严重的误解。我建议您访问 dart.dev 并了解更多有关 Dart 语言的信息。
  • 这是一个糟糕的设计。
  • 是的,我知道,但我有数百行函数。我的代码变得越来越不可读。这就是为什么我想把我的函数放在另一个文件中。
  • 您尝试过以下答案吗?如果它解决了您的问题,请将其标记为正确,并考虑为可见性投票。

标签: flutter dart


【解决方案1】:

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

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

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 应用程序之前,您应该真正尝试更好地了解 methods、classes、context 和 StatefulWidgets 的工作原理。

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多