如何通过有状态的小部件传递参数

时间:2019-08-22 19:18:51

标签: flutter dart

当调用另一个类时,我想使用一个参数来初始化该类,其形式通常与Widget一样。

在使用StatefulWidget进行此操作时,我创建了一个自定义Instantiater,就像使用C#或其他语言(比Dart更了解)一样,我将参数传递给了类的属性。

有状态类给了我一条蓝色的波浪线,并说我应该在一个有效的“ @immutable class”中初始化属性,但是我讨厌蓝色的波浪线。

是否有更好的方法将参数传递给有状态类?


class CreateTest extends StatefulWidget {
  DemandRecord _demandRecord;
  BuildContext _buildContext;
  @override
  State<StatefulWidget> createState() {
    return CreateTestState(_buildContext,_demandRecord);
  }

  CreateTest() 
  {

  }

  CreateTest.start(BuildContext context, DemandRecord demandRecord) {
    _buildContext = context;
    _demandRecord = demandRecord;
  }  
}

我只想将其转发...

这是错误==>

  

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

杰米

2 个答案:

答案 0 :(得分:2)

这是使用documentation中提供的类似结构来实现您要执行的操作的正确方法:

import 'package:flutter/material.dart';

class CreateTest extends StatefulWidget {
  final DemandRecord demandRecord;
  final BuildContext buildContext;

  CreateTest({Key key, this.demandRecord, this.buildContext}) : super(key: key);

  @override
  _CreateTestState createState() => _CreateTestState();
}

class _CreateTestState extends State<CreateTest> {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return null;
  }

}

然后在您要调用它时:

CreateTest(demandRecord: record, buildContext: context);

答案 1 :(得分:0)

对于那些以后会读这篇文章的人,几个月后,我发现了如何去做我真正想做的事情,但是却不知道如何做。

在控制器的实现中有一个名为# widget #的参数,可用于返回创建状态控制器的小部件。

import 'package:flutter/material.dart';

class CreateTest extends StatefulWidget {
  final DemandRecord demandRecord;
  final BuildContext buildContext;

  CreateTest({Key key, this.demandRecord, this.buildContext}) : super(key: key);

  @override
  _CreateTestState createState() => _CreateTestState();
}

class _CreateTestState extends State<CreateTest> {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build

//我想回到班级并获得需求记录通知 //“小工具”。

  Colors localColor = widget.demandRecord.color; 
  if (localColor == Colors.blue) 
     // act on local Color here and notice widget. gave access to
     // parameters passed into StatefulWidget 

    return null;
  }

}