Dart - 在初始值设定项中只能访问静态成员

标签 dart flutter

我正在尝试使用以下代码

class NewItemCreate extends StatefulWidget{

  @override
  NewItemCreateState createState() => new NewItemCreateState();
}

class NewItemCreateState extends State<NewItemCreate>
{

  File _image;
  Future getImage() async {
    var image = await ImagePicker.pickImage(source: ImageSource.camera);
    setState(() {
      _image = image;
    });
    print(_image.path);
  }
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      backgroundColor: Colors.yellow,

        appBar: new AppBar(
          title: new Text("Report"),
          elevation: 5.0,
        ),
      body:
      Center  (
          child: ListView(
            padding: EdgeInsets.only(left: 24.0, right: 24.0),
            shrinkWrap: true,
            children: <Widget>[
              itemImage,
              SizedBox(height: 18.0),
              itemName,
              SizedBox(height: 18.0),
              itemLocation,
              SizedBox(height: 18.0),
              itemLocation,
              SizedBox(height: 18.0),
              itemTime,
              SizedBox(height: 18.0),
              Report,
              SizedBox(height: 38.0),
            ],
          )
      )
    );

  }

  final itemImage =       Padding(
    padding: EdgeInsets.symmetric(vertical: 25.0),
    child: Material(
      borderRadius: BorderRadius.circular(30.0),
      shadowColor: Colors.lightBlueAccent.shade100,
      elevation: 5.0,
      child: MaterialButton(
        minWidth: 200.0,
        height: 300.0,
        onPressed: (){
          getImage();
        },
        color: Colors.lightGreenAccent,
        child:
        new Icon(Icons.add_a_photo, size: 150.0,color: Colors.blue,),
      ),
    ),
  );

这里已经有问题了, Error: Only static members can be accessed in initializers what does this mean? 关于这个问题,但是,我真的应该为此使用“SingleTickerProviderStateMixin”吗?另外,这与单例有关吗? (我还在学习编程)

尝试以下答案后出错: enter image description here

最佳答案

final itemImage = ...

初始化一个类级别的字段。此代码在构造函数完成和对象完全初始化之前执行,因此禁止访问 this.(隐式或显式),因为无法保证您尝试访问的内容已经初始化。

无论如何,以这种方式创建和缓存小部件通常不是一个好主意。 而是让它成为一个方法:

Widget buildItemImage(BuildContext context) => Padding(
    padding: EdgeInsets.symmetric(vertical: 25.0),
    child: Material(
        borderRadius: BorderRadius.circular(30.0),
        shadowColor: Colors.lightBlueAccent.shade100,
        elevation: 5.0,
        child: MaterialButton(
            minWidth: 200.0,
            height: 300.0,
            onPressed: () {
                getImage();
            },
            color: Colors.lightGreenAccent,
            child: new Icon(Icons.add_a_photo, size: 150.0,color: Colors.blue,
        ),
      ),
    ),
);

这样代码会在调用 buildItemImage(context) 时首先执行,而不是在创建对象实例时执行。这时候保证保存访问this.

关于Dart - 在初始值设定项中只能访问静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682496/

相关文章:

android - 使用 google_sign_in 插件进行 flutter 时 Gradle 构建失败

flutter - 因为testing_app需要SDK版本>=2.16.1 <3.0.0,版本解析失败。在 flutter 中

dart - 为什么可以使用dart写回后端服务器?

flutter - 如何在 flutter 中按日期动态排序?

flutter - 我们如何使用Flutter中的底部导航栏触发有状态的小部件来进行导航自身的重建?

flutter - 如何从 Flutter 应用程序中打开应用程序?

DART 网络用户界面 : How to reference index in iterate loop

flutter - 如何在Flutter中使用graphql在Mutation中传递枚举?

dart - 具有水平和垂直中心对齐分隔线的 GridView

dart - 如何在 dart 中生成 oauth 签名