제목은 거창하지만 내부 발표용으로 간단한게 제작해 내용이 별거 없습니다.
https://docs.flutter.dev/get-started/flutter-for/web-devs
Flutter는 Dart 프로그래밍 언어를 사용하는 크로스 플랫폼 애플리케이션(모바일 애플리케이션만이 아님)을 빌드하기 위한 프레임워크.
출처 : https://www.itworld.co.kr/news/108761
출처 : https://insights.stackoverflow.com/survey/2021#technology-most-loved-dreaded-and-wanted
Future
는 Promise
와 유사하게 작동하며 async/await
또한 존재const test = async () => {
await setTimeout(()=> {}, 1000);
return 1;
};
const main = async () => {
let val = test();
console.log(val);
}
main();
=> Promise {<pending>}
Future<int> test() async {
return await Future.delayed(
const Duration(seconds: 1),
() {
return 1;
},
);
}
void main() async {
final i = test();
print(i);
}
=> Instace of '_Future<int>'
var name = 'bob';
name = 5; // 에러 발생
for (const element of list) {
console.log(element);
}
for (final element in list) {
print(element);
}
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
List<int> numbers; // 에러 발생
List<int?> numbers; // 명시적으로 null 가능성이 있음을 알려야함.
numbers = [1, null, 3, 4, 5];
this
에 대해서도 명확하게 작동한다. 함수에서는 this
를 사용할 수 없으며 실행 컨텍스트에 따라 달라지지도 않는다. → 항상 현재 인스턴스를 참조
플러터 앱 생성 - 6개 플랫폼을 지원한다 무려!!
폴더 구조 lib안의 코드가 dart 코드이다.
출처 : https://hackernoon.com/whats-revolutionary-about-flutter-946915b09514
출처 : https://hackernoon.com/whats-revolutionary-about-flutter-946915b09514
class StatelessButton extends StatelessWidget {
const StatelessButton({Key? key}) : super(key: key);
final int i = 0; // final 혹은 const가 아니면 에러 발생
Widget build(BuildContext context) {
return TextButton(
onPressed: () {
},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text('${i}'),
Icon(Icons.ac_unit),
],
),
);
}
}
class StatefulButton extends StatefulWidget {
const StatefulButton({Key? key}) : super(key: key);
State<StatefulButton> createState() => _StatefulButtonState();
}
class _StatefulButtonState extends State<StatefulButton> {
int i = 0;
Widget build(BuildContext context) {
return TextButton(
onPressed: () {
setState(() {
i += 1;
});
},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text('${i}'),
Icon(Icons.ac_unit),
],
),
);
}
}
<div class="grey-box">
Lorem ipsum
</div>
.grey-box {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Roboto;
display: flex;
align-items: center;
justify-content: center;
}
TextStyle bold24Roboto = const TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.bold,
);
final container = Container(
// grey box
width: 320,
height: 240,
color: Colors.grey[300], // or Colors.fromRGB(224,224,224)
child: Center(
child: Text(
'Lorem ipsum',
style: bold24Roboto,
),
),
);
class PrettyText extends StatelessWidget {
const PrettyText({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return Text(
'안녕하세요',
style: TextStyle(
fontSize: 36,
fontWeight: FontWeight.w900,
shadows: kElevationToShadow[3],
color: Colors.blueGrey,
),
);
}
}
class PrettyButton extends StatelessWidget {
const PrettyButton({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {},
onHover: (value) {},
child: Text('버튼 스타일링 예제'),
style: ButtonStyle(
overlayColor: MaterialStateProperty.all(Colors.red),
backgroundColor: MaterialStateProperty.all(Colors.black),
elevation: MaterialStateProperty.all(10),
),
);
}
}
onhover
시 더 정교한 스타일링이 하고 싶다면 커스텀 위젯 만들어야함.
텍스트를 선택 가능하게 하려면 저걸 써줘야 한다. 심지어 3.7 버전(거의 최신) 이전에는 지원도 안됐다.
웹의 경우 캔버스 위에 그린다…
flutter 개발 커뮤니티에서 유지보수 하는 인기 라이브러리인데도 아직 버전이 0.X이고 플랫폼도 3개만 지원한다.
사실 위의 단점을 보면 알겠지만 ios/android 개발에는 매우 좋다.
java, swift 보다는 쉽다.
간단한거는
많이 사랑해주세요.