개발이 좋아서/Flutter가 좋아서
![[flutter] 영상통화 앱_만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvzFkd%2FbtrVVQhFZzn%2FvyHmwB9ftKUOP50HnRnHPk%2Fimg.png)
[flutter] 영상통화 앱_만들기
1) 2) image, font 추가 3) main.dart import 'package:flutter/material.dart'; import 'package:video_call/screen/home_screen.dart'; void main() { runApp(MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( fontFamily: 'NotoSans', ), home: HomeScreen(), )); } 4) const/agora.dart 5) screen/home_screen.dart import 'package:flutter/material.dart'; import 'package:video_call/screen/cam_screen..
![[flutter] 영상통화 앱_환경세팅](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWMgtb%2FbtrVPGFtSOY%2F0IILvoBzHn9zHpsYKZuNx0%2Fimg.png)
[flutter] 영상통화 앱_환경세팅
1) - Agora 회원가입하고 로그인 - Project 생성 - Config 클릭 - Generate temp RTC Token 클릭 - Channel Name 입력하고 Generate 클릭 - Temp Token 복사 2) agora_rtc_engine 세팅 - android - ios 3) permission_handler 세팅 - android 딱히 안해도 됨 - ios 4) const로 세팅
![[flutter] StreamBuilder](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefcQ1f%2FbtrVOxg7ltB%2FDEkLre04bysI8QvIpHM3e1%2Fimg.png)
[flutter] StreamBuilder
1) 2) home_screen.dart import 'dart:math'; import 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { @override Widget build(BuildContext context) { final textStyle = TextStyle( fontSize: 16.0, ); return Scaffold( body: Padding( padd..
![[flutter] FutureBuilder](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdk4YI%2FbtrVK0qLdX2%2FVNn7rExOxTIgPODsGAKioK%2Fimg.png)
[flutter] FutureBuilder
1) 2) home_screen.dart import 'dart:math'; import 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { @override Widget build(BuildContext context) { final textStyle = TextStyle( fontSize: 16.0, ); return Scaffold( body: Padding( padd..
![[flutter] 오늘도 출근 - 근퇴관리 앱_만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9VGFn%2FbtrVOdCZ9hL%2F1GckpWi9qZXTphaykNKKRK%2Fimg.png)
[flutter] 오늘도 출근 - 근퇴관리 앱_만들기
1) 2) home_screen.dart import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { bool choolCheckDone = false; GoogleMapContr..
![[flutter] 오늘도 출근 - 근퇴관리 앱_환경 세팅](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fddv4fY%2FbtrVoGGBrvv%2F0LeajOFzrjhhyYbhJGbdJk%2Fimg.png)
[flutter] 오늘도 출근 - 근퇴관리 앱_환경 세팅
1) google_maps_flutter 다운 본인 인증과 카드 등록까지 하면 된다!! - android - ios 2) geolocator 다운 - android - ios
![[flutter] 동영상 플레이어](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba37Xu%2FbtrVf8pzst2%2FaYfJrS4bdjfUge73kUuyBk%2Fimg.png)
[flutter] 동영상 플레이어
1) pub.dev에서 video_player와 image_picker 다운 image_picker에서 ios 환경 설정 2) 3) main.dart import 'package:flutter/material.dart'; import 'package:vid_player/screen/home_screen.dart'; void main() { runApp( MaterialApp( home: HomeScreen(), ), ); } 4) screen/home_screen.dart import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:vid_player/component/custo..
![[flutter] navigation](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWYB4C%2FbtrVjPChuJE%2FykpZDAAfMWQgkhU5oV84e0%2Fimg.png)
[flutter] navigation
1) 2) main.dart import 'package:flutter/material.dart'; import 'package:navigation/screen/home_screen.dart'; import 'package:navigation/screen/route_one_screen.dart'; import 'package:navigation/screen/route_three_screen.dart'; import 'package:navigation/screen/route_two_screen.dart'; void main() { runApp( MaterialApp( // home: HomeScreen(), initialRoute: '/', routes: { '/': (context) => HomeScre..
![[flutter] button_ElevaredButton, OutlinedButton, TextButton, ButtonStyle](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG0iwP%2FbtrVjiLcvZF%2FpCk1VKjzLkl1b6x91JwDm0%2Fimg.png)
[flutter] button_ElevaredButton, OutlinedButton, TextButton, ButtonStyle
1) import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Center( child: Text( '버튼', ), ), ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAli..
![[flutter] 랜덤숫자 생성기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaMcua%2FbtrVclWNb88%2FVdRvgTEG5duwqW0fq2OTO1%2Fimg.png)
[flutter] 랜덤숫자 생성기
1) 2) component/number_row.dart import 'package:flutter/material.dart'; class NumberRow extends StatelessWidget { final int number; const NumberRow({ Key? key, required this.number, }) : super(key: key); @override Widget build(BuildContext context) { return Row( children: number .toInt() .toString() .split('') .map((e) => Image.asset( 'asset/img/$e.png', width: 50.0, height: 70.0, )) .toList(), ..