【问题标题】:How to call widget section from another file in Flutter如何从 Flutter 中的另一个文件调用小部件部分
【发布时间】:2019-12-10 10:26:15
【问题描述】:

我在 main.dart 中定义了 Method 和 Widget 部分,我的代码工作正常,

我创建了新文件 method.dart 并使用了该文件中的所有方法并在我的主文件中导入了方法并且它工作正常,

但我的问题是如何从 main.dart 中的另一个文件调用 Widget 部分。

ma​​in.dart:

如何从另一个文件中调用以下小部件:

Widget buttonSection = Container(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          _buildButtonColumn(color, Icons.call, 'CALL'),
          _buildButtonColumn(color, Icons.near_me, 'ROUTE'),
          _buildButtonColumn(color, Icons.share, 'SHARE'),
        ],
      ),
    );

可以从另一个文件调用以下方法:

Column _buildButtonColumn(Color color, IconData icon, String label) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Icon(icon, color: color),
        Container(
          margin: const EdgeInsets.only(top: 8),
          child: Text(
            label,
            style: TextStyle(
              fontSize: 12,
              fontWeight: FontWeight.w400,
              color: color,
            ),
          ),
        ),
      ],
    );
  }

在材质函数中使用:

return MaterialApp(
      title: 'Flutter layout demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter layout demo'),
        ),
        body: ListView(
          children: [
            Image.asset(
              'images/lake.jpg',
              width: 600,
              height: 240,
              fit: BoxFit.cover,
            ),

            buttonSection,

          ],
        ),
      ),
    );

【问题讨论】:

  • 我听不懂。你能分享所有带有正确描述的代码吗?
  • 如何在 main.dart 中使用 file1.dart 的小部件
  • 您可以使用文件中的类和对象来调用它们。
  • 如果可以,请举一个简单的例子。

标签: flutter flutter-layout


【解决方案1】:

要从任何文件中使用您的 buttonSection 小部件,无论是 main.dart 文件还是任何其他 dart 文件,您都必须从任何类中全局编写 buttonSection 小部件。

因此您可以访问该特定小部件。如果您在有状态或无状态类中创建它,那么您将无法访问 buttonSection 小部件。

所以创建一个 dart 文件并从所有类中添加以下小部件并全局定义。

Widget buttonSection = Container(
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: [
      _buildButtonColumn(color, Icons.call, 'CALL'),
      _buildButtonColumn(color, Icons.near_me, 'ROUTE'),
      _buildButtonColumn(color, Icons.share, 'SHARE'),
    ],
  ),
);

然后要在任何地方访问它,请导入包含 buttonSection 小部件的 dart 文件,您可以像这样使用它,

@override
  Widget build(BuildContext context) {
    return buttonSection;
  }

另外,请记住,您的小部件/变量/函数名称不应以 "_" 开头,以便从其他 dart 文件全局访问它。

【讨论】:

  • 谢谢大家都清楚,但是,你把它定义在所有类中是什么意思?
  • 无论如何,您不能在任何有状态或无状态小部件中定义小部件。否则它的范围将被限制在相应的有状态或无状态类中,你将无法直接从其他 dart 文件中访问它。
  • 如果我只是将按钮部分的代码复制并粘贴到空文件 file1.dart 中而没有应用程序主体或主要功能或没有无状态小部件,如果我在 main.dart 中调用它会起作用吗?或者我需要一次又一次地定义一切。
  • 我希望 file1.dart 中的代码最少,我只需要其中的按钮部分。有没有可能
  • 您可以访问您的 buttonSection 小部件。但是,如果您在其中谈论 _buildButtonColumn() 小部件。那么就无法访问它。你必须定义它们。
猜你喜欢
  • 2022-01-16
  • 2021-12-09
  • 2018-12-04
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多