【问题标题】:How to access and change a variable from a different file in flutter如何在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 上更改它(也在有状态小部件中)时,它不会更改脚手架颜色

【问题讨论】:

    标签: android flutter oop user-interface scaffolding


    【解决方案1】:

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

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

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

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

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

    可选:使用 UpperCamelCase 的名称类型

    class CustomColors {
      static ValueNotifier<Color> bgColor = ValueNotifier(const Color(0xfff8f8f8));
    }
    
    1. 使用ValueListenableBuilder 包裹脚手架并使用value 属性访问颜色
        MaterialApp(
          home: ValueListenableBuilder<Color>(
            valueListenable: CustomColors.bgColor,
            builder: (context, value, child) => Scaffold(
              backgroundColor: value,
    
    
    1. 改变颜色:
    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);
        });
        },
        

        【讨论】:

          猜你喜欢
          • 2012-09-19
          • 1970-01-01
          • 2017-01-08
          • 1970-01-01
          • 1970-01-01
          • 2021-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多