如何在flutter中访问和更改来自不同文件的变量

Posted

技术标签:

【中文标题】如何在flutter中访问和更改来自不同文件的变量【英文标题】:How to access and change a variable from a different file in flutter 【发布时间】:2021-10-16 04:40:47 【问题描述】: 我正在尝试从 Flutter 中的不同文件访问和更改变量。 基本上,我创建了一个名为 ```colors.dart``` 的文件,我将在其中保存将在 Flutter 应用程序中使用的颜色数据。
import 'package:flutter/material.dart';

class colors 
  static Color bgColor = Color(0xfff8f8f8);


我希望在按下按钮时更改它的值 我在我的新文件中导入了 dart 文件,并在我的按钮的 onpressed 功能中:


MaterialApp(
      home: Scaffold(
        backgroundColor: colors.bgColor,
...

onPressed: () 
      setState(() 
    colors.bgColor = Color(0xff313131);
  );
,

bgColor.dart 内部的颜色确实会显示出来,但是当我尝试在 onPressed 上更改它(也在有状态小部件中)时,它不会更改脚手架颜色

【问题讨论】:

【参考方案1】:

如果脚手架和按钮在同一个有状态的小部件中

首先确保backgroundColor: colors.bgColorsetState 都在同一个有状态的小部件中,它应该可以工作(测试)

如果脚手架和按钮在不同的小部件中

这种方式不依赖于setState,因此您可以在无状态和有状态小部件中使用它

    将颜色类型更改为ValueNotifier<Color>

可选:使用 UpperCamelCase 的名称类型

class CustomColors 
  static ValueNotifier<Color> bgColor = ValueNotifier(const Color(0xfff8f8f8));

    使用ValueListenableBuilder 包裹脚手架并使用value 属性访问颜色
    MaterialApp(
      home: ValueListenableBuilder<Color>(
        valueListenable: CustomColors.bgColor,
        builder: (context, value, child) => Scaffold(
          backgroundColor: value,

    改变颜色:
onPressed: () 
    CustomColors.bgColor.value = Colors.red;

【讨论】:

type 'Color' 不是 'function result' 的 'ValueNotifier' 类型的子类型 @HamadMoniem 你在哪里得到这个错误,我还更新了答案,在第二步编辑了backgroundColor 的值 没关系,我只是热重启,问题就消失了。非常感谢!【参考方案2】:

您可以使用共享首选项 https://pub.dev/packages/shared_preferences/install 快速了解如何在任何地方使用

【讨论】:

【参考方案3】:

您可以使用 Provider Plugin this。

【讨论】:

【参考方案4】:
 Color changeColor = colors.bgColor

 
MaterialApp(
  home: Scaffold(
    backgroundColor: changeColor,
...

onPressed: () 
  setState(() 
changeColor = Color(0xff313131);
);
,

【讨论】:

以上是关于如何在flutter中访问和更改来自不同文件的变量的主要内容,如果未能解决你的问题,请参考以下文章

从不同的 .js 文件中访问来自 1 个 .js 源文件 (jqTree) 的变量以覆盖方法

如何在 Flutter 中缓存来自 Firebase 的图像?

如何在 Flutter 中使用 Provider 显示来自 ChangeNotifier 的错误

如何更改 Flutter 中的 ios 模拟器?

来自 Wordpress 中文本文件的 jQuery iFrame 变量

makefile : 如何链接来自不同子目录的目标文件并包含不同的搜索路径