Initial commit

This commit is contained in:
kicap
2024-03-02 08:48:26 +08:00
commit 758f5f3d8f
181 changed files with 9753 additions and 0 deletions

View File

@ -0,0 +1,25 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedBottomsheetGenerator
// **************************************************************************
import 'package:stacked_services/stacked_services.dart';
import 'app.locator.dart';
import '../ui/views/retributor_index/log_history_sewaan/detail_log_history/detail_log_history_view.dart';
enum BottomSheetType {
detailLogHistoryView,
}
void setupBottomSheetUi() {
final bottomsheetService = locator<BottomSheetService>();
final Map<BottomSheetType, SheetBuilder> builders = {
BottomSheetType.detailLogHistoryView: (context, request, completer) =>
DetailLogHistoryView(request: request, completer: completer),
};
bottomsheetService.setCustomSheetBuilders(builders);
}

67
lib/app/app.dart Normal file
View File

@ -0,0 +1,67 @@
import 'package:stacked_services/stacked_services.dart';
import 'package:stacked/stacked_annotations.dart';
import '../services/http_services.dart';
import '../services/my_easyloading.dart';
import '../services/my_socket_io_client.dart';
import '../services/other_function.dart';
import '../services/shared_prefs.dart';
import '../ui/views/login_screen/login_screen_view.dart';
import '../ui/views/penyewa_index/penyewa_index_view.dart';
import '../ui/views/penyewa_index/penyewa_log/penyewa_log_view.dart';
import '../ui/views/penyewa_index/pulsa_detail/pulsa_detail_view.dart';
import '../ui/views/penyewa_index/tempat_sewaan/tempat_sewaan_view.dart';
import '../ui/views/retributor_index/log_history_sewaan/detail_log_history/detail_log_history_view.dart';
import '../ui/views/retributor_index/log_history_sewaan/log_history_sewaan_view.dart';
import '../ui/views/retributor_index/penyewa_list/edit_penyewa_dialog/edit_penyewa_dialog_view.dart';
import '../ui/views/retributor_index/penyewa_list/penyewa_list_view.dart';
import '../ui/views/retributor_index/penyewa_list/top_up_saldo/top_up_saldo_view.dart';
import '../ui/views/retributor_index/retributor_index_view.dart';
import '../ui/views/retributor_index/scan_rfid_dialog/scan_rfid_dialog_view.dart';
import '../ui/views/retributor_index/tempat_sewa_list/edit_tempat_sewa_dialog/edit_tempat_sewa_dialog_view.dart';
import '../ui/views/retributor_index/tempat_sewa_list/tempat_sewa_list_view.dart';
import '../ui/views/splash_screen/splash_screen_view.dart';
@StackedApp(
routes: [
MaterialRoute(page: SplashScreenView, initial: true),
MaterialRoute(page: LoginScreenView),
MaterialRoute(
page: RetributorIndexView,
children: [
MaterialRoute(page: TempatSewaListView),
MaterialRoute(page: LogHistorySewaanView),
MaterialRoute(page: PenyewaListView),
],
),
MaterialRoute(page: PenyewaIndexView, children: [
MaterialRoute(page: PenyewaLogView),
MaterialRoute(page: TempatSewaanView),
MaterialRoute(page: PulsaDetailView),
])
],
dialogs: [
StackedDialog(classType: ScanRfidDialogView),
StackedDialog(classType: TopUpSaldoView),
StackedDialog(classType: EditTempatSewaDialogView),
StackedDialog(classType: EditPenyewaDialogView)
],
bottomsheets: [
StackedBottomsheet(classType: DetailLogHistoryView),
],
dependencies: [
LazySingleton(classType: NavigationService),
LazySingleton(classType: DialogService),
LazySingleton(classType: SnackbarService),
LazySingleton(classType: BottomSheetService),
//
LazySingleton(classType: MyEasyLoading),
LazySingleton(classType: MyHttpServices),
LazySingleton(classType: OtherFunction),
LazySingleton(classType: MySocketIoClient),
LazySingleton(classType: MySharedPrefs)
],
logger: StackedLogger(),
)
class App {}

37
lib/app/app.dialogs.dart Normal file
View File

