본문 바로가기
It Study/앱 개발 실습 기록(Flutter)

플러터 - 콜백 함수 연습 예제

by prlkt5200 2024. 8. 4.
반응형

코드 1

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import 'package:flutter/material.dart';
 
main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Body(),
      ),
    ),
  );
}
 
class Body extends StatelessWidget {
  const Body({super.key});
 
  @override
  Widget build(BuildContext context) {
    return TestWidget();
  }
}
 
class TestWidget extends StatefulWidget {
  const TestWidget({super.key});
 
  @override
  State<TestWidget> createState() => _TestWidgetState();
}
 
class _TestWidgetState extends State<TestWidget> {
  int value = 0;
 
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text(
          'Count: $value',
          style: const TextStyle(fontSize: 30),
        ),
        TestButton(addCounter),
      ],
    );
  }
 
  void addCounter(int addValue) {
    setState(() => value = addValue + value);
  }
}
 
class TestButton extends StatelessWidget {
  const TestButton(this.callback, {super.key});
 
  final Function(int) callback;
 
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.symmetric(vertical: 8),
      width: double.infinity,
      child: InkWell(
        onTap: () => callback.call(1),
        onDoubleTap: () => callback.call(5),
        onLongPress: () => callback.call(10),
        child: Center(
          child: Container(
            padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
            decoration: BoxDecoration(border: Border.all()),
            child: const Text(
              'Up Counter',
              style: TextStyle(fontSize: 24),
            ),
          ),
        ),
      ),
    );
  }
}
 
cs
반응형