Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 27, 2022 10:08 pm GMT

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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To