如何在无状态小部件中将实例字段设置为final?

时间:2019-09-18 11:08:44

标签: flutter dart

我有Stateless小部件。当用户点击按钮时,我调用计算值的方法。我需要将此值通过Navigator.push传递到下一页。

例如,我有:

class Page1 extends StatelessWidget {
  String value1;
  String value2;

…

child: RaisedButton(
  onPressed: () async {
    await _calculateValue(context);

    Navigator.push(
        context,
        new MaterialPageRoute(
            builder: (BuildContext context) =>
                new Page2(
                  value1: value1,
                  value2: value2,
                )));

…

_calculateValue(BuildContext context) async {

value1 = …
value2 = …

但是当我这样做时,flutter analyze发出警告:

  

该类(或该类继承的类)被标记为   '@immutable',但其一个或多个实例字段不是最终的

我不能只声明value1的最终名称,因为它会给出错误:

  

错误:必须初始化最终变量“ value1”。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

据我了解,您正在尝试获取或计算一些值,然后将它们作为参数从一个屏幕传递到另一个屏幕。您可以通过使用具有特殊类的命名路由来完成此操作。您可以使用<script> import {search} from './store.js'; import Child from './Child.svelte'; </script> <!-- <input bind:value={$search}> --> <input on:change={e => {search.set(e.target.value)}}> <div> <h3>{$search}</h3> <Child child={'A'} /> <Child child={'B'} /> </div> 在第二个屏幕上检索值。对于您的情况,可能是这样的:

ModalRoute.of(context).settings.arguments

有关命名路由的详细信息,您可以阅读herehere