개발 |/Flutter

빡공 이틀차, flutter

어섬 2022. 12. 29. 21:16

많은 것을 공부하게 되었다. 

 

기본적인거라면, 텍스트나 위젯이 라우팅할때 이상하다면, Scaffold나 BottomTab같은 기본 위젯으로 쌓여있나 확인해봐야하고, 

 

constructor 뒤에 이렇게 인스턴스 만들떄 항상 실행시켜주는 함수를 추가할 수 있다. 콜백함수는 아니고 뭐랄까.. 콜포워드함수 같은거랄까. 이게 꼭 필요했는데 좋았다. NotifierProvider할 때, state를 초기화 시켜주는데 이 방법을 사용할 수 있다는 것이 신기했음.  이제 저건 constructor 밑에 class안에 선언된 함수를 적용시킬 수 있다.

 

  const MyApp({super.key}){ initFuction() };

 

Color(0xff 헥스값) 

이것도 익숙해졌고 

 

GestureDetector를 doubleTap같은 메소드보면서 나중에 다양하게 활용할 수도 있겠다는 생각이 들었으며, 

 

파이어베이스 관련 로직들도 많이 알았다. Query와 QuerySnapshot 그리고 Doc 이건 또 로직 만들면서 한 번 더 해보고 정리해야지 

 

Expanded 안에 SingleChildScrollView 들어가는거 확인했고, 앞으로 이상하면 내가 Expanded를 이상한 위젯에 적용한 것.. 

잘 분리해놔서 진짜 코드 볼 떄 안헷갈리게 해놓는게 생산성을 많이 향상시킬 것 같다고 생각했다. 

 

 

 

 

아 그리고 TextInputController 신기하게, 직접 값을 바꿀 수 있다. 

secure storage 에서 임시저장한 값을 가져와서 현재 textinputController.text에 때려박아도 자동으로 된다. 

하지만 여러가지 안정성 문제로 스택 오버플로우에서는

 messageTextController.value = TextEditingValue(
        text: text,
        selection: TextSelection.fromPosition(
          TextPosition(offset: text.length),
        ),
      );

요런식으로 쓰는 것을 좀 더 추천하더이다. TextSelection을 쓴다나뭐다나 

 

 

secureStorage는 write으로 쓰고, 키 밸류 값 항상 jsonDecode jsonEncode해줘야하는거 다시금 상기했고, 

 

 

FlutterToast도 그냥 쓰다가, 이번에 작성해보면서 별거 없구나 싶었다. 

 

 

아 팝업창은 ShowDialog와 AlertDialog 

showDialog(
        context: context,
        builder: (BuildContext context) => AlertDialog(
          actionsAlignment: MainAxisAlignment.center,
          titleTextStyle: const TextStyle(
            color: Color(0xff72D4A5),
            fontFamily: "neodgm",
            fontSize: 22,
          ),
          contentTextStyle: TextStyle(
            color: Color(0xff72D4A5),
            fontFamily: "neodgm",
            fontSize: 18,
          ),
          backgroundColor: Color(0xff262630),
          title: Text('텔레파시를 전송합니다🚀'),
          content: Text("텔레파시 배터리가 1개 차감됩니다."),
          actions: [
            ElevatedButton(
                style: ElevatedButton.styleFrom(
                    textStyle: TextStyle(
                      color: Color(0xff72D4A5),
                      fontFamily: "neodgm",
                      fontSize: 20,
                    ),
                    backgroundColor: Color(0xff72D4A5),
                    minimumSize: Size(40, 50)),
                onPressed: () => Navigator.of(context).pop(),
                child: Text('보내기')),
          ],
        ),

요런식으로 쓴다고 보면 된다. 

 

 

 

근데 

CrossAxisAlignment는 stretch로하면 버튼 길이는 쭈욱 늘어난다. 

위젯들이 자동으로 상위 위젯의 공간을 다 차지하려고 하는 것 같은데(상위 위젯의 크기가 정의되어있다면 말이지) 

이건 진짜 꼭 정리 하고 만다.. 

아까전에 Button이 Expanded 위젯의 크기를 자꾸 꽉 채워서 문제였는데 그래서 

expanded는 남은 공간들에서 비율로 차지한다는 설명이 떠올라서 

버튼 자체는 Expanded에 구애받지 않고, 그냥 사이즈 크기 딱 정해버렸고 

버튼이 맨 아래에 있었고 위에있는 다른 위젯들은 모두 Expanded로 서로 공간을 나누어 가지게 되었다. 

flexible은 나머지 공간을 버리는거라그랬나? 아무튼 나머지 공간을 활용한다는 점을 잘 생각하면서 하면 expanded이용해서 화면 그리기 좀 더 수월해질듯