When integrating Flutter to a host app (docs) there is a few ways to do it, one of them (simplest) is open Flutter in a new Activity via FlutterActivity
class.
Like this:
// Java
hostActivity.startActivity(
FlutterActivity.withCachedEngine("my_engine_id").build(context)
);
Traditionally for Android style windows on Flutter side we create AppBar with Back button.
This AppBar back button and Android system back button must behave the same: foreground activity must been closed (finish) when pressing to back button.
Currently system back button really closes the FlutterActivity
,
but how to emulate this behaviour from flutters AppBar back button?
// Dart - Flutter side
...
child: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
// WHAT MUST BE HERE?
}),
...
PS Platform channel between Flutter side and host established - I can call any code from any side
Flutter can be embedded into your existing Android application piecemeal, as a source code Gradle subproject or as AARs. The integration flow can be done using the Android Studio IDE with the Flutter plugin or manually.
In Flutter, you should invoke a method through Platform Channel to call a function to navigate from the activity/view controller which hosts your Flutter, you can't directly navigate to a native view from Flutter.
Solution found:
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
Removes the topmost Flutter instance, presenting what was before it.
On Android, removes this activity from the stack and returns to the previous activity.
Documentation here: api reference
...
leading: BackButton(
onPressed: () => {
if (Navigator.canPop(context))
{Navigator.pop(context)}
else
{SystemNavigator.pop()}
},
)
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With