简体   繁体   中英

Accessing state in widget and making class immutable

I need to expose a couple of functions of a Stateful Widget. Since these functions depend on the state of the widget, I created a variable to store the state. However, I am getting a compile time warning:

This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final.

My Code:

class ItemWidget extends StatefulWidget {
  final Record record;
  final Function additem;
  final Function removeItem;
  var state;
  ItemWidget(this.record, this.additem, this.removeItem);

  @override
  _ItemWidgetState createState() {
    return this.state = new _ItemWidgetState();
  }

  // These are public functions which I need to expose.
  bool isValid() => state.validate();
  void validate() => state.validate();
}

Is there a better way /correct way of achieving this?

Thanks.

You should write the function on state, and access it via GlobalKey.

import 'package:flutter/material.dart';

class ItemWidget extends StatefulWidget {
  final Record record;
  final Function additem;
  final Function removeItem;
  const ItemWidget(
    Key? key,
    this.record,
    this.additem,
    this.removeItem,
  ) : super(key: key);

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

class ItemWidgetState extends State<ItemWidget> {
  bool isValid() {
    return true;
  }

  void validate() {}

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    throw UnimplementedError();
  }
}

https://api.flutter.dev/flutter/widgets/GlobalKey-class.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM