'Flutter Stateful Constructor Const Problem

I'm following tutorial on udemy and i found this weird error and i already read some doccumentation and i still didnt find the right answer to have constructor with initail value. her is my code

class MapScreen extends StatefulWidget {

      final PlaceLocation initialLocation;
      final bool isSelecting;
      const MapScreen({Key? key, this.initialLocation = PlaceLocation( //here there is an error "The default value of an optional parameter must be constant. (Documentation)"
        latittude:  37.422,
        longitude: -122.084,
        address: "Example stree no 1",
      ), this.isSelecting = false}) : super(key: key);
    
      @override
      _MapScreenState createState() => _MapScreenState();
    }

however if i delete those const new error come out

    class MapScreen extends StatefulWidget {
      final PlaceLocation initialLocation;
      final bool isSelecting;
      MapScreen({Key? key, this.initialLocation = PlaceLocation( //The default value of an optional parameter must be constant. (Documentation)
        latittude:  37.422,
        longitude: -122.084,
        address: "Jl. Imambonjol",
      ), this.isSelecting = false}) : super(key: key);
    
      @override
      _MapScreenState createState() => _MapScreenState();
    }

i also tried to follow the instruction and modify my code like this:

class MapScreen extends StatefulWidget {
  final PlaceLocation initialLocation;
  final bool isSelecting;

  MapScreen({
    this.initialLocation =
        const PlaceLocation(latitude: 37.422, longitude: -122.084),
    this.isSelecting = false,
  });

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

but the error still came out



Solution 1:[1]

I was able to fix your mistake, below I will attach the solution code and a screenshot of the console:

// Fake model:
class PlaceLocation {
  final double latittude;
  final double longitude;
  final String address;

  // Make this constructor const to solve your problem:
  const PlaceLocation(
      {required this.latittude,
      required this.longitude,
      required this.address});
}

class MapScreen extends StatefulWidget {
  final PlaceLocation initialLocation;
  final bool isSelecting;

  // Also don't forget to put const before PlaceLocation() in this constructor:
  const MapScreen(
      {Key? key,
      this.initialLocation = const PlaceLocation(
        latittude: 37.422,
        longitude: -122.084,
        address: "Example stree no 1",
      ),
      this.isSelecting = false})
      : super(key: key);

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

class _MapScreenState extends State<MapScreen> {
  @override
  Widget build(BuildContext context) {
    // Console test to check default values:
    print("lattitude: " +
        MapScreen().initialLocation.latittude.toString() +
        "\nlongitude: " +
        MapScreen().initialLocation.longitude.toString() +
        "\naddress: " +
        MapScreen().initialLocation.address.toString());

    return Scaffold(body: Container());
  }
}

Image - check for default value

All you have to do is make your model (PlaceLocation) constructor const.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Legend5366