【问题标题】:Passing variable value from state to another widget将变量值从状态传递到另一个小部件
【发布时间】:2021-01-17 14:47:02
【问题描述】:

我正在处理一个简单的案例,如果有人可以在这里提供帮助,那就太好了。

假设我有一些stateful widget。在它的状态下,我定义了一个变量(可能是任何类型),这个变量后来通过setState() 方法更改,我根据某些特定标准动态分配它的值。到目前为止,一切都在一个班级内进行。

如果我想从另一个类(完全不同的page)访问这个变量的值,如果它的值改变了,重建它怎么办?你能不能也给我一些例子?

提前致谢!

【问题讨论】:

  • Balaji 是正确的,他在下面的回答是正确的,提供者是您如何做到这一点的一个例子。但是您正在触及相当大的状态管理主题,并且有多种选择可供您使用。可以在此处找到指向 Flutter 中状态管理方法列表的链接:flutter.dev/docs/development/data-and-backend/state-mgmt/…
  • 感谢您的回答。我可能没有认真地表达自己。假设我有一些名为 LoginPage 的有状态小部件,然后在 _LoginPageState 中我定义了一个 bool 变量,该变量在基于 crateria 的 setstate 内更改。然后,如果这个值发生变化,我想将该值传递给另一个页面,例如主页?你能告诉我示例代码吗?
  • @NetworkingFreak,我们得到了这个问题。但我们只有状态管理作为传递数据的选项。您也可以尝试从 Flutter 中获取 InheritedWidget

标签: android flutter dart mobile


【解决方案1】:

这正是 State MANAGEMENT 存在的原因。 通过您的应用程序管理您的状态。 有许多不同的选项可供选择 看: https://flutter.dev/docs/development/data-and-backend/state-mgmt/options

【讨论】:

  • 感谢您的回答。我可能没有认真地表达自己。假设我有一些名为 LoginPage 的有状态小部件,然后在 _LoginPageState 我定义了一个 bool 变量,该变量在 setstate 中基于 crateria 进行更改。然后,如果这个值发生变化,我想将该值传递给另一个页面,例如主页?可以给我看看示例代码吗?
  • 我想将值从状态传递到另一个类而不是状态。
  • 在这种情况下,您可以使用其构造函数将变量注入下一个类或页面但是如果您想将此变量传递给父类或小部件怎么办,这就是您需要使用状态管理的原因解决方案与@balaji 示例中解释的完全一样,请注意他在中性类中定义变量,或者更好的说法是使用提供者和inheritedWidget 的状态持有类,然后您可以从小部件树的任何位置访问此变量。
【解决方案2】:

在这种情况下,您可以使用 provider 包。 在yaml 文件中添加, provider: ^4.3.2+4

class HomeApp extends StatefulWidget {
  @override
  _HomeAppState createState() => _HomeAppState();
}

class _HomeAppState extends State<HomeApp> {
  Counter _counterProvider;

  @override
  void initState() {
    super.initState();
    _counterProvider = Provider.of(context, listen: false);
  }

  void updateCounter() {
    _counterProvider.setCount();
  }

  @override
  Widget build(BuildContext context) {
    Counter _counterProvider = Provider.of(context);
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              child: Text(
                _counterProvider.count.toString(),
                style: TextStyle(
                  fontSize: 22,
                ),
              ),
            ),
            RaisedButton(
              onPressed: updateCounter,
              child: Text('Click'),
            ),
          ],
        ),
      ),
    );
  }
}
// class for storing data(Counter.dart)
import 'package:flutter/material.dart';

class Counter extends ChangeNotifier { // create a common file for data
  int _count = 0;

  int get count => _count;

  void setCount() {
    _count++;
    notifyListeners();
  }
}

【讨论】:

  • 感谢您的回答。我可能没有认真地表达自己。假设我有一些名为 LoginPage 的有状态小部件,然后在 _LoginPageState 我定义了一个 bool 变量,该变量在 setstate 中基于 crateria 进行更改。然后,如果这个值发生变化,我想将该值传递给另一个页面,例如主页?你能告诉我示例代码吗?
  • 目前,我尝试将“with ChangeNotifier”添加到_LoginPageState extends State。然后在 setState 函数中添加“notifyListeners();”当值发生变化并且我不知道之后如何将这个变量传递给另一个小部件时。
猜你喜欢
  • 2021-06-29
  • 2021-08-17
  • 2020-07-31
  • 1970-01-01
  • 2021-07-25
  • 2021-01-11
  • 2018-03-07
  • 2020-08-25
  • 2019-12-11
相关资源
最近更新 更多