본문 바로가기

개발일기/Flutter

Flutter#Image_Carousel

728x90
반응형

##다섯장의 이미지를 순차적으로 슬라이드 되는 기능을 만들어 보았다.

 

1, main.dart

 

import 'package:flutter/material.dart';
import 'package:image_carousel/home_screen/homeScreen.dart';

void main() {
  runApp(
    MaterialApp(
      home: homeScreen(),
    ),
  );
}

 

2,homeScreen.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class homeScreen extends StatefulWidget {
  const homeScreen({super.key});

  @override
  State<homeScreen> createState() => _homeScreenState();
}

class _homeScreenState extends State<homeScreen> {
  Timer? timer;
  PageController controller = PageController(
    initialPage: 0, //몇번째 페이지부터 실행할거인지.
  );
  @override
  void initState() {  //homeScreenState가 실행될때 실행
    super.initState();
    
    timer = Timer.periodic(Duration(seconds: 1), (timer) {
      int currentPage = controller.page!.toInt();

      int nextPage = currentPage +1;
      if(nextPage > 4){
        nextPage = 0;
      }

      controller.animateToPage(nextPage,
          duration: Duration(microseconds: 400), // 이동되는 시간
          curve: Curves.linear);                 // 이동 속도
    });
  }

  @override
  void dispose() {  //homeScreenState가 죽을때 실행
    controller.dispose();
    if(timer != null){
      timer!.cancel();
    }
    super.dispose();
  }
  
  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
    return Scaffold(
      body: PageView(
        controller: controller,
        children: ['1', '2', '3', '4', '5'].map(
                (e) => Image.asset(
                  'asset/img/image_$e.jpeg',
                  fit: BoxFit.cover,
          ),
        ).toList(),
      ),
    );
  }
}

# Timer을 이용하여 지정한 시간만큼 함수가 호출되어 이미지가 슬라이되는 기능을 만들었따.

# 그러기 위해선 controller를 필수로 지정해야했고 Page단위로 이동하는거기 때문에 PageController를 사용하였다.

# 여기서 initState는 실제로 homeScreenState가 실행될때 실행이 되며 dispose는 homeScreenState가 종료될때 실행이 되는 함수이다.

# 소스를 간략하게 해석하자면 controller.page!.toInt(); 를 통해 현재 페이지를 가져오고, 현재페이지+1을 하여 다음 페이지의 값을 변수에 저장하였다.

# 이미지가 총 5개이기 때문에 index가 4를 넘어가는 순간 처음으로 돌아가기 위해 nextPage를 0으로 초기화 하였다.

728x90
반응형

'개발일기 > Flutter' 카테고리의 다른 글

Flutter#WEB_VIEW#2.WebViewController  (0) 2024.02.28
Flutter#WEB_VIEW#1.appBar  (0) 2024.02.28
Flutter#Row and Column#3  (0) 2024.02.22
Flutter#Row and Column#2  (0) 2024.02.21
Flutter#Row and Column#1  (1) 2024.02.21