Skip to content

Commit cc7288d

Browse files
committed
Useful shell scripts for flutter project
1 parent 7f498a4 commit cc7288d

File tree

2 files changed

+197
-0
lines changed

2 files changed

+197
-0
lines changed

runner.sh

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/bin/bash
2+
3+
# shellcheck disable=SC2046
4+
echo "Running " $(date)
5+
6+
echo "Which command do you want to run to me ..."
7+
8+
_titleList=("0 : For Pod Installation Error for m1Mac" "1: For Pod Installation Error for IntelMac" "2 : Build flutter project to iOS" "3 : Build flutter project to Android" "4: Watch JSON Serialization" "5: Build flutter App Icon" "6: Build Splash Screen")
9+
10+
_cmdList=("cd ios && arch -x86_64 pod install --repo-update && cd .." "flutter clean && flutter pub get && cd ios && pod deintegrate && rm -rf Pods && rm -rf Podfile.lock && pod cache clean --all && pod install && cd .." "flutter clean && flutter build ios && cd ios && open Runner.xcworkspace && cd .." "flutter clean && flutter build appbundle" "dart run build_runner watch --delete-conflicting-outputs" "dart run flutter_launcher_icons:main" "dart run flutter_native_splash:create")
11+
12+
for str in "${_titleList[@]}"; do
13+
echo "$str"
14+
done
15+
16+
echo
17+
18+
# shellcheck disable=SC2162
19+
read command
20+
21+
re='^[0-9]+$'
22+
23+
if ! [[ "$command" =~ $re ]]; then
24+
echo "Invalid digit"
25+
exit
26+
elif [ "$command" -gt 6 ]; then
27+
echo "Invalid number"
28+
elif [ "$command" -lt 0 ]; then
29+
echo "Invalid negative number"
30+
else
31+
echo
32+
fi
33+
34+
echo "====> ${_titleList[$command]}"
35+
36+
echo
37+
38+
eval "${_cmdList[$command]}"
39+
40+
echo
41+
42+
echo "Successfully " $(date)

structure.sh

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
#!/bin/bash
2+
3+
# Maintainer by ThetMyoKhaing(https://github.com/tomari99)
4+
5+
echo "input your module name"
6+
read module
7+
8+
mkdir $module
9+
10+
cd $module
11+
12+
make_folder() {
13+
mkdir api
14+
mkdir domain
15+
mkdir presentation
16+
17+
mkdir domain/entities
18+
mkdir domain/repositories
19+
mkdir domain/use_cases
20+
21+
mkdir presentation/views
22+
mkdir presentation/controllers
23+
24+
mkdir presentation/views/widgets
25+
26+
touch api/${module}_api_service.dart
27+
28+
touch presentation/controllers/${module}_controller.dart
29+
30+
touch domain/repositories/${module}_repositories.dart
31+
touch domain/repositories/${module}_repositories_impl.dart
32+
33+
touch domain/entities/$module.dart
34+
touch domain/entities/${module}_model.dart
35+
36+
touch domain/use_cases/${module}_usecase.dart
37+
}
38+
39+
make_folder
40+
41+
uppercase=$(echo "$module" | awk '{print toupper(substr($0, 1, 1)) tolower(substr($0, 2))}')
42+
43+
api="class ${uppercase}ApiService {}"
44+
45+
echo "$api" >api/${module}_api_service.dart
46+
47+
entity="import 'package:equatable/equatable.dart';
48+
49+
// Business object $module
50+
abstract class ${uppercase} extends Equatable {
51+
52+
const ${uppercase}();
53+
54+
@override
55+
List<Object?> get props => [];
56+
}"
57+
58+
echo "$entity" >domain/entities/$module.dart
59+
60+
model="import '../../domain/entities/${module}.dart';
61+
62+
class ${uppercase}Model extends ${uppercase} {
63+
const ${uppercase}Model();
64+
}"
65+
66+
echo "$model" >domain/entities/$module\_model.dart
67+
68+
repo="// Abstract Business logic methods
69+
import '../entities/$module.dart';
70+
71+
abstract class ${uppercase}Repository {}"
72+
73+
echo "$repo" >domain/repositories/$module\_repositories.dart
74+
75+
repo_impl="import 'dart:async';
76+
77+
import '../../domain/entities/$module.dart';
78+
import '../../api/${module}_api_service.dart';
79+
import '../../domain/repositories/${module}_repositories.dart';
80+
import '../../domain/repositories/${module}_repositories.dart';
81+
import '../entities/${module}_model.dart';
82+
83+
// Implemented Business logic methods
84+
class ${uppercase}RepositoryImpl implements ${uppercase}Repository {
85+
late ${uppercase}ApiService _apiService;
86+
87+
${uppercase}RepositoryImpl() {
88+
_apiService = ${uppercase}ApiService();
89+
}
90+
}
91+
"
92+
93+
echo "$repo_impl" >domain/repositories/$module\_repositories_impl.dart
94+
95+
usecase="import '../entities/$module.dart';
96+
import '../repositories/${module}_repositories.dart';
97+
98+
class ${uppercase}UseCase {
99+
final ${uppercase}Repository _${module}Repository;
100+
${uppercase}UseCase(this._${module}Repository);
101+
102+
}"
103+
104+
echo "$usecase" >domain/use_cases/$module\_usecase.dart
105+
106+
controller="import 'package:get/get.dart';
107+
108+
import '../../domain/repositories/${module}_repositories_impl.dart';
109+
import '../../domain/entities/$module.dart';
110+
import '../../domain/use_cases/${module}_usecase.dart';
111+
112+
class ${uppercase}Controller extends GetxController {
113+
late ${uppercase}UseCase _${module}UseCase;
114+
115+
@override
116+
onInit() {
117+
super.onInit();
118+
_${module}UseCase = ${uppercase}UseCase(${uppercase}RepositoryImpl());
119+
}
120+
121+
}"
122+
123+
echo "$controller" >presentation/controllers/$module\_controller.dart
124+
125+
pwd
126+
127+
test="import 'package:flutter_test/flutter_test.dart';
128+
import 'package:mockito/annotations.dart';
129+
import 'package:mockito/mockito.dart';
130+
import '../../lib/$module/domain/entities/${module}_model.dart';
131+
import '../../lib/$module/domain/repositories/${module}_repositories.dart';
132+
import '../../lib/$module/domain/use_cases/${module}_usecase.dart';
133+
134+
@GenerateMocks([${uppercase}Repository])
135+
void main() {
136+
late Mock${uppercase}Repository repo;
137+
late ${uppercase}UseCase usecase;
138+
setUp(() {
139+
repo = Mock${uppercase}Repository();
140+
usecase = ${uppercase}UseCase(repo);
141+
});
142+
143+
group(\"dummy\", () {
144+
test(\"test description\", () async {
145+
// arrange
146+
147+
// action
148+
149+
// assert
150+
151+
});
152+
});
153+
}"
154+
155+
cd ../../test && mkdir $module && cd $module && touch ${module}_test.dart && echo "$test" >${module}_test.dart

0 commit comments

Comments
 (0)