MDC-101 Flutter: Malzeme Bileşenleriyle İlgili Temel Bilgiler

1. Giriş

Materyal Tasarım ve Material Flutter kitaplığı nedir?

Materyal Tasarım, cesur ve güzel dijital ürünler oluşturmaya yönelik bir sistemdir. Ürün ekipleri stil, marka, etkileşim ve hareketi tutarlı bir ilke ve bileşen kümesi altında bir araya getirerek en büyük tasarım potansiyellerini gerçekleştirebilir.

Material Flutter kitaplığı, uygulamalar ve platformlar genelinde tutarlı bir kullanıcı deneyimi sunmak için Materyal Tasarım bileşenlerinin (kısaca MDC) tasarımlarını uygulayan Flutter widget'larını içerir. Materyal Tasarım sistemi geliştikçe bu bileşenler, Google'ın kullanıcı arabirimi geliştirme standartlarına uyarak tutarlı bir piksel mükemmelliğinde uygulama sağlamak için güncellenir.

Bu codelab'de, Material Flutter'ın çeşitli bileşenlerini kullanarak bir giriş sayfası oluşturacaksınız.

Oluşturacaklarınız

Bu codelab, giysi ve ev eşyaları satan bir e-ticaret uygulaması olan Shrine adlı uygulamayı geliştirme konusunda size rehberlik edecek dört codelab'den ilkidir. Bu kurs, Material Flutter kullanarak bileşenleri her marka veya stili yansıtacak şekilde nasıl özelleştirebileceğinizi gösterecek.

Bu codelab'de, Shrine için aşağıdakileri içeren bir giriş sayfası oluşturacaksınız:

  • Shrine'ın logosunun resmi
  • Uygulamanın adı (Yer)
  • Biri kullanıcı adı, diğeri şifre için olmak üzere iki metin alanı
  • İki düğme

Android

iOS

Android'de tapınak giriş sayfası

iOS'te tapınak giriş sayfası

Bu codelab'deki Material Flutter bileşenleri ve alt sistemleri

  • Metin alanı
  • Düğme
  • Mürekkep dalgası (dokunma etkinlikleri için görsel bir geri bildirim biçimi)

Flutter geliştirme ile ilgili deneyim düzeyinizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Flutter geliştirme ortamınızı kurma

Bu laboratuvarı tamamlamak için iki yazılıma ihtiyacınız vardır: Flutter SDK'sı ve düzenleyici.

Codelab'i aşağıdaki cihazlardan birini kullanarak çalıştırabilirsiniz:

  • Bilgisayarınıza bağlı ve Geliştirici moduna ayarlanmış fiziksel bir Android veya iOS cihaz.
  • iOS simülatörü (Xcode araçlarının yüklenmesini gerektirir).
  • Android Emülatör (Android Studio'da kurulum gerektirir).
  • Tarayıcı (hata ayıklama için Chrome gereklidir).
  • Windows, Linux veya macOS masaüstü uygulaması olarak Uygulamayı dağıtmayı planladığınız platformda gerçekleştirmeniz gerekir. Bu nedenle, bir Windows masaüstü uygulaması geliştirmek istiyorsanız uygun derleme zincirine erişmek için Windows'da geliştirme yapmanız gerekir. İşletim sistemine özgü gereksinimler docs.flutter.dev/desktop sayfasında ayrıntılı olarak açıklanmıştır.

3. codelab başlangıç uygulamasını indirme

Başlangıç projesi material-components-flutter-codelabs-101-starter/mdc_100_series dizininde bulunur.

...veya GitHub'dan klonlayın

Bu codelab'i GitHub'dan klonlamak için şu komutları çalıştırın:

git clone https://github.com/material-components/material-components-flutter-codelabs.git
cd material-components-flutter-codelabs/mdc_100_series
git checkout 101-starter

Projeyi açın ve uygulamayı çalıştırın

  1. Projeyi istediğiniz düzenleyicide açın.
  2. "Uygulamayı çalıştırma" talimatlarını izleyin Başlarken: Seçtiğiniz düzenleyici için uygulamayı test edin.

Başarıyla gerçekleştirildi. Cihazınızda Shrine'ın giriş sayfasının başlangıç kodu çalışıyor olmalıdır. Shrine logosunu ve "Shrine" adını görebilirsiniz. tıklayın.

Android

iOS

Shrine logosu

Shrine logosu

Koda bakalım.

login.dart içindeki widget'lar

login.dart uygulamasını açın. Şunları içermelidir:

import 'package:flutter/material.dart';

class LoginPage extends StatefulWidget {
  const LoginPage({Key? key}) : super(key: key);

  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  // TODO: Add text editing controllers (101)
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: ListView(
          padding: const EdgeInsets.symmetric(horizontal: 24.0),
          children: <Widget>[
            const SizedBox(height: 80.0),
            Column(
              children: <Widget>[
                Image.asset('assets/diamond.png'),
                const SizedBox(height: 16.0),
                const Text('SHRINE'),
              ],
            ),
            const SizedBox(height: 120.0),
            // TODO: Remove filled: true values (103)
            // TODO: Add TextField widgets (101)
            // TODO: Add button bar (101)
          ],
        ),
      ),
    );
  }
}

Bir import ifadesi ve iki yeni sınıf içerdiğine dikkat edin:

  • import ifadesi, bu dosyada Material kitaplığının kullanılmasına izin verir.
  • LoginPage sınıfı, simülasyon aracında görüntülenen sayfanın tamamını temsil eder.
  • _LoginPageState sınıfının build() işlevi, kullanıcı arayüzümüzdeki tüm widget'ların nasıl oluşturulduğunu kontrol eder.

4. TextField widget'ları ekleme

Başlangıç olarak, kullanıcıların kullanıcı adlarını ve şifrelerini girdikleri giriş sayfamıza iki metin alanı ekleyeceğiz. Kayan bir etiket görüntüleyen ve dokunma dalgasını etkinleştiren Metin Alanı widget'ını kullanacağız.

Bu sayfa, birincil olarak, alt öğelerini kaydırılabilir bir sütunda düzenleyen bir ListView öğesiyle yapılandırılır. Aşağıya metin alanları yerleştirelim.

TextField widget'larını ekleme

const SizedBox(height: 120.0) ifadesinden sonra iki yeni metin alanı ve bir boşluk ekleyin.

// TODO: Add TextField widgets (101)
// [Name]
TextField(
  decoration: const InputDecoration(
    filled: true,
    labelText: 'Username',
  ),
),
// spacer
const SizedBox(height: 120.0),
// [Password]
TextField(
  decoration: const InputDecoration(
    filled: true,
    labelText: 'Password',
  ),
  obscureText: true,
),

Metin alanlarının her birinde, InputDecoration widget'ı alan bir decoration: alanı bulunur. filled: alanı, kullanıcıların metin alanındaki dokunma veya dokunma hedefi alanını tanımasına yardımcı olmak için metin alanının arka planının hafif doldurulacağı anlamına gelir. İkinci metin alanının obscureText: true değeri, kullanıcının girdiği giriş işaretlerini otomatik olarak madde işaretleriyle değiştirir. Bu işlem, şifreler için uygun olur.

Sıkı Yeniden Yükleme işlemi gerçekleştiren projenizi kaydedin (Komut + s tuş vuruşuyla).

Kullanıcı Adı ve Şifre için iki metin alanı içeren bir sayfa görmeniz gerekir. Kayan etiket animasyonuna göz atın:

Android

iOS

Kullanıcı adı ve şifre alanlarının bulunduğu tapınak logosu

5. Düğme ekle

Daha sonra, giriş sayfamıza iki düğme ekleyeceğiz: "İptal" ve "Sonraki"yi seçin. TextButton ve ElevatedButton olmak üzere iki tür düğme widget'ı kullanacağız.

OverflowBar'ı ekleme

Metin alanlarından sonra OverflowBar öğesini ListView öğesinin alt öğelerine ekleyin:

// TODO: Add button bar (101)
OverflowBar(
  alignment: MainAxisAlignment.end,
  // TODO: Add a beveled rectangular border to CANCEL (103)
  children: <Widget>[
    // TODO: Add buttons (101)
  ],
),

OverflowBar, alt öğelerini üst üste düzenler.

Düğmeleri ekleme

Sonra OverflowBar öğesinin children listesine iki düğme ekleyin:

    // TODO: Add buttons (101)
    TextButton(
      child: const Text('CANCEL'),
      onPressed: () {
        // TODO: Clear the text fields (101)
      },
    ),
    // TODO: Add an elevation to NEXT (103)
    // TODO: Add a beveled rectangular border to NEXT (103)
    ElevatedButton(
      child: const Text('NEXT'),
      onPressed: () {
    // TODO: Show the next page (101) 
      },
    ),

Projenizi kaydedin. Son metin alanının altında iki düğme göreceksiniz:

Android

iOS

Kullanıcı adı ve şifre alanları, iptal ve ileri düğmeleri bulunan tapınak logosu

Kullanıcı adı ve şifre alanları, iptal ve ileri düğmeleri bulunan tapınak logosu

Düzen işini OverflowBar sizin yerinize halleder. Düğmeleri yatay olarak konumlandırarak yan yana görünürler.

Bir düğmeye dokunduğunuzda başka hiçbir şey meydana gelmeden bir mürekkep dalgası animasyonu başlatılır. İptal düğmesinin metin alanlarını temizlemesi, sonraki düğmesinin ekranı kapatması için anonim onPressed: işlevlerine işlevsellik ekleyelim:

TextEditingControllers ekleme

Metin alanlarının temizlenebilmesi için değerlerini kontrol etmek için TextEditingControllers öğelerini ekleyeceğiz.

_LoginPageState sınıfının bildiriminin hemen altına denetleyicileri final değişkenleri olarak ekleyin.

  // TODO: Add text editing controllers (101)
  final _usernameController = TextEditingController();
  final _passwordController = TextEditingController();

İlk metin alanının controller: alanında _usernameController değerini ayarlayın:

// TODO: Add TextField widgets (101)
// [Name]
TextField(
  controller: _usernameController,

İkinci metin alanının controller: alanında _passwordController değerini ayarlayın:

// TODO: Add TextField widgets (101)
// [Password]
TextField(
  controller: _passwordController,

Edit onpressed

TextButton'ın onPressed: işlevinde her bir denetleyiciyi temizlemek için bir komut ekleyin:

    // TODO: Clear the text fields (101)
    _usernameController.clear();
    _passwordController.clear();

Projenizi kaydedin. Artık metin alanlarına bir şey yazdığınızda, iptal düğmesine bastığınızda her alan tekrar temizlenir.

Bu giriş formu iyi durumda! Kullanıcılarımızı Shrine uygulamasının geri kalanına yönlendirelim.

Çarpıcı

Bu görünümü kapatmak için bu sayfayı (Flutter'da yönlendirme olarak adlandırılır) gezinme yığınının genişletmek (veya kaldırmak) istiyoruz.

ElevatedButton'ın onPressed: işlevinde, Gezgin'deki en son rotayı açın:

        // TODO: Show the next page (101) 
        Navigator.pop(context);

Son olarak, Scaffold içinde home.dart uygulamasını açın ve resizeToAvoidBottomInset değerini false olarak ayarlayın:

    return Scaffold(
      // TODO: Add app bar (102)
      // TODO: Add a grid view (102)
      body: Center(
        child: Text('You did it!'),
      ),
      // TODO: Set resizeToAvoidBottomInset (101)
      resizeToAvoidBottomInset: false,
    );

Bu, klavyenin görünümünün ana sayfanın veya widget'larının boyutunu değiştirmemesini sağlar.

İşte bu kadar. Projenizi kaydedin. Devam edin ve "İleri"yi tıklayın.

Başardınız!

Android

iOS

&quot;Başardın&quot; yazan bir ekran

&quot;Başardın&quot; yazan bir ekran

Bu ekran, MDC-102'de üzerinde çalışacağınız bir sonraki codelab'imiz için başlangıç noktasıdır.

6. Tebrikler!

Metin alanları ve düğmeler ekledik ve düzen kodunu düşünmek zorunda kalmadık. Flutter'ın Materyal Bileşenleri, geniş bir stile sahiptir ve ekrana neredeyse zahmetsizce yerleştirilebilir.

Sonraki adımlar

Metin alanları ve düğmeler, Materyal Sistemi'nin iki temel bileşenidir, ancak daha pek çok bileşen vardır. Diğerlerini Materyal Bileşenleri widget kataloğunda da keşfedebilirsiniz.

Alternatif olarak Flutter için MDC-102'de ele alınan bileşenler hakkında bilgi edinmek için MDC-102: Material Design Structure and Layout'a (MDC-102: Materyal Tasarım Yapısı ve Düzen) gidin.

Bu codelab'i makul bir zaman ve çabayla tamamlayabildim

Kesinlikle katılıyorum Katılıyorum Ne memnunum ne değilim Katılmıyorum Kesinlikle katılmıyorum

Gelecekte Materyal Bileşenleri kullanmaya devam etmek istiyorum

Kesinlikle katılıyorum Katılıyorum Ne memnunum ne değilim Katılmıyorum Kesinlikle katılmıyorum