如何从另一个 dart 文件调用 class

How to call class from another dart file

嗨,我很想学习 Flutter。我在这里有点困惑。我正在尝试从另一个 dart 文件调用 class。这就是我的文件结构。 例如,我的 main.dart.

中只需要这个

在 app.dart 文件中,我想调用 3 个特征,它们是 Home_screen、Parking_screen 和 Payment_screen。

在我的 homescreen.dart 中,我想调用主屏幕中的所有小部件,即 app_bar、按钮和新闻。

我不知道怎么打电话 (1)app.dart 文件,用于 3 个功能,即家庭、停车和付款 (2)homescreen.dart 主屏幕的所有小部件

如果有人能帮助我并给我一个想法,我会很高兴;(

如果您有文件 app.darthomescreen.dart,只要 app.dart 像您在图像中包含的那样包含一个导入语句,您就可以使用 public 类 和来自 homescreen.dart 的值,就好像它们已在 app.dart.
中定义一样 Public 是不以 _

开头的所有内容

例如,如果您有:

// a.dart
final String someVariable = "some variable";
final String _someOtherVariable = "another variable";

然后:

// b.dart
import './a.dart'; 
void someFunction() {
  print(someVariable); // Will work, since it's public from a.dart

  print(_someOtherVariable); // Will fail since the variable is not public.
}

上面我使用了相对导入的方式。它以不同的方式查找要从中导入的文件,但在其他方面具有相同的效果。

对于您的功能,如果它们是 Widget 类,由于您已经添加了一个 import stement,您应该可以直接在 app.dart[=19] 中使用 类 =]

根据我从问题中了解到的情况,您想实现以下目标:

  1. 想使用 app_bar、新闻、home_screen.dart、

    中“home/widgets”文件夹中的按钮
  2. 呼叫homescreen_screen.dart,payment_screen.dart, parking_screen.dart 在 app.dart

需要了解的一件事是您不能在 Scaffold() 下调用 Scaffold(),我的意思是:

假设这是 app.dart 文件:

/state building code here/{
return Scaffold(
   appBar : AppBar(),
   body : HomeScreen(),
 );
}

这是 home_screen.dart 文件:

/state building code here/{
 return Scaffold();
}

这会引发错误。相反,它应该是

/state building code here/{
 return Column() or Row() or Container() //etc...
}

(1) 表示 app.dart returns home_screen.dart where "home/widgets" 下的所有 widgtes 都排列在列中,

将此作为您的主屏幕代码:

import '' //import all necessary files including all 3 dart files from "home/widget"

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return HomeScreen();
  }
}

class HomeScreen extends StatefulWidget {
  
  HomeScreen({
    Key? key,
  }) : super(key: key);

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

class _HomeScreenState extends State<HomeScreen> {
  
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Container(height: 150, width:200, color : Colors.grey, child: AppBar_H()), //from "features/home/widget/app_barH.dart"
        Container(height: 150, width:200, color : Colors.grey, child: News()),  //from "features/home/widget/news.dart"
        Container(height: 150, width:200, color : Colors.grey, child: Button()),  //from "features/home/widget/button.dart"
      ]
    );
  }
}

这将创建一个屏幕,其中包含从 app_barH.dart、news.dart 和 button.dart

返回的 3 列

由于您已经导入了文件, 只需将容器的子项从 news.dart 或 app_barH.dart 或 button.dart

添加为 class

注意 Column() 如何有一个子 属性 而不是子,这是因为 Column 可以垂直方式包含多个小部件,而具有子 属性 的 Container() 只能接受一个小部件。 children 是列表 [].

类型

(2) 这可以通过类似于 ans (1)

的方式实现