如何在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.bgColor
和setState
都在同一个有状态的小部件中,它应该可以工作(测试)
如果脚手架和按钮在不同的小部件中
这种方式不依赖于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' 的 'ValueNotifierbackgroundColor
的值
没关系,我只是热重启,问题就消失了。非常感谢!【参考方案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 的错误