확장 가능한 떨림 응용 프로그램 구축(구조, 스타일, 약속, 상태 관리)
20534 단어 flutter
나는 네가 해야 할 일을 말하지 않겠지만, 네가 할 수 있는 일을 말할 것이다.이 가이드는 사용자와 다른 유지보수 응용 프로그램의 사용자가 원하는 내용을 쉽게 찾을 수 있도록 합니다.
이를 어떻게 실현할 것인가에 대해 논의해 보자는 것이다.
1) 아키텍처: 기능 기반
특성은 모든 소프트웨어 디자인의 기본 개념을 이해하는 것이다.소프트웨어 개발의 사용자 수요를 설명하는 데도 쓰인다.따라서 만약에 우리가 기능에 따라 프로젝트를 구축한다면 우리가 더 큰 단원으로 시스템을 구축할 때 프로젝트가 성장할 때 프로젝트를 관리하는 것이 더욱 쉽다.
기능별 프로젝트 구성
복잡한 응용 프로그램에서는 서로 다른 모듈이 어떻게 협업하는지 이해하기 어렵다.특성에 대한 체계 구조는 이것에 매우 도움이 된다. 왜냐하면 우리는 관련 논리
(widgets|utils|pages|stores|models|..etc)
을 특성에 분류했기 때문이다.우리는 작은 부품이 어떻게 협동하여 일을 하는지를 고려할 필요가 없고, 기능이 어떻게 협동하여 응용 프로그램을 구축하는지를 고려해야 한다.기능 간의 의존 관계를 분석함으로써 이 프로그램은 개발자가 프로젝트를 배우거나 볼 수 있도록 자동으로 이해할 수 있는 도표를 생성할 수 있다.피쳐 유형
어떤 특성이 오염되는 것을 방지하기 위해서는 이 특성의 업무 논리와 분리를 나타내는 것이 중요하다.이것이 바로 우리가 응용 프로그램을 두 개의 다른 층으로 나누어야 하는 이유이다.
Notice that auth, user, events, articles, …etc. features can be both infrastructure and app features, so what is the difference? that’s what we will discuss in the next section (Features anatomy).
특징 해부
인프라 기능: 유지 보수 서비스, 저장소, 모델, DTO, UTIL, 차단기, 검증기, 인터페이스 등
응용 프로그램 기능: 페이지, 위젯, 스타일, 글꼴, 색상 유지 보수.
Note: An app feature may consume multiple Infrastructure features
2) 이름 규약:파일 이름 지정
뱀 껍데기
snake case는 이름의 모든 알파벳을 소문자로 지정하고 이름의 단어를 밑줄로 구분하는 이름입니다.또한 Angular에서는 파일 이름, 유형 및 확장자를 구분하는 데 사용되는 점이 있습니다.
file_name.type.dart
파일 이름에 유형을 포함시키면 텍스트 편집기나 IDE를 사용하여 특정 파일 유형을 쉽게 찾을 수 있습니다.가장 일반적인 파일 유형은 입니다.작은 부품.풍격서비스사이즈.util.상점.
Create additional type names if you must but take care not to create too many.
예.
file_name.widget.dart
file_name.style.dart
file_name.model.dart
file_name.util.dart
3) 상태 관리: 공급자 + MVVM
상태 관리는 떨림의 복잡한 화제이다.모든 상태 관리 방법은 그 특징을 가지고 사람마다 서로 다른 선호를 가지고 있다.나에게 있어서 Provider은 이해하기 쉽고 코드를 너무 많이 사용할 필요가 없기 때문에 가장 좋은 선택이다.
즉, 공급자 자체가 신축 가능한 응용 프로그램을 구축하기에 부족하기 때문에 저는 최종적으로 공급자와 MVVM 기능을 결합한 상태 관리 패키지를 구축했고 이를 PMVVM이라고 명명했습니다.
P.MVVM
PMVVM에서는 사용자가 결정하는 3가지 주요 부품이 필요합니다.이 작품들은:
보기: 애플리케이션 논리가 없는 애플리케이션 UI를 나타냅니다.
ViewModel
은 상태가 변경될 때 UI를 업데이트하도록 view
에 공지를 보냅니다.ViewModel:
Model
과 View
사이의 다리를 충당합니다.Model
의 데이터를 변환하고 View
의 이벤트를 저장합니다.모델: 응용 프로그램 데이터와 업무 논리를 저장합니다.그것은 로컬 및 원격 데이터 소스, 모델 클래스, 저장소 등 업무 논리로 구성되어 있다.그것들은 보통 간단한 종류다.
우세하다✔️
간단하게 보기 위해서 당신의 작은 위젯에 자신의 이벤트가 있으면 상태를 직접 바꿀 수 있습니다. 예를 들어 페이지, 게시물 등은
MVVM
을 사용합니다.기다린다일부 주석
View
직접 액세스 불가능 Model
View
애플리케이션 논리 없음 ViewModel
은 여러 개의 View
이 있을 수 있다.사용법
1. 당신의
ViewModel
을 구축합니다. class MyViewModel extends ViewModel {
int counter = 0;
// Optional
@override
void init() {
// It's called after the ViewModel is constructed
}
// Optional
@override
void onBuild() {
// It's called everytime the view is rebuilt
}
void increase() {
counter++;
notifyListeners();
}
}
context
의 ViewModel
에 직접 액세스할 수도 있습니다. class MyViewModel extends ViewModel {
@override
void init() {
var height = MediaQuery.of(context).size.height;
}
}
2. 작은 부품에 MVVM
을 성명한다. class MyWidget extends StatelessWidget {
const MyWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MVVM<MyViewModel>(
view: (context, vmodel) => _MyView(),
viewModel: MyViewModel(),
);
}
}
3. 당신의 View
을 세우세요. class _MyView extends StatelessView<MyViewModel> {
/// Set [reactive] to [false] if you don't want the view to listen to the ViewModel.
/// It's [true] by default.
const _MyView({Key key}) : super(key: key, reactive: true);
@override
Widget render(context, vmodel) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(vmodel.counter.toString()),
SizedBox(height: 24),
RaisedButton(onPressed: vmodel.increase, child: Text('Increase')),
],
);
}
For more details, head to the package documentation
P.MVVM, 웹, 모바일 및 데스크탑 모두에 사용 가능
pmvvm
은 특히 응용 프로그램이 여러 플랫폼에서 실행될 때 완벽하게 실행할 수 있다.모든 뷰를 제어하는 단일 뷰 모델만 생성하면 됩니다.4) 스타일
Flatter에서는 색상, 문자열, 텍스트 스타일 및 주제에 대한 파일을 자주 만듭니다.이런 방식을 통해 모든 이 값들은 쉽게 찾을 수 있는 곳에 저장되기 때문에 프로그램을 유지하는 사람들의 생활을 더욱 수월하게 할 수 있을 것이다.
기능적인 스타일링
우리는
app-wide
색상, 글꼴, 테마, 애니메이션을 styles
이라는 응용 프로그램 기능으로 나누어야 한다.이런 방법은 프로그램의 모든 작은 위젯에 단일 원본의 스타일을 사용하게 할 것이다.예:
colors.style.dart
abstract class CColors {
static const white0 = Color(0xffffffff);
static const black100 = Color(0xff000000);
static const blue10 = Color(0xffedf5ff);
static const blue20 = Color(0xffd0e2ff);
static const blue30 = Color(0xffa6c8ff);
}
text.style.dart
abstract class CFonts {
static const primaryRegular = 'IBMPlexSans-Regular';
static const primaryLight = 'IBMPlexSans-Light';
static const primaryMedium = 'IBMPlexSans-Medium';
static const primarySemibold = 'IBMPlexSans-SemiBold';
static const primaryBold = 'IBMPlexSans-Bold';
}
More examples can be found Here
작은 위젯 스타일
작은 위젯이 복잡하고 특정한 조작에 기반한 반응 행위가 있다면 (예를 들어 단추를 눌렀을 때 배경 색깔이 변할 수 있음) 작은 위젯의 색깔과 레이아웃 변수를 작은 위젯 코드와 분리해야 할 수도 있습니다.
예:
tile.style.dart
abstract class TileStyle {
static const Map<String, dynamic> layouts = {
'tile-padding': const EdgeInsets.all(16),
};
static const Map<String, Color> colors = {
'tile-enabled-background-color': CColors.gray90,
'tile-enabled-label-color': CColors.gray30,
'tile-enabled-title-color': CColors.gray10,
'tile-enabled-description-color': CColors.gray30,
//
'tile-disabled-background-color': CColors.gray90,
'tile-disabled-label-color': CColors.gray70,
'tile-disabled-title-color': CColors.gray70,
'tile-disabled-description-color': CColors.gray70,
};
}
tile.widget.dart
class CTile extends StatelessWidget {
const CTile({
Key? key,
this.enable = true,
...
}) : super(key: key);
final bool enable;
final _colors = CTileStyle.colors;
final _layouts = CTileStyle.layouts;
@override
Widget build(BuildContext context) {
/// styles helpers
String cwidget = 'tile';
String state = enable ? 'enabled' : 'disabled';
return IgnorePointer(
ignoring: !enable,
child: Container(
color: _colors['$cwidget-$state-background-color'],
padding: _layouts['$cwidget-padding'],
child: ....,
),
);
}
}
More examples can be found Here
결론
본고에서 우리는 대형 응용 프로그램 개발에 필요한 네 가지 주요 부분을 소개했다.
요약은 다음과 같습니다.
소스 코드
본문의 완전한 예는 here에서 찾을 수 있다
Reference
이 문제에 관하여(확장 가능한 떨림 응용 프로그램 구축(구조, 스타일, 약속, 상태 관리)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/noureldinshobier/building-scalable-flutter-apps-architecture-styling-conventions-state-management-40c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)