An Interest In:
Web News this Week
- April 25, 2024
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
Flutter Responsive Tasarm
Responsive
Uygulamann dzeninin mevcut cihazn boyutuna gre uyarlanabilmesi responsive
bir uygulama olduu anlamna gelir. Bu durum kullanc pencereyi yeniden boyutlandrdnda ya da cihazn ynn deitirdiinde UI'n yeniden dzenlenecei anlamna gelir. Bu sayede de uygulamanz birden fazla cihazda alabilir durumda olur.
Responsive Tasarm ile Flutter uygulamas oluturma konusunda iki temel yaklam vardr:
1. Build fonksiyonunda MediaQuery.of() methodunu kullanmak
2. LayoutBuilder snfn kullanmak
1. MediaQuery.of() methodu
Sabit ykseklik ve genilik deerleri kullanmak farkl cihazlarda overflowing (tama) hatalarna neden olur. Bu nedenle widget'larnz tasarlarken sabit genilik ve ykseklik deerleri kullanmaktan kanarak oranlar (ratios) kullann.
ratio:
Height in Design / Width in Design = Height in Device / Width in DesignTasarm ykseklii / Tasarm genilii = Cihaz ykseklii / Tasarm genilii
Cihaza duyarl ykseklik ve genilik nasl hesaplanr?
MediaQuery
Flutter uygulamamzn alt cihazn yksekliini ve geniliini almak iin cihazn boyut bilgisine erimemizi salayan MediaQuery'den faydalanabiliriz.
Flutter da responsive genilik deeri hesaplama
final MediaQueryData mediaQueryData = MediaQuery.of(context);final double deviceHeight = mediaQueryData.size.height;final double deviceWidth = mediaQueryData.size.width;
Cihazn geniliini rendikten sonra yan yana iki kart gsterdiimiz bir uygulamamz varsa ve kartn responsive geniliini hesaplamak istiyorsak:
final double responsiveWidth = (deviceWidth / 2) - padding - (spaceBetween / 2);
formln kullanabiliriz.
Temel olarak burada genilii hesaplamak iin cihazn toplam genilik deerini ikiye blp padding alanndan kartyoruz.
Flutter da responsive ykseklik deeri hesaplama
nceki aamada elde ettiimiz responsive genilik deerini kullanarak responsive ykseklik deerini aadaki gibi elde edebiliriz.
final double responsiveHeight = (heightInDesign / widthInDesign) * responsiveWidth;
rnek kod:
final MediaQueryData mediaQueryData = MediaQuery.of(context);final double deviceWidth = mediaQueryData.size.width;final double heightInDesign = 260;final double widthInDesign = 170;final double padding = 18;final double spaceBetween = 24;final double responsiveWidth = (deviceWidth / 2) - padding - (spaceBetween / 2);final double responsiveHeight = (heightInDesign / widthInDesign) * responsiveWidth;return SingleChildScrollView( child: Padding( padding: EdgeInsets.symmetric( horizontal: padding, ), child: Row( children: [ Container( height: responsiveHeight, width: responsiveWidth, color: Colors.grey, child: Column( children: [ //card content for text and image ], ), ), SizedBox( width: spaceBetween, ), Container( height: responsiveHeight, width: responsiveWidth, color: Colors.grey, child: Column( children: [ //card content for text and image ], ), ) ], ), ),);
2. LayoutBuilder Class
Parent widget'n boyutuna bal olan bir widget aac oluturur.
Parent child'n boyutunu snrlandrdnda ve child'n gerek boyutuna bal olmadnda kullanldr. LayoutBuilder'n son boyutu child'n boyutuyla eleir.
rnek kod:
import 'package:flutter/material.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); static const String _title = 'Flutter Code Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: MyStatelessWidget(), ); }}class MyStatelessWidget extends StatelessWidget { const MyStatelessWidget({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('LayoutBuilder Example')), body: LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { if (constraints.maxWidth > 600) { return _buildWideContainers(); } else { return _buildNormalContainer(); } }, ), ); } Widget _buildNormalContainer() { return Center( child: Container( height: 100.0, width: 100.0, color: Colors.red, ), ); } Widget _buildWideContainers() { return Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ Container( height: 100.0, width: 100.0, color: Colors.red, ), Container( height: 100.0, width: 100.0, color: Colors.yellow, ), ], ), ); }}
Responsive bir kullanc arayz oluturmak iin dier faydal widget'lar ve snflar:
AspectRatio
CustomSingleChildLayout
CustomMultiChildLayout
FittedBox
FractionallySizedBox
LayoutBuilder
MediaQuery
MediaQueryData
OrientationBuilder
Resources:
https://api.flutter.dev/flutter/widgets/MediaQuery/of.html
https://docs.flutter.dev/development/ui/layout/adaptive-responsive
https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
https://stacksecrets.com/flutter/learn-to-make-responsive-design-in-flutter
Original Link: https://dev.to/gulsenkeskin/flutter-responsive-tasarim-1mk0
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To