In iOS, you might use a Storyboard file to organize your views and set constraints, or you might set your constraints programmatically in your view controllers. In Flutter, declare your layout in code by composing a widget tree.
The following example shows how to display a simple widget with padding:
In iOS, you call addSubview() on the parent, or removeFromSuperview() on a child view to dynamically add or remove child views. In Flutter, because widgets are immutable there is no direct equivalent to addSubview() . Instead, you can pass a function to the parent that returns a widget, and control that child’s creation with a boolean flag.
The following example shows how to toggle between two widgets when the user clicks the FloatingActionButton :
In iOS, you typically subclass UIView , or use a pre-existing view, to override and implement methods that achieve the desired behavior. In Flutter, build a custom widget bycomposing smaller widgets (instead of extending them).
For example, how do you build a CustomButton that takes a label in the constructor? Create a CustomButton that composes a RaisedButton with a label, rather than by extending RaisedButton :
In iOS, to travel between view controllers, you can use a UINavigationController that manages the stack of view controllers to display.
Flutter has a similar implementation, using a Navigator and Routes . A Route is an abstraction for a “screen” or “page” of an app, and a Navigator is awidget that manages routes. A route roughly maps to a UIViewController . The navigator works in a similar way to the iOS UINavigationController , in that it can push() and pop() routes depending on whether you want to navigate to, or back from, a view.
To navigate between pages, you have a couple options: