Home Mobile Cara membuat Onboarding Page menggunakan SK Onboarding

Cara membuat Onboarding Page menggunakan SK Onboarding

0
Onboarding Page

Bismillah, Assalamu’alakum, Halo sahabat Uda Uni Coding semua.. kali ini kita akan belajar cara membuat Onboarding seperti gambar diatas. Untuk membuat Onboarding Page seperti gambar diatas, teman-teman bisa menggunakan library SK Onboarding, berikut langkah-langkahnya:

Pada Depedencies di pubspec.yml teman-teman bisa install SK Onboarding seperti berikut:

sk_onboarding_screen untuk onboarding page, 

dependencies:
  flutter:
    sdk: flutter
  sk_onboarding_screen: ^1.0.1
  rounded_floating_app_bar: ^0.1.0
  flutter_image_slideshow: ^0.1.1
  percent_indicator: ^3.0.1
  • dev_depedencies pada pubspec.yaml

            dots_indicator digunakan untuk widget yang digunakan pada onboarding page

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_svg: ^0.17.4
  dots_indicator: ^1.0.0

  • assets image dan icon pada pubspec.yaml

      assets ini untuk image dan icon yang akan digunakan

assets:
    – assets/image/
    – assets/icon/
  • assets font pada pubspec.yaml

      assets ini untuk font yang akan digunakan

fonts:
    – family: Poppins
      fonts:
        – asset: font/Poppins-Regular.ttf

Selanjutnya create new dart file dengan nama onboarding.dart, lalu tuliskan code berikut:

import 'package:flutter/material.dart';
import 'package:online_courseapp/onboarding/secondpage.dart';
import 'package:online_courseapp/onboarding/thirdpage.dart';
import 'package:dots_indicator/dots_indicator.dart';
import '../login_page.dart';
import 'firstpage.dart';
class Onboarding extends StatefulWidget {
  @override
  _OnboardingState createState() => _OnboardingState();
}

class _OnboardingState extends State<Onboarding> {
  int currentPageIndex=0;
  int pageLength=0;

  @override
  void initState() {
    currentPageIndex = 0;
    pageLength = 3;
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Stack(
            children: <Widget>[

              // Untuk memanggil page 1,2,3
              PageView(
                physics: BouncingScrollPhysics(),
                children: <Widget>[
                  FirstPage(),
                  SecondPage(),
                  ThirdPage(),
                ],
                onPageChanged: (value) {
                  setState(() {
                    currentPageIndex = value;
                  });
                },
              ),

              // untuk text 'Lewati' yang ada di pojokan kanan
              Padding(
                padding: const EdgeInsets.all(40.0),
                child: Align(
                  alignment: Alignment.topRight,
                  child: GestureDetector(
                    onTap: (){
                      Navigator.push(context, MaterialPageRoute(builder: (context)=>LoginPage()));
                    },
                    child: Text(
                      'Lewati',
                      style: TextStyle(color: Colors.white,
                          fontSize: 16, fontWeight:FontWeight.w400),

                    ),
                  ),
                ),
              ),


              // untuk wiget Dots Indicator
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Align(
                  alignment: Alignment.bottomCenter,
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      new DotsIndicator(
                        dotsCount: pageLength,
                        position: currentPageIndex.toDouble(),
                      ),
                    ],
                  ),
                ),
              ),

              // untuk text 'selanjutnya' yang ada di sebelah dots indicator
              Padding(
                padding: const EdgeInsets.only(bottom: 8.0, right: 50),
                child: Align(
                  alignment: Alignment.bottomRight,
                  child: Text('Selanjutnya', style: TextStyle(color: Colors.white),),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

Pada code diatas terdapat widget PageView yang mana merupakan widget tempat kita memanggil Page atau halaman onboarding yang akan kita gunakan. Selain itu kita juga menambahkan DotsIndicator untuk widget bullets yang terdapat di bagian bawah halaman onboarding.

Selanjutnya kita akan membuat class FirstPage(), SecondPage() dan ThirdPage() untuk halaman onboarding nya. berikut kodingannya

firstpage.dart

import 'package:flutter/material.dart';

import '../login_page.dart';

class FirstPage extends StatelessWidget {
  const FirstPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(

//ini untuk background 

        decoration: BoxDecoration(
            image: DecorationImage(
                image: AssetImage('assets/image/ob1.png'), fit: BoxFit.fill)),
        child: Padding(
          padding: const EdgeInsets.all(50.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
                SizedBox(height: 320,),
                Align(
                  alignment: Alignment.bottomCenter,
                  child: Text(
                    'Belajar berbagai skill pemrograman hanya\ndengan satu aplikasi',
                    maxLines: 3,
                    textAlign: TextAlign.center,
                    style: TextStyle(color: Colors.white,
                    fontSize: 26,
                    fontWeight: FontWeight.w400),
                  ),
                ),


          ],
          ),
        ),
      ),
    );
  }
}



secondpage.dart

import 'package:flutter/material.dart';

import '../login_page.dart';

class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(

//ini untuk background 

            image: DecorationImage(
                image: AssetImage('assets/image/ob2.png'),fit: BoxFit.cover


            )
        ),

// ini untuk menambahkan teks 

        child: Column(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            SizedBox(height: 340,),
            Padding(
              padding: const EdgeInsets.only(bottom: 35.0),
              child: Align(
                alignment: Alignment.bottomCenter,
                child: Text(
                  'Dibimbing oleh mentor yang\n berpengalaman dan\nluarbiasa',
                  maxLines: 3,
                  textAlign: TextAlign.center,
                  style: TextStyle(color: Colors.white,
                      fontSize: 26,
                      fontWeight: FontWeight.w400),
                ),
              ),
            ),


          ],
        ),
      ),

    );
  }
}

Terakhir untuk slide onboarding pada thirdpage.dart tambahkan kodingan berikut:

import 'package:flutter/material.dart';
import 'package:online_courseapp/login_page.dart';

class ThirdPage extends StatelessWidget {
  const ThirdPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
            image: DecorationImage(
                image: AssetImage('assets/image/ob3.png'), fit: BoxFit.cover)),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            Align(
              alignment: Alignment.bottomCenter,
              child: Text(
                'Lets Join With Us!',
                maxLines: 3,
                textAlign: TextAlign.center,
                style: TextStyle(
                    color: Colors.white,
                    fontSize: 26,
                    fontWeight: FontWeight.w400),
              ),
            ),
            SizedBox(height: 50),
            Padding(
              padding: EdgeInsets.all(20),
              child: Container(
                height: 42,
                margin: EdgeInsets.all(20),
                child: FlatButton(
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(4)),
                  child: Text('Get Start!'),
                  color: Color(0xFF0096C7),
                  textColor: Colors.white,
                  onPressed: () {
                    Navigator.push(context,
                        MaterialPageRoute(builder: (context) => LoginPage()));
                  },
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Jika Sudah menambahkan file tersebut dan sudah mengimportnya di file onboarding.dart kita bisa langsung jalankan dengan memanggila class Onboarding di file main.dart seperti berikut:


import 'package:online_courseapp/onboarding/onboarding.dart';
import 'onboarding/firstpage.dart';
import 'onboarding/secondpage.dart';
import 'onboarding/thirdpage.dart';


void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(

          primarySwatch: Colors.blue,
          backgroundColor: Color(0xE5E5E5),
          fontFamily: 'Poppins'

      ),
      home: Onboarding(),
    );
  }
}

Karena SK Onboarding belum Null Safety jadi kita perlu menambahkan –no-sound-null-safety pada Edit Configuration

Kita juga sudah menginstal font yang kita gunakan pada aplikasi di pupspec.yaml, kita bisa jadikan font tersebut sebagai font default untuk aplikasi yang akan kita kerjakan dengan cara menambahkannya di properti ThemeData yaitu di fontFamily. di fontFamily kita bisa tuliskan nama font yang kita import tadi, yaitu ‘Poppins’.

Mudah bukan? Ok teman-teman sekian tutorial kali ini, Sampai jumpa di artikel berikutnyaa.. Semangat belajar ^.^