@ -0,0 +1,37 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedDialogGenerator
// **************************************************************************
import 'package:stacked_services/stacked_services.dart';
import 'app.locator.dart';
import '../ui/views/retributor_index/penyewa_list/edit_penyewa_dialog/edit_penyewa_dialog_view.dart';
import '../ui/views/retributor_index/penyewa_list/top_up_saldo/top_up_saldo_view.dart';
import '../ui/views/retributor_index/scan_rfid_dialog/scan_rfid_dialog_view.dart';
import '../ui/views/retributor_index/tempat_sewa_list/edit_tempat_sewa_dialog/edit_tempat_sewa_dialog_view.dart';
enum DialogType {
scanRfidDialogView,
topUpSaldoView,
editTempatSewaDialogView,
editPenyewaDialogView,
}
void setupDialogUi() {
final dialogService = locator<DialogService>();
final Map<DialogType, DialogBuilder> builders = {
DialogType.scanRfidDialogView: (context, request, completer) =>
ScanRfidDialogView(request: request, completer: completer),
DialogType.topUpSaldoView: (context, request, completer) =>
TopUpSaldoView(request: request, completer: completer),
DialogType.editTempatSewaDialogView: (context, request, completer) =>
EditTempatSewaDialogView(request: request, completer: completer),
DialogType.editPenyewaDialogView: (context, request, completer) =>
EditPenyewaDialogView(request: request, completer: completer),
};
dialogService.registerCustomDialogBuilders(builders);
}

41
lib/app/app.locator.dart Normal file
View File

@ -0,0 +1,41 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedLocatorGenerator
// **************************************************************************
// ignore_for_file: public_member_api_docs, implementation_imports, depend_on_referenced_packages
import 'package:stacked_services/src/bottom_sheet/bottom_sheet_service.dart';
import 'package:stacked_services/src/dialog/dialog_service.dart';
import 'package:stacked_services/src/navigation/navigation_service.dart';
import 'package:stacked_services/src/snackbar/snackbar_service.dart';
import 'package:stacked_shared/stacked_shared.dart';
import '../services/http_services.dart';
import '../services/my_easyloading.dart';
import '../services/my_socket_io_client.dart';
import '../services/other_function.dart';
import '../services/shared_prefs.dart';
final locator = StackedLocator.instance;
Future<void> setupLocator({
String? environment,
EnvironmentFilter? environmentFilter,
}) async {
// Register environments
locator.registerEnvironment(
environment: environment, environmentFilter: environmentFilter);
// Register dependencies
locator.registerLazySingleton(() => NavigationService());
locator.registerLazySingleton(() => DialogService());
locator.registerLazySingleton(() => SnackbarService());
locator.registerLazySingleton(() => BottomSheetService());
locator.registerLazySingleton(() => MyEasyLoading());
locator.registerLazySingleton(() => MyHttpServices());
locator.registerLazySingleton(() => OtherFunction());
locator.registerLazySingleton(() => MySocketIoClient());
locator.registerLazySingleton(() => MySharedPrefs());
}

159
lib/app/app.logger.dart Normal file
View File

