728x90
Dart & Flutter
28

[Flutter] build error: Runtime JAR files in the classpath should have the same version. ....

아래와 같이 빌드 명령어를 실행했는데 에러가 발생한다. flutter build apk --split-per-abi w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath: C:/Users/jk042/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.6.10/e80fe6ac3c3573a80305f5ec43f86b829e8ab53d/kotlin-stdlib-jdk8-1.6.10.jar (version 1.6) C:/Users/jk042/.gradle/caches/modules-2/fi..

Dart & Flutter 2023.04.21

[Flutter] Build scheduled during frame

scroll을 할때 animatedcontainer의 크기를 변경하려고 하는데 다음과 같은 에러가 발생한다. Build scheduled during frame. While the widget tree was being built, laid out, and painted, a new frame was scheduled to rebuild the widget tree. 해결 방법은 간단하다. setState를 다음과 같이 수정해주면 된다. WidgetsBinding.instance.addPostFrameCallback((_) { setState(() {}); }); [Reference] https://github.com/gonuit/flutter-custom-refresh-indicator/issues/9

Dart & Flutter 2023.04.19

[Flutter] image, button 안쪽에 shadow 적용

box shape의 shadow를 적용하는 코드이다. blur, color, offset을 지정하여 수정해주기만 하면 된다. class InnerShadow extends SingleChildRenderObjectWidget { const InnerShadow({ super.key, this.blur = 10, this.color = Colors.black38, this.offset = const Offset(10, 10), Widget? child, }) : super(child: child); final double blur; final Color color; final Offset offset; @override RenderObject createRenderObject(BuildContext con..

Dart & Flutter 2023.04.19

[Flutter] push a new page for a specific duration (use mounted)

//push Navigator.of(context).push( MaterialPageRoute( builder: (context) { return Scaffold( backgroundColor: Theme.of(context).backgroundColor, body: const Center( child: Text( 'Break Time!', ), ), ), ); }, ), ); //duration await Future.delayed(const Duration(seconds: 3)); // pop!! if (mounted) Navigator.of(context).pop(); mounted란 현재 tree 안에 state object가 있는지를 bool 값으로 알려준다. async-await에 contex..

Dart & Flutter 2023.04.14

[Flutter/TextFormField] errorText는 표시하지 않고 errorBorder 표시

errorText를 표시하지 않고 Border의 색상만 바꾸고 싶을때 다음과 같이 errorStyle에서 height를 0으로 지정하고 validator에서 빈 문자를 return해주면 된다. 만약 그냥 빈 문자만 return한다면 TextFormField 아래에 공간이 생긴다. TextFormField( decoration: const InputDecoration( errorStyle: TextStyle(height: 0), ), validator: (_) => error ? '' : null, ), [reference] https://stackoverflow.com/questions/56426262/how-to-remove-error-message-in-textformfield-in-flutter

Dart & Flutter 2023.03.05

[Flutter] FlutterError (A dismissed Dismissible widget is still part of the tree. Make sure to implement the onDismissed handler and to immediately remove the Dismissible widget from the application once that handler has fired.)

FlutterError (A dismissed Dismissible widget is still part of the tree. Make sure to implement the onDismissed handler and to immediately remove the Dismissible widget from the application once that handler has fired.) ListView, Wrap 등에 Dismissible을 사용하면서 위와 같은 에러가 발생한다면 Dismissible의 key를 unique하게 지정해주면 된다. 예를 들어서 다음과 같이 index를 key value에 넣어서 지정해주는 것은 안된다. for (int index = 0; index < state.keywo..

Dart & Flutter 2023.03.05

[Flutter] BuildContext 이해하기

BuildContext는 Flutter에서 중요한 개념 중 하나이다. 따라서 BuildContext가 무엇인지 이해해보자. Flutter widget tree flutter에서 모든 것은 widget이다. container, text, button 등등... 그리고 이 widget들이 쌓여 구성된 것을 widget tree라고 부른다. widget tree는 root widget을 가지고 있으며 parent widget들과 child widgets들도 있음을 의미한다. 어떤 widget이 다른 widget을 rendering한다면 그것은 parent widget이며 rendering되는 것은 child widget이다. BuildContext가 뭐야? BuildContext는 tree 내의 각 widge..

Dart & Flutter 2023.02.24

[Flutter] context watch, read, select의 차이

watch context.watch() 에서 T가 변할 때마다 값을 받는다. 예를 들어서 버튼을 누를때마다 화면에 나오는 숫자가 변해야한다면 watch를 사용한다. read context.read() 에서 T가 watch에서처럼 변할 때마다 값을 받지 않는다. 예를 들어서 버튼을 누를때 발생하는 이벤트(함수)를 사용하기위해 사용한다. select watch에서 T가 변할때마다 값을 받았다면 select는 T 안의 어떤 특정 부분이 변할때마다 값을 받는 것이다. 예를 들어서 T에 status(loading, success, failure)가 있다고 하고 context.select((boc) => bloc.state.status) 처럼 status가 변할때마다 값을 받을 수 있다.

Dart & Flutter 2023.02.23

[Dart] PublishSubject와 BehaviorSubject

PublishSubject final subject = PublishSubject(); // receive all data and done events (1, 2, 3 모두 출력) subject.stream.listen(print); subject.add(1); subject.add(2); // only receive 3 and done event (3만 출력) subject.stream.listen(print); subject.add(3); subject.close(); 위 코드에서는 간단하게 listener를 print로 지정했으며 모든 값들을 출력해준다. 맨 처음에 지정한 listener기준으로 1, 2, 3을 보내면 차례대로 모두 출력해주고 중간에 지정한 listener는 이후에 3만 보냈으니 3..

Dart & Flutter 2023.02.19
728x90