Flutter function with named and optional parameters
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}) {}
Chris
Updated on December 29, 2022Comments
-
Chris over 1 year
I have a function that should have three
required
and in best casenamed
parameters. The last one ("finished
") should beoptional
. 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 about 3 years@lrsvmb but right now the params are not named
-
-
ambiguous58 about 3 yearsFor future reference, if you have enabled null-safety:
@required
is now justrequired