Flutter/일반

[Flutter] GestureDetector μ‚¬μš©λ²• - μœ„μ ―μ„ 마우슀둜 μ΄λ™ν•˜λŠ”λ²•

Hac. Dog 🌭 2023. 2. 27. 00:59

 

제슀처λ₯Ό κ°μ§€ν•˜λŠ” μœ„μ ―μž…λ‹ˆλ‹€.

NULL이 μ•„λ‹Œ μ½œλ°±μ— ν•΄λ‹Ήν•˜λŠ” 제슀처λ₯Ό μΈμ‹ν•©λ‹ˆλ‹€.

이 μœ„μ ―μ— μžμ‹μ΄ 있으면 ν¬κΈ°λŠ” ν•΄λ‹Ή μžμ‹μ„ λ”°λ₯΄κ³  λ§Œμ•½ μžμ‹μ΄ μ—†μ„κ²½μš° λΆ€λͺ¨μ— λ§žμΆ°μ„œ 크기가 μ‘°μ •λ©λ‹ˆλ‹€.

 

https://api.flutter.dev/flutter/widgets/GestureDetector-class.html


 

μ‚¬μš©λ²•μ€ κ°„λ‹¨ν•©λ‹ˆλ‹€.

μ‚¬μš©ν•˜λ €λŠ” Gesture 속성을 μ„ νƒν•˜κ³  μ–΄λ–€ λ™μž‘μ„ ν• μ§€ μ„ μ–Έν•˜λ©΄ λ©λ‹ˆλ‹€.

import 'package:flutter/material.dart';

void main() => runApp(
      MaterialApp(
        home: HomeScreen(),
      ),
    );

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

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  double _top = 0;
  double _left = 0;

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Positioned(
          top: _top,
          left: _left,
          child: GestureDetector(
            onTap: () => print('Tapeed!'),
            onPanUpdate: (details) => setState(
              () {
                _top += details.delta.dy;
                _left += details.delta.dx;
              },
            ),
            child: Container(
              height: 100,
              width: 100,
              color: Colors.red,
            ),
          ),
        ),
      ],
    );
  }
}

μœ„μ™€ 같이 StatefulWidget을 μ΄μš©ν•˜μ—¬ λ²„νŠΌμ„ ν΄λ¦­μ‹œ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¬μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

import 'package:flutter/material.dart';

void main() => runApp(
      MaterialApp(
        home: HomeScreen(),
      ),
    );

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: _title,
      home: MyStatefulWidget(),
    );
  }
}

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

  @override
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  bool _lightIsOn = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: FractionalOffset.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Icon(
                Icons.lightbulb_outline,
                color: _lightIsOn ? Colors.yellow.shade600 : Colors.black,
                size: 60,
              ),
            ),
            GestureDetector(
              onTap: () => setState(
                () {
                  _lightIsOn = !_lightIsOn;
                },
              ),
              child: Container(
                color: Colors.yellow.shade600,
                padding: EdgeInsets.all(8),
                child: Text(_lightIsOn ? 'TURN LIGHT OFF' : 'TURN LIGHT ON'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}