Responsive Design
āļāļēāļĢāļāļĢāļąāļ UI āđāļŦāđāđāļŦāļĄāļēāļ°āļāļąāļāļāļāļēāļāļŦāļāđāļēāļāļāđāļĨāļ° platform āļāđāļēāļāđ āđāļ Flutter
Responsive vs Adaptive
| Responsive | Adaptive | |
|---|---|---|
| āļāļĢāļąāļāļāļēāļĄ | āļāļāļēāļāļāļ (width, height) | Platform (iOS, Android) |
| āļāļąāļ§āļāļĒāđāļēāļ | āļĄāļ·āļāļāļ·āļ = Column, tablet = Row | iOS āđāļāđ Cupertino, Android āđāļāđ Material |
| āđāļāļĢāļ·āđāļāļāļĄāļ·āļ | MediaQuery, LayoutBuilder | Platform.isIOS, Platform.isAndroid |
MediaQuery â āļĢāļđāđāļāļāļēāļāļāļ
final width = MediaQuery.of(context).size.width;
final height = MediaQuery.of(context).size.height;
// āđāļāļĨāļĩāđāļĒāļ layout āļāļēāļĄāļāļāļēāļāļāļ
if (width < 600) {
return Column(children: [chart, expensesList]); // āļĄāļ·āļāļāļ·āļāđāļāļ§āļāļąāđāļ
} else {
return Row(children: [
Expanded(child: chart),
Expanded(child: expensesList),
]); // āđāļāļ§āļāļāļ/tablet
}āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ: MediaQuery.of(context) āļ§āļąāļāļāļēāļāļāļāļēāļāļāļāļāļąāđāļāļŦāļĄāļ āđāļĄāđāđāļāđāļāļ·āđāļāļāļĩāđāļāļĩāđ widget āđāļāđāđāļāđāļāļĢāļīāļ
LayoutBuilder â āļĢāļđāđ constraints āļāļāļ parent
LayoutBuilder(builder: (ctx, constraints) {
if (constraints.maxWidth >= 600) {
return wideLayout; // tablet/landscape
}
return narrowLayout; // phone/portrait
});āđāļāđ LayoutBuilder āđāļāļ MediaQuery āđāļĄāļ·āđāļ: widget āļāļĒāļđāđāđāļ container āļāļĩāđāļĄāļĩāļāļāļēāļāļāļģāļāļąāļ (āđāļāđāļāļāļĒāļđāđāđāļ Column āļāļĩāđāđāļāđāļāļāļĢāļķāđāļ) â LayoutBuilder āļāļāļāļāļ·āđāļāļāļĩāđāļāļĢāļīāļāļāļĩāđāđāļāđ
Adaptive â āļāļĢāļąāļāļāļēāļĄ Platform
import 'dart:io';
if (Platform.isIOS) {
return CupertinoAlertDialog(...); // iOS style
}
return AlertDialog(...); // Material (Android) styleSafeArea â āļŦāļĨāļĩāļ notch/status bar
SafeArea(
child: myWidget, // āđāļĄāđāļāļđāļ notch/status bar/home bar āļāļąāļ
)Breakpoints āļāļĩāđāđāļāļ°āļāļģ
| āļāļāļēāļ | Device |
|---|---|
| < 600px | Phone (portrait) |
| 600-900px | Phone (landscape) / Small tablet |
| > 900px | Tablet / Desktop |
Key Points
MediaQuery= āļāļāļēāļāļāļāļāļąāđāļāļŦāļĄāļ /LayoutBuilder= āļāļ·āđāļāļāļĩāđāļāļĩāđ widget āđāļāđāļāļĢāļīāļ- Responsive (āļāļāļēāļāļāļ) āļāļąāļ Adaptive (platform) āđāļāđāļāļāļāļĨāļ°āđāļĢāļ·āđāļāļ
SafeAreaāļāļ§āļĢāđāļāđāđāļŠāļĄāļāđāļāļ·āđāļāļŦāļĨāļĩāļ notch āđāļĨāļ° system UI- āđāļāđ
Expandedāđāļ Row/Column āđāļāļ·āđāļāđāļāđāļāļāļ·āđāļāļāļĩāđāđāļāļāļĒāļ·āļāļŦāļĒāļļāđāļ