Flutter function with named and optional parameters

2,671

Solution 1

Named parameters are by default optional. So in your case it would be:

static void showOverlay({BuildContext context, String text, bool successfull, VoidCallback? finished}) {}

Notice the {} in the constructor, this makes your parameters named and optional. By using @required in front of your declaration, you can differentiate between required and not required.

Solution 2

you can use it like this using positional parameters

 void showOverlay(BuildContext context, String text, bool successful, [VoidCallback finished]) {}

or like this using named parameters

void showOverlay({@required BuildContext context, @required String text, @required bool successful, VoidCallback finished}) {}

and dart is complaining becuase named parameters is best practice as mentioned in dart docs

Positional boolean parameters are a bad practice because they are very ambiguous. Using named boolean parameters is much more readable because it inherently describes what the boolean value represents.

BAD:

Task(true);
Task(false);
ListBox(false, true, true);
Button(false);

GOOD:

Task.oneShot();
Task.repeating();
ListBox(scroll: true, showScrollbars: true);
Button(ButtonState.enabled);

Solution 3

Named parameters are optional unless they’re specifically marked as required. Below, all four of your parameters are named. Three are required while one of them is optional.

static void showOverlay({required BuildContext context, required String text, 
  required bool successfull, VoidCallback? finished}) {}
Share:
2,671
Chris
Author by

Chris

Updated on December 29, 2022

Comments

  • Chris
    Chris over 1 year

    I have a function that should have three required and in best case named parameters. The last one ("finished") should be optional. I tried it like this:

    static void showOverlay(BuildContext context, String text, bool successfull,
      [VoidCallback? finished]) {}
    

    but Flutter is complaining:

    Avoid positional boolean parameters

    The weird thing is that it is only complaining about the bool successfull. What am I doing wrong here and how can I fix this?

    • Chris
      Chris about 3 years
      @lrsvmb but right now the params are not named
  • ambiguous58
    ambiguous58 about 3 years
    For future reference, if you have enabled null-safety: @required is now just required