flutter
-
appbundle 뽑다 오류flutter 2021. 8. 7. 23:01
Could not get unknown property 'release' for SigningConfig container of type org.gradle.api.internal.FactoryNamedDomainObjectContainer. 오류 buildTypes { release { minifyEnabled true signingConfig signingConfigs.release useProguard true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.debug } } 했는데도 오류가 났다 아래를 참조 htt..
-
빌드오류 Cannot run with sound null safety because dependencies don't support null safetyflutter 2021. 8. 2. 03:10
다트 패키지 중에서 null-safety를 지원하지 않는 패키지에 대해 빌드시 오류가 발생하는 듯 합니다 로컬 빌드할때 안드로이드 스튜디오 기준, Additional run args 에 --no-sound-null-safety 옵션을 추가하면 빌드정상적으로 됩니다 그런데 apk파일 뽑을때도 같은 오류가 납니다 flutter build apk --no-sound-null-safety 옵션을 붙여줘서 실행하면 apk파일이 잘 추출됩니다 최종 오류가 * Where: Script 'E:\src\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 1035 * What went wrong: Execution failed for task ':app:compile..
-
bloc 이벤트 관리를 위한 transformEventsflutter 2021. 7. 26. 22:00
flutter_bloc에서 bloc에 event를 add하면 bloc에 정의된 mapEventToState로 향합니다. bloc은 이벤트에 따른 로직을 거친뒤 상태에 대한 Stream을 리턴해줍니다. 하지만 블록을 사용하다보면 특정 이벤트가 들어오는 빈도수를 조정한다거나, 이벤트에 대해 재정의해줘야 될 때가 있습니다. 예를들어 스패밍 공격을 당해 게시글 등록을 여러번 클릭하면 클릭한 횟수만큼 동일한 게시글이 포스팅될 수도 있습니다. 그런 문제를 핸들링하기위해서 bloc 에서 transformEvents 메소드를 재정의할 필요가 있습니다. 패키지의 설명을 보면 기본적으로 mapEventToState 메소드로 가기위한 이벤트는 transitionFn 함수를 통과해야한다고 기술되어있습니다. transformE..
-
Equatable의 사용과 Blocflutter 2021. 7. 18. 02:26
플러터에서도 자바와 비슷하게 객체를 == 로 비교할 수 있습니다. 메모리 주소를 비교합니다. mainBloc1 = MainBloc(); mainBloc2 = MainBloc(); print(mainBloc1==mainBloc2); 따로 한개의 인스턴스만 생성되도록 정의되어 있지 않다면 결과는 false입니다. 객체 비교에 대해서 재정의하려면 비교할 내용을 재정의하면 됩니다. 적용이 필요한 해당 모델 클래스에서 bool operator 를 오버라이드해서 비교로직을 작성하면됩니다. @override bool operator ==(Object other) { return .. 비교하고자 하는 속성 재정의 } 이러한 객체의 세부적인 비교를 편리하게 해주기 위함이 Equatable의 상속입니다. 다트 패키지에서 ..
-
bloc 패턴 - flutter_bloc 패키지 사용flutter 2021. 7. 16. 23:33
** flutter_bloc: ^7.0.0 기준으로 작성됨. bloc패턴을 정석적으로 구현하려면 코드가 다소 방대해지기 때문에, rxdart의 스트림을 활용하여 구현하는 경우가 있습니다. class를 생성하여 bloc으로 정의하고, 내부 로직은 rxdart를 사용하여 상태를 변경할때마다 생성된 인스턴스에서 그클래스로 event를 던지고, 이 이벤트를 listen하여 각각 함수로 분기하여 sink 에 add 하는 방식으로 구현할 수 있습니다. 이렇게 하고 sink의 최신값을 지속적으로 갱신할 수 있습니다. 클라이언트 view 단에서는 해당 클래스의 BehaviorSubject의 stream 을 StreamBuilder를 구현하여 StreamBuilder의 상태가 바뀔때마다 실시간으로 변경되는 데이터나 UI..
-
bloc패턴 -rxdart를 활용한 약식flutter 2021. 7. 3. 23:52
state클래스와 BlocBuilder나 BlocProvider를 사용하지않고, 간소화되서 구현한 코드이다. MainBloc에 event가 들어오면 MainBloc의 생성자쪽의 스트림컨트롤러가 이벤트를 구독하고, 해당 로직으로 나눠준다. class MainBloc extends MainBlocBase { Sink get addEvent => _addEvent; final _addEvent = StreamController(); MainBloc(repo) : super(repository) { // MainBloc의 constructor, _addEvent.stream.listen((action) { // _addEvent가 다른곳에서 MainBloc에 던지는 이벤트를 관찰하고, // switch문에서 이..
-
flutter bloc 패턴, rxdart..flutter 2021. 7. 3. 23:40
블록패턴은 옵저버 패턴의 일종으로..이벤트를 구독하여 비즈니스로직과 ui를 최대한 분리하는게 원칙이다. bloc패턴을 구현하는법도 여러가지 방법이있고 라이브러리도 다양하다. stream관련되어서도 여러 라이브러리가있다. rxdart같은 경우 stream을 조금 더 확장한 버전이라고 볼수있고.. 두개이상의 BehaviorSubject를 관찰하여 여러가지 값이 들어올때 이벤트를 listen 하게끔 할수도있다. Rx.combineLatest2(firstSubscription, secondSubscription, (first, second) {}).listen((event) async { print('do action :'); // firstSubscription 과 secondSubscription가 둘다 작..
-
TabBarView PageView에서 위젯 리빌드 방지flutter 2021. 5. 3. 19:10
PageView등에서 children 위젯을 여러개 가질경우, 네비게이션바에서 그페이지가 아닌 다른 페이지를 들어가도, 전체 위젯이 계속 빌드됨.. 불필요한 rebuild를 막기위한 방법.. stackoverflow.com/questions/57704265/how-to-prevent-rebuild-statelesswidget-children-of-pageview How to prevent rebuild StatelessWidget children of PageView I've create simple PageView app to test multiple pages. import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class ..