@ -0,0 +1,159 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedLoggerGenerator
// **************************************************************************
// ignore_for_file: avoid_print, depend_on_referenced_packages
/// Maybe this should be generated for the user as well?
///
/// import 'package:customer_app/services/stackdriver/stackdriver_service.dart';
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
class SimpleLogPrinter extends LogPrinter {
final String className;
final bool printCallingFunctionName;
final bool printCallStack;
final List<String> exludeLogsFromClasses;
final String? showOnlyClass;
SimpleLogPrinter(
this.className, {
this.printCallingFunctionName = true,
this.printCallStack = false,
this.exludeLogsFromClasses = const [],
this.showOnlyClass,
});
@override
List<String> log(LogEvent event) {
var color = PrettyPrinter.levelColors[event.level];
var emoji = PrettyPrinter.levelEmojis[event.level];
var methodName = _getMethodName();
var methodNameSection =
printCallingFunctionName && methodName != null ? ' | $methodName' : '';
var stackLog = event.stackTrace.toString();
var output =
'$emoji $className$methodNameSection - ${event.message}${event.error != null ? '\nERROR: ${event.error}\n' : ''}${printCallStack ? '\nSTACKTRACE:\n$stackLog' : ''}';
if (exludeLogsFromClasses
.any((excludeClass) => className == excludeClass) ||
(showOnlyClass != null && className != showOnlyClass)) return [];
final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
List<String> result = [];
for (var line in output.split('\n')) {
result.addAll(pattern.allMatches(line).map((match) {
if (kReleaseMode) {
return match.group(0)!;
} else {
return color!(match.group(0)!);
}
}));
}
return result;
}
String? _getMethodName() {
try {
final currentStack = StackTrace.current;
final formattedStacktrace = _formatStackTrace(currentStack, 3);
if (kIsWeb) {
final classNameParts = _splitClassNameWords(className);
return _findMostMatchedTrace(formattedStacktrace!, classNameParts)
.split(' ')
.last;
} else {
final realFirstLine = formattedStacktrace
?.firstWhere((line) => line.contains(className), orElse: () => "");
final methodName = realFirstLine?.replaceAll('$className.', '');
return methodName;
}
} catch (e) {
// There's no deliberate function call from our code so we return null;
return null;
}
}
List<String> _splitClassNameWords(String className) {
return className
.split(RegExp(r'(?=[A-Z])'))
.map((e) => e.toLowerCase())
.toList();
}
/// When the faulty word exists in the begging this method will not be very usefull
String _findMostMatchedTrace(
List<String> stackTraces, List<String> keyWords) {
String match = stackTraces.firstWhere(
(trace) => _doesTraceContainsAllKeywords(trace, keyWords),
orElse: () => '');
if (match.isEmpty) {
match = _findMostMatchedTrace(
stackTraces, keyWords.sublist(0, keyWords.length - 1));
}
return match;
}
bool _doesTraceContainsAllKeywords(String stackTrace, List<String> keywords) {
final formattedKeywordsAsRegex = RegExp(keywords.join('.*'));
return stackTrace.contains(formattedKeywordsAsRegex);
}
}
final stackTraceRegex = RegExp(r'#[0-9]+[\s]+(.+) \(([^\s]+)\)');
List<String>? _formatStackTrace(StackTrace stackTrace, int methodCount) {
var lines = stackTrace.toString().split('\n');
var formatted = <String>[];
var count = 0;
for (var line in lines) {
var match = stackTraceRegex.matchAsPrefix(line);
if (match != null) {
if (match.group(2)!.startsWith('package:logger')) {
continue;
}
var newLine = ("${match.group(1)}");
formatted.add(newLine.replaceAll('<anonymous closure>', '()'));
if (++count == methodCount) {
break;
}
} else {
formatted.add(line);
}
}
if (formatted.isEmpty) {
return null;
} else {
return formatted;
}
}
Logger getLogger(
String className, {
bool printCallingFunctionName = true,
bool printCallstack = false,
List<String> exludeLogsFromClasses = const [],
String? showOnlyClass,
}) {
return Logger(
printer: SimpleLogPrinter(
className,
printCallingFunctionName: printCallingFunctionName,
printCallStack: printCallstack,
showOnlyClass: showOnlyClass,
exludeLogsFromClasses: exludeLogsFromClasses,
),
output: MultiOutput([
if (!kReleaseMode) ConsoleOutput(),
]),
);
}

537
lib/app/app.router.dart Normal file
View File

@ -0,0 +1,537 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedNavigatorGenerator
// **************************************************************************
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:flutter/material.dart' as _i6;
import 'package:flutter/material.dart';
import 'package:rfid_app/model/penyewa_model.dart' as _i7;
import 'package:rfid_app/ui/views/login_screen/login_screen_view.dart' as _i3;
import 'package:rfid_app/ui/views/penyewa_index/penyewa_index_view.dart' as _i5;
import 'package:rfid_app/ui/views/penyewa_index/penyewa_log/penyewa_log_view.dart'
as _i11;
import 'package:rfid_app/ui/views/penyewa_index/pulsa_detail/pulsa_detail_view.dart'
as _i13;
import 'package:rfid_app/ui/views/penyewa_index/tempat_sewaan/tempat_sewaan_view.dart'
as _i12;
import 'package:rfid_app/ui/views/retributor_index/log_history_sewaan/log_history_sewaan_view.dart'
as _i9;
import 'package:rfid_app/ui/views/retributor_index/penyewa_list/penyewa_list_view.dart'
as _i10;
import 'package:rfid_app/ui/views/retributor_index/retributor_index_view.dart'
as _i4;
import 'package:rfid_app/ui/views/retributor_index/tempat_sewa_list/tempat_sewa_list_view.dart'
as _i8;
import 'package:rfid_app/ui/views/splash_screen/splash_screen_view.dart' as _i2;
import 'package:stacked/stacked.dart' as _i1;
import 'package:stacked_services/stacked_services.dart' as _i14;
class Routes {
static const splashScreenView = '/';
static const loginScreenView = '/login-screen-view';
static const retributorIndexView = '/retributor-index-view';
static const penyewaIndexView = '/penyewa-index-view';
static const all = <String>{
splashScreenView,
loginScreenView,
retributorIndexView,
penyewaIndexView,
};
}
class StackedRouter extends _i1.RouterBase {
final _routes = <_i1.RouteDef>[
_i1.RouteDef(
Routes.splashScreenView,
page: _i2.SplashScreenView,
),
_i1.RouteDef(
Routes.loginScreenView,
page: _i3.LoginScreenView,
),
_i1.RouteDef(
Routes.retributorIndexView,
page: _i4.RetributorIndexView,
),
_i1.RouteDef(
Routes.penyewaIndexView,
page: _i5.PenyewaIndexView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i2.SplashScreenView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i2.SplashScreenView(),
settings: data,
);
},
_i3.LoginScreenView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i3.LoginScreenView(),
settings: data,
);
},
_i4.RetributorIndexView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i4.RetributorIndexView(),
settings: data,
);
},
_i5.PenyewaIndexView: (data) {
final args = data.getArgs<PenyewaIndexViewArguments>(nullOk: false);
return _i6.MaterialPageRoute<dynamic>(
builder: (context) =>
_i5.PenyewaIndexView(key: args.key, penyewa: args.penyewa),
settings: data,
);
},
};
@override
List<_i1.RouteDef> get routes => _routes;
@override
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
class PenyewaIndexViewArguments {
const PenyewaIndexViewArguments({
this.key,
required this.penyewa,
});
final _i6.Key? key;
final _i7.DetailPenyewaModel penyewa;
@override
String toString() {
return '{"key": "$key", "penyewa": "$penyewa"}';
}
@override
bool operator ==(covariant PenyewaIndexViewArguments other) {
if (identical(this, other)) return true;
return other.key == key && other.penyewa == penyewa;
}
@override
int get hashCode {
return key.hashCode ^ penyewa.hashCode;
}
}
class RetributorIndexViewRoutes {
static const tempatSewaListView = 'tempat-sewa-list-view';
static const logHistorySewaanView = 'log-history-sewaan-view';
static const penyewaListView = 'penyewa-list-view';
static const all = <String>{
tempatSewaListView,
logHistorySewaanView,
penyewaListView,
};
}
class RetributorIndexViewRouter extends _i1.RouterBase {
final _routes = <_i1.RouteDef>[
_i1.RouteDef(
RetributorIndexViewRoutes.tempatSewaListView,
page: _i8.TempatSewaListView,
),
_i1.RouteDef(
RetributorIndexViewRoutes.logHistorySewaanView,
page: _i9.LogHistorySewaanView,
),
_i1.RouteDef(
RetributorIndexViewRoutes.penyewaListView,
page: _i10.PenyewaListView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i8.TempatSewaListView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i8.TempatSewaListView(),
settings: data,
);
},
_i9.LogHistorySewaanView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i9.LogHistorySewaanView(),
settings: data,
);
},
_i10.PenyewaListView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i10.PenyewaListView(),
settings: data,
);
},
};
@override
List<_i1.RouteDef> get routes => _routes;
@override
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
class PenyewaIndexViewRoutes {
static const penyewaLogView = 'penyewa-log-view';
static const tempatSewaanView = 'tempat-sewaan-view';
static const pulsaDetailView = 'pulsa-detail-view';
static const all = <String>{
penyewaLogView,
tempatSewaanView,
pulsaDetailView,
};
}
class PenyewaIndexViewRouter extends _i1.RouterBase {
final _routes = <_i1.RouteDef>[
_i1.RouteDef(
PenyewaIndexViewRoutes.penyewaLogView,
page: _i11.PenyewaLogView,
),
_i1.RouteDef(
PenyewaIndexViewRoutes.tempatSewaanView,
page: _i12.TempatSewaanView,
),
_i1.RouteDef(
PenyewaIndexViewRoutes.pulsaDetailView,
page: _i13.PulsaDetailView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i11.PenyewaLogView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i11.PenyewaLogView(),
settings: data,
);
},
_i12.TempatSewaanView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i12.TempatSewaanView(),
settings: data,
);
},
_i13.PulsaDetailView: (data) {
return _i6.MaterialPageRoute<dynamic>(
builder: (context) => const _i13.PulsaDetailView(),
settings: data,
);
},
};
@override
List<_i1.RouteDef> get routes => _routes;
@override
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
extension NavigatorStateExtension on _i14.NavigationService {
Future<dynamic> navigateToSplashScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.splashScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToLoginScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.loginScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToRetributorIndexView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.retributorIndexView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToPenyewaIndexView({
_i6.Key? key,
required _i7.DetailPenyewaModel penyewa,
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
}) async {
return navigateTo<dynamic>(Routes.penyewaIndexView,
arguments: PenyewaIndexViewArguments(key: key, penyewa: penyewa),
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
navigateToNestedTempatSewaListViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(RetributorIndexViewRoutes.tempatSewaListView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
navigateToNestedLogHistorySewaanViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(RetributorIndexViewRoutes.logHistorySewaanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToNestedPenyewaListViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(RetributorIndexViewRoutes.penyewaListView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToNestedPenyewaLogViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(PenyewaIndexViewRoutes.penyewaLogView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToNestedTempatSewaanViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(PenyewaIndexViewRoutes.tempatSewaanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToNestedPulsaDetailViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(PenyewaIndexViewRoutes.pulsaDetailView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithSplashScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.splashScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithLoginScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.loginScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithRetributorIndexView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.retributorIndexView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithPenyewaIndexView({
_i6.Key? key,
required _i7.DetailPenyewaModel penyewa,
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
}) async {
return replaceWith<dynamic>(Routes.penyewaIndexView,
arguments: PenyewaIndexViewArguments(key: key, penyewa: penyewa),
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
replaceWithNestedTempatSewaListViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(RetributorIndexViewRoutes.tempatSewaListView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
replaceWithNestedLogHistorySewaanViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(RetributorIndexViewRoutes.logHistorySewaanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithNestedPenyewaListViewInRetributorIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(RetributorIndexViewRoutes.penyewaListView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithNestedPenyewaLogViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(PenyewaIndexViewRoutes.penyewaLogView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithNestedTempatSewaanViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(PenyewaIndexViewRoutes.tempatSewaanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithNestedPulsaDetailViewInPenyewaIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(PenyewaIndexViewRoutes.pulsaDetailView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
}

View File

@ -0,0 +1,26 @@
// import 'package:shared_preferences/shared_preferences.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import '../../services/http_services.dart';
import '../../services/my_easyloading.dart';
import '../../services/my_socket_io_client.dart';
import '../../services/other_function.dart';
import '../../services/shared_prefs.dart';
import '../app.locator.dart';
class CustomBaseViewModel extends BaseViewModel {
final dialogService = locator<DialogService>();
final navigationService = locator<NavigationService>();
final bottomSheetService = locator<BottomSheetService>();
final snackbarService = locator<SnackbarService>();
final mySharedPrefs = locator<MySharedPrefs>();
final otherFunction = locator<OtherFunction>();
final socketIoClient = locator<MySocketIoClient>();
final httpService = locator<MyHttpServices>();
final easyLoading = locator<MyEasyLoading>();
void back() {
navigationService.back();
}
}

30
lib/app/themes/app_colors.dart Executable file
View File

@ -0,0 +1,30 @@
import 'dart:ui';
const Color mainColor = Color.fromARGB(255, 6, 238, 48);
const Color secondaryColor = Color(0xFFB72025);
const Color dangerColor = Color(0xFFFF4B68);
const Color warningColor = Color(0xFFFBFFA3);
const Color lightColor = Color(0xFFF4FAFE);
const Color lightGreyColor = Color(0xFFFCFCFC);
const Color stockColor = Color(0xFFEEF3F6);
const Color backgroundColor = Color(0xFFE5E5E5);
const Color backgroundColor3 = Color(0xFFF6F7F8);
const Color orangeColor = Color.fromARGB(255, 250, 145, 84);
const Color blueColor = Color(0xFF026AA2);
const Color greenColor = Color(0xFF2ABB52);
const Color redColor = Color(0xFFED1717);
const Color greyBlueColor = Color(0xFF363F72);
const Color fontColor = Color(0xFF101828);
const Color fontSecondaryColor = Color(0xFF667085);
const Color fontParagraphColor = Color(0xFFB2B2B2);
const Color fontGrey = Color(0xFF1C1C1C);
const Color mainGrey = Color(0xFF8991A4);
const Color secondaryGrey = Color(0xFFD0D5DD);
const Color thirdGrey = Color(0xFFF2F4F7);
const Color fourthGrey = Color(0xFF5C5C5C);
const Color fifthGrey = Color(0xFFEBEBEB);
const Color sixthGrey = Color(0xFF151515);

View File

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'app_colors.dart';
const regularTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w400,
color: fontColor);
const italicTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
color: fontColor,
fontStyle: FontStyle.italic,
);
const mediumTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w500,
color: fontColor,
);
const semiBoldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w600,
color: fontColor,
);
const boldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w700,
color: fontColor,
);
const extraBoldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w800,
color: fontColor,
);

124
lib/app/themes/app_theme.dart Executable file
View File

@ -0,0 +1,124 @@
import 'package:flutter/material.dart';
import 'app_colors.dart';
import 'app_text.dart';
ThemeData appTheme = ThemeData(
useMaterial3: true,
primaryColor: mainColor,
scaffoldBackgroundColor: Colors.white,
canvasColor: Colors.white,
fontFamily: 'Poppins',
appBarTheme: AppBarTheme(
elevation: 0,
titleTextStyle: boldTextStyle.copyWith(fontSize: 16, color: fontGrey),
centerTitle: true,
),
textTheme: TextTheme(
displayLarge: regularTextStyle.copyWith(fontSize: 32),
displayMedium: regularTextStyle.copyWith(fontSize: 20),
displaySmall: regularTextStyle.copyWith(fontSize: 18),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: mainColor,
foregroundColor: Colors.white,
disabledBackgroundColor: mainColor.withOpacity(.3),
minimumSize: const Size(double.maxFinite, 58),
textStyle: boldTextStyle,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
shadowColor: Colors.transparent,
elevation: 0,
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
textStyle: boldTextStyle,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(
color: mainColor,
width: 1,
),
foregroundColor: mainColor,
// disabledForegroundColor: mainColor.withOpacity(.3),
minimumSize: const Size(double.maxFinite, 58),
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
foregroundColor: mainColor,
disabledForegroundColor: mainColor.withOpacity(.3),
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
textStyle: semiBoldTextStyle,
shadowColor: Colors.transparent,
),
),
iconTheme: const IconThemeData(
color: mainColor,
),
listTileTheme: ListTileThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
checkboxTheme: CheckboxThemeData(
fillColor: MaterialStateProperty.all(mainColor),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
),
side: const BorderSide(
color: secondaryGrey,
width: 1,
),
),
radioTheme: RadioThemeData(
fillColor: MaterialStateProperty.all(mainColor),
),
tabBarTheme: TabBarTheme(
labelColor: mainColor,
unselectedLabelColor: secondaryGrey,
labelStyle: boldTextStyle.copyWith(fontSize: 16),
unselectedLabelStyle: mediumTextStyle.copyWith(fontSize: 16),
),
chipTheme: ChipThemeData(
backgroundColor: Colors.white,
disabledColor: Colors.white,
selectedColor: Colors.white,
secondarySelectedColor: Colors.white,
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
side: const BorderSide(color: fifthGrey),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
labelStyle: regularTextStyle.copyWith(fontSize: 12, color: fontGrey),
secondaryLabelStyle:
regularTextStyle.copyWith(fontSize: 12, color: secondaryColor),
deleteIconColor: fontGrey,
showCheckmark: false,
),
popupMenuTheme: PopupMenuThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
side: const BorderSide(
color: fifthGrey,
width: 1,
),
),
),
colorScheme: const ColorScheme.light(
primary: mainColor,
secondary: secondaryColor,
onPrimary: Colors.white,
onSecondary: Colors.white,
error: dangerColor,
onError: dangerColor,
background: backgroundColor,
).copyWith(background: Colors.white),
);