You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何让组件获取函数执行后的更新变量值?

问题解决:Flutter中无法获取类实例更新后的变量值

问题根源

你当前的代码存在一个核心问题:每次调用FunctionCall()都会创建一个全新的类实例。

  • 在main函数里,你创建了一个FunctionCall实例并调用numberColumnFunction()更新了它的变量;
  • 但在ColumnView中调用FunctionCall()时,又新建了一个完全独立的实例,这个新实例的变量都是默认初始值,自然拿不到之前更新后的数据。

解决方案

方案一:使用单例模式(全局唯一实例)

修改FunctionCall类,让整个应用中只存在一个该类的实例:

class FunctionCall {
  // 定义全局唯一的单例实例
  static final FunctionCall _instance = FunctionCall._internal();

  // 工厂构造函数,确保每次调用FunctionCall()都返回同一个实例
  factory FunctionCall() => _instance;

  // 私有构造函数,禁止外部直接创建新实例
  FunctionCall._internal();

  int numberColumn = 3;
  int columnsPositioned = 5;
  var visibilityColumn = false;

  void numberColumnFunction(){
    if (numberColumn == 3) {
      columnsPositioned = 8;
      visibilityColumn = true;
    }
  }
}

后续代码无需修改,直接调用FunctionCall()即可获取同一个实例:

  • main函数里的调用保持不变,更新的是单例的变量;
  • ColumnView里的调用也保持不变,此时获取的是已经更新后的单例变量值。

方案二:手动传递实例(局部共享)

如果不需要全局唯一实例,也可以将初始化好的实例直接传递给ColumnView:

  1. 修改main函数,创建实例并传递给MyApp:
void main() async { 
  final functionCall = FunctionCall();
  await functionCall.numberColumnFunction();
  runApp(MyApp(functionCall: functionCall));
}
  1. 修改MyApp的构造函数,接收实例并传递给ColumnView:
class MyApp extends StatelessWidget {
  final FunctionCall functionCall;

  const MyApp({super.key, required this.functionCall});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ColumnView(functionCall: functionCall),
    );
  }
}
  1. 修改ColumnView,接收实例并使用:
class ColumnView extends StatelessWidget {
  final FunctionCall functionCall;

  const ColumnView({super.key, required this.functionCall});

  @override
  Widget build(BuildContext context) {
    return // 你的Widget结构
      // ...
      end: width / functionCall.columnsPositioned,
      visible: functionCall.visibilityColumn,
      // ...
    ;
  }
}

方案选择

  • 单例模式适合需要全局共享状态、且实例无需频繁销毁重建的简单场景;
  • 手动传递实例更灵活,适合局部模块共享状态、或者需要多个独立实例的场景。

内容的提问来源于stack exchange,提问作者Verc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43