16일차 과제 링크 👉 16일차 과제
int a1 = 10;
int? a2 = 10; // null 허용
a1 = null; // 오류
a2 = null;
!
: null인지 점검int? a1 = 20;
a1!;
a1 = null;
a1!; // 런타임에러
int? some(arg) {
if(arg == 10) {
return 0;
} else {
return null;
}
}
main() {
int a = some(10)!;
print('a : $a'); // a : 0
int b = some(20)!;
print('b : $b'); // some() 함수가 null을 반환하므로 런타임에러
}
?.
?[]
: 멤버에 접근int? no1 = 10;
bool? res1 = no1?.isEven;
print('result1 : $res1'); // true
no1 = null;
bool? res2 = no1?.isEven;
print('result2 : $res2'); // null
List<int>? list = [10, 20, 30];
print('list[0] : ${list?[0]}'); // 10
list = null;
print('list[0] : ${list?[0]}'); // null
??=
: 값 대입int? d3;
d3 ??= 10;
print('data3: $d3'); // 10
d3 ??= null;
print('data3: $d3'); // 10
??
: 값 대체Map<String, dynamic> mapData = {
'myAge': 99,
'myName': 'asdf'
};
print(mapData['myAge']);
print(mapData['myHeight'] ?? '존재하지 않는 데이터입니다');
var dio = Dio();
var url = 'https://sniperfactory.com/sfac/http_randomly_null';
String? result = '';
var res = await dio.get(url);
print(res.data);
var item = res.data['item'];
result = item['name'] ?? 'null임'; // 35% 확률로 null
print(result);
try {
// 예외가 발생할 가능성이 있는 코드
} catch(e) {
// 예외처리를 위한 코드
} finally {
// 예외 발생 여부에 관계 없이 실행
}
try {
List items = ['a', 'b', 'c'];
print(items[3]);
} catch(e) {
print('어라 에러낫네 $e'); // 어라 에러낫네 RangeError (index): Invalid value: Not in inclusive range 0..2: 3
} finally {
print('메롱'); // 에러 나든 안나든 출력됨
}
try {
// 예외가 발생할 가능성이 있는 코드
} on RangeError {
// 특정 예외에 대한 처리
} catch (e) {
// 기타 예외 처리
} finally {
// 예외 발생 여부에 관계없이 실행되는 코드
}
try {
List items = ['a','b','c'];
print(items[3]);
} on RangeError catch (e) {
print('범위에러가 났다.: $e');
} catch (e) {
print('예외 발생: $e');
} finally {
print('finally 블록 실행');
}
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Dio dio = Dio();
String result = '';
void getData() async {
result = '';
setState(() {});
try {
var url = 'https://sniperfactory.com/sfac/http_randomly';
var res = await dio.get(url);
result = res.data['item']['name'];
} on DioError catch (e) {
print('에러가 낫다니');
result = e.message!;
} finally {
setState(() {});
}
}
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(result),
TextButton(
onPressed: (){
getData();
},
child: Text('메세지 가져오기')
),
],
),
),
),
);
}
}
FutureBuilder<String>(
future: Future.delayed(Duration(seconds: 3) => 'hello!'),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// 데이터를 기다리는 동안 표시할 로딩 화면
return CircularProgressIndicator();
} else {
// 데이터가 준비된 경우
if (snapshot.hasError) {
// 데이터 로드 중 오류가 발생한 경우
return Text('오류 발생: ${snapshot.error}');
} else {
// 데이터 로드 완료된 경우
return Text('결과: ${snapshot.data}');
}
}
},
);
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var dio = Dio();
var url = 'https://sniperfactory.com/sfac/http_test';
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('sniper factory'),
FutureBuilder(
future: dio.get('https://sniperfactory.com/sfac/http_test'),
builder: (context, snapshot) {
print(snapshot.connectionState);
if (snapshot.connectionState == ConnectionState.done) {
// 현재 futureBuilder 의 상태가 끝났을 때
return Text(snapshot.data!.data['result']);
}
return Container(
width: 20,
height: 20,
color: Colors.red,
);
}
),
],
),
),
),
);
}
}
**CircularProgressIndicator**
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var dio = Dio();
var url = 'https://sniperfactory.com/sfac/http_test';
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('sniper factory'),
FutureBuilder(
future: Future.delayed(Duration(seconds: 3), () => dio.get('https://sniperfactory.com/sfac/http_test')),
builder: (context, snapshot) {
print(snapshot.connectionState);
if (snapshot.connectionState == ConnectionState.done) {
// 현재 futureBuilder 의 상태가 끝났을 때
return Text(snapshot.data!.data['result']);
}
return CircularProgressIndicator();
}
),
],
),
),
),
);
}
}
**LinearProgressIndicator**
LinearProgressIndicator();
내용이 슬슬 어려워지고 있다.................
15일차부터
재밋는듯?
아닌가...
아닌거같기도하고
재밋는듯?!
아닌가...
재밋는데?!
아닌가.......
를 무한반복 중
재.재..재미.재밋.재.재밋다.....
답안지 감사히 잘 보겠습니다!