Is there any way to call a function by reference not by values in flutter.
Asked
Active
Viewed 201 times
0
-
2Can you give an example of what you exactly mean? what are you trying to do? – Ivo Nov 02 '22 at 13:31
3 Answers
2
If what you mean to ask is if it's possible to call a function and pass arguments by reference instead of by value, then not exactly. Technically, Dart always uses pass-by-value (although I prefer calling it "pass-by-assignment").
If you want to simulate pass-by-reference, you could wrap your arguments in other objects to add a level of indirection:
class Reference<T> {
T value;
Reference(this.value);
}
void trimString(Reference<String> string) {
string.value = string.value.trim();
}

jamesdlin
- 81,374
- 13
- 159
- 204
1
In flutter Function is also first class object so you can pass them around any where.
you do it like
typedef ProfileFormSubmitCallback = void Function(
String? photoUrl,
String firstName,
String lastName,
String email,
);
then
you can reference your function like,
ProfileFormSubmitCallback myFunction;

General Grievance
- 4,555
- 31
- 31
- 45

IonicFireBaseApp
- 925
- 3
- 10
0
This is how a function is passed and used. Hope this is what you want
class ButtonPrimary extends StatelessWidget {
final String text;
final double? height;
final double? width;
final VoidCallback onPressed;
const ButtonPrimary({
Key? key,
required this.onPressed,
required this.text,
this.height,
this.width,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
height: height ?? 50,
width: width ?? MediaQuery.of(context).size.width * .6,
child: ElevatedButton(
onPressed: onPressed,
child: Widget(...),
),
);
}
}
And usage,
ButtonPrimary(
onPressed: onLoginPressed,
text: 'Register',
width: MediaQuery.of(context).size.width * .9,
)
....
void onLoginPressed() {
// Do sth
}

blackkara
- 4,900
- 4
- 28
- 58