Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 65-improve-app-metadata
  • master
  • Release_1.0.10_11
  • Release_1.0.11_12
  • Release_1.0.12_13
  • Release_1.0.13_14
  • Release_1.0.14_15
  • Release_1.0.15_16
  • Release_1.0.16_17
  • Release_1.0.17_18
  • Release_1.0.18_19
  • Release_1.0.19_20
  • Release_1.0.20_21
  • Release_1.0.21_22
  • Release_1.0.22_23
  • Release_1.0.23_24
  • Release_1.0.24_25
  • Release_1.0.25_26
  • Release_1.0.26_27
  • Release_1.0.27_28
  • Release_1.0.28_29
  • Release_1.0.29_30
  • Release_1.0.30_31
  • Release_1.0.31_32
  • Release_1.0.32_33
  • Release_1.0.33_34
  • Release_1.0.34_35
  • Release_1.0.35_36
  • Release_1.0.36_37
  • Release_1.0.37_38
  • Release_1.0.38_39
  • Release_1.0.39_40
  • Release_1.0.3_4
  • Release_1.0.40_41
  • Release_1.0.41_42
  • Release_1.0.42_43
  • Release_1.0.43_44
  • Release_1.0.44_45
  • Release_1.0.45_46
  • Release_1.0.46_47
  • Release_1.0.47_48
  • Release_1.0.48_49
  • Release_1.0.49_50
  • Release_1.0.4_5
  • Release_1.0.50_51
  • Release_1.0.51_52
  • Release_1.0.52_53
  • Release_1.0.53_54
  • Release_1.0.54_55
  • Release_1.0.55_56
  • Release_1.0.56_57
  • Release_1.0.57_58
  • Release_1.0.58_59
  • Release_1.0.59_60
  • Release_1.0.5_6
  • Release_1.0.60_61
  • Release_1.0.61_62
  • Release_1.0.62_63
  • Release_1.0.63_64
  • Release_1.0.6_7
  • Release_1.0.7_8
  • Release_1.0.8_9
  • Release_1.0.9_10
  • Release_1.1.0_65
  • Release_1.1.1_66
  • Release_1.1.2_67
  • Release_1.1.3_68
  • Release_1.2.0_69
  • Release_1.2.1_70
  • Release_1.3.0_71
  • Release_1.3.1_72
  • Release_1.3.2_73
  • Release_1.4.0_74
  • Release_1.5.0_75
  • Release_1.6.0_76
  • Release_1.7.0_77
  • Release_1.7.1_78
  • Release_1.7.2_79
  • Release_1.8.0_80
  • Release_3_1.0.2
  • Release_Release_3_1.0.2
81 results

Target

Select target project
  • android/random
1 result
Select Git revision
  • 65-improve-app-metadata
  • master
  • Release_1.0.10_11
  • Release_1.0.11_12
  • Release_1.0.12_13
  • Release_1.0.13_14
  • Release_1.0.14_15
  • Release_1.0.15_16
  • Release_1.0.16_17
  • Release_1.0.17_18
  • Release_1.0.18_19
  • Release_1.0.19_20
  • Release_1.0.20_21
  • Release_1.0.21_22
  • Release_1.0.22_23
  • Release_1.0.23_24
  • Release_1.0.24_25
  • Release_1.0.25_26
  • Release_1.0.26_27
  • Release_1.0.27_28
  • Release_1.0.28_29
  • Release_1.0.29_30
  • Release_1.0.30_31
  • Release_1.0.31_32
  • Release_1.0.32_33
  • Release_1.0.33_34
  • Release_1.0.34_35
  • Release_1.0.35_36
  • Release_1.0.36_37
  • Release_1.0.37_38
  • Release_1.0.38_39
  • Release_1.0.39_40
  • Release_1.0.3_4
  • Release_1.0.40_41
  • Release_1.0.41_42
  • Release_1.0.42_43
  • Release_1.0.43_44
  • Release_1.0.44_45
  • Release_1.0.45_46
  • Release_1.0.46_47
  • Release_1.0.47_48
  • Release_1.0.48_49
  • Release_1.0.49_50
  • Release_1.0.4_5
  • Release_1.0.50_51
  • Release_1.0.51_52
  • Release_1.0.52_53
  • Release_1.0.53_54
  • Release_1.0.54_55
  • Release_1.0.55_56
  • Release_1.0.56_57
  • Release_1.0.57_58
  • Release_1.0.58_59
  • Release_1.0.59_60
  • Release_1.0.5_6
  • Release_1.0.60_61
  • Release_1.0.61_62
  • Release_1.0.62_63
  • Release_1.0.63_64
  • Release_1.0.6_7
  • Release_1.0.7_8
  • Release_1.0.8_9
  • Release_1.0.9_10
  • Release_1.1.0_65
  • Release_1.1.1_66
  • Release_1.1.2_67
  • Release_1.1.3_68
  • Release_1.2.0_69
  • Release_1.2.1_70
  • Release_1.3.0_71
  • Release_1.3.1_72
  • Release_1.3.2_73
  • Release_1.4.0_74
  • Release_1.5.0_75
  • Release_1.6.0_76
  • Release_1.7.0_77
  • Release_1.7.1_78
  • Release_1.7.2_79
  • Release_1.8.0_80
  • Release_3_1.0.2
  • Release_Release_3_1.0.2
81 results
Show changes
Commits on Source (8)
Showing
with 191 additions and 60 deletions
image: ghcr.io/cirruslabs/flutter:latest image: ghcr.io/cirruslabs/flutter:latest
stages: stages:
- update
- build-debug - build-debug
- build-release - build-release
- release - release
- deploy - deploy
update:
stage: update
except:
- tags
script:
- flutter packages get
- flutter packages upgrade
interruptible: true
android:build-debug: android:build-debug:
stage: build-debug stage: build-debug
except: except:
- tags - tags
- master
script: script:
# Flutter local configuration # Flutter local configuration
- echo flutter.sdk=$FLUTTER_PATH > android/local.properties - echo flutter.sdk=$FLUTTER_PATH > android/local.properties
...@@ -49,8 +40,6 @@ android:build-release: ...@@ -49,8 +40,6 @@ android:build-release:
- master - master
except: except:
- tags - tags
dependencies:
- android:build-debug
script: script:
# Flutter local configuration # Flutter local configuration
- echo flutter.sdk=$FLUTTER_PATH > android/local.properties - echo flutter.sdk=$FLUTTER_PATH > android/local.properties
......
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.0.48 app.versionName=1.0.51
app.versionCode=49 app.versionCode=52
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"api_page_title": "API", "api_page_title": "API",
"settings_title": "Settings", "settings_title": "Settings",
"settings_label_theme": "Theme mode",
"settings_label_api_url": "API URL:", "settings_label_api_url": "API URL:",
"settings_label_security_token": "Security token:", "settings_label_security_token": "Security token:",
"settings_label_interface_type": "Interface type:", "settings_label_interface_type": "Interface type:",
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"api_page_title": "API", "api_page_title": "API",
"settings_title": "Paramètres", "settings_title": "Paramètres",
"settings_label_theme": "Thème de couleurs",
"settings_label_api_url": "URL de l'API :", "settings_label_api_url": "URL de l'API :",
"settings_label_security_token": "Jeton de sécurité :", "settings_label_security_token": "Jeton de sécurité :",
"settings_label_interface_type": "Type d'interface :", "settings_label_interface_type": "Type d'interface :",
......
...@@ -62,7 +62,10 @@ class Menu { ...@@ -62,7 +62,10 @@ class Menu {
]; ];
static Widget getPageWidget(int pageIndex) { static Widget getPageWidget(int pageIndex) {
return Menu.items.elementAt(pageIndex).page; return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Menu.items.elementAt(pageIndex).page,
);
} }
static List<BottomNavigationBarItem> getMenuItems() { static List<BottomNavigationBarItem> getMenuItems() {
......
...@@ -4,6 +4,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart'; ...@@ -4,6 +4,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:random/models/api_failure.dart'; import 'package:random/models/api_failure.dart';
import 'package:random/models/api_data.dart'; import 'package:random/models/api_data.dart';
import 'package:random/repository/api.dart'; import 'package:random/repository/api.dart';
import 'package:random/utils/tools.dart';
part 'api_state.dart'; part 'api_state.dart';
...@@ -27,7 +28,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> { ...@@ -27,7 +28,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> {
} }
} }
} }
print('emit new state: $stateAsString'); printlog('emit new state: $stateAsString');
emit(state); emit(state);
} }
...@@ -41,7 +42,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> { ...@@ -41,7 +42,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> {
} on ApiFailure catch (err) { } on ApiFailure catch (err) {
customEmit(ApiDataFetchError(failure: err)); customEmit(ApiDataFetchError(failure: err));
} catch (err) { } catch (err) {
print("Error (fetchApiData): $err"); printlog("Error (fetchApiData): $err");
} }
return ApiData.fromJson({}); return ApiData.fromJson({});
} }
......
...@@ -16,15 +16,12 @@ class ApiDataFetchInitial extends ApiDataState {} ...@@ -16,15 +16,12 @@ class ApiDataFetchInitial extends ApiDataState {}
class ApiDataFetchLoading extends ApiDataState {} class ApiDataFetchLoading extends ApiDataState {}
class ApiDataFetchLoaded extends ApiDataState { class ApiDataFetchLoaded extends ApiDataState {
@override
final ApiData data;
const ApiDataFetchLoaded({ const ApiDataFetchLoaded({
required this.data, required super.data,
}); });
@override @override
List<Object> get props => [data]; List<Object> get props => [data!];
} }
class ApiDataFetchError extends ApiDataState { class ApiDataFetchError extends ApiDataState {
......
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
part 'theme_state.dart';
class ThemeCubit extends HydratedCubit<ThemeModeState> {
ThemeCubit() : super(const ThemeModeState());
void getTheme(ThemeModeState state) {
emit(state);
}
@override
ThemeModeState? fromJson(Map<String, dynamic> json) {
switch (json['themeMode']) {
case 'ThemeMode.dark':
return const ThemeModeState(themeMode: ThemeMode.dark);
case 'ThemeMode.light':
return const ThemeModeState(themeMode: ThemeMode.light);
case 'ThemeMode.system':
default:
return const ThemeModeState(themeMode: ThemeMode.system);
}
}
@override
Map<String, String>? toJson(ThemeModeState state) {
return <String, String>{'themeMode': state.themeMode.toString()};
}
}
part of 'theme_cubit.dart';
@immutable
class ThemeModeState extends Equatable {
const ThemeModeState({
this.themeMode,
});
final ThemeMode? themeMode;
@override
List<Object?> get props => <Object?>[
themeMode,
];
}
...@@ -8,11 +8,12 @@ import 'package:hydrated_bloc/hydrated_bloc.dart'; ...@@ -8,11 +8,12 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:random/config/theme.dart'; import 'package:random/config/theme.dart';
import 'package:random/cubit/api_cubit.dart';
import 'package:random/cubit/bottom_nav_cubit.dart'; import 'package:random/cubit/bottom_nav_cubit.dart';
import 'package:random/cubit/data_cubit.dart'; import 'package:random/cubit/data_cubit.dart';
import 'package:random/cubit/game_cubit.dart'; import 'package:random/cubit/game_cubit.dart';
import 'package:random/cubit/settings_cubit.dart'; import 'package:random/cubit/settings_cubit.dart';
import 'package:random/cubit/api_cubit.dart'; import 'package:random/cubit/theme_cubit.dart';
import 'package:random/repository/api.dart'; import 'package:random/repository/api.dart';
import 'package:random/network/api.dart'; import 'package:random/network/api.dart';
import 'package:random/ui/skeleton.dart'; import 'package:random/ui/skeleton.dart';
...@@ -48,10 +49,6 @@ class MyApp extends StatelessWidget { ...@@ -48,10 +49,6 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MultiBlocProvider( return MultiBlocProvider(
providers: [ providers: [
BlocProvider<SettingsCubit>(create: (context) => SettingsCubit()),
BlocProvider<BottomNavCubit>(create: (context) => BottomNavCubit()),
BlocProvider<DataCubit>(create: (context) => DataCubit()),
BlocProvider<GameCubit>(create: (context) => GameCubit()),
BlocProvider<ApiDataCubit>( BlocProvider<ApiDataCubit>(
create: (context) => ApiDataCubit( create: (context) => ApiDataCubit(
apiRepository: ApiRepository( apiRepository: ApiRepository(
...@@ -59,16 +56,26 @@ class MyApp extends StatelessWidget { ...@@ -59,16 +56,26 @@ class MyApp extends StatelessWidget {
), ),
)..fetchApiData(), )..fetchApiData(),
), ),
BlocProvider<BottomNavCubit>(create: (context) => BottomNavCubit()),
BlocProvider<DataCubit>(create: (context) => DataCubit()),
BlocProvider<GameCubit>(create: (context) => GameCubit()),
BlocProvider<SettingsCubit>(create: (context) => SettingsCubit()),
BlocProvider<ThemeCubit>(create: (context) => ThemeCubit()),
], ],
child: MaterialApp( child: BlocBuilder<ThemeCubit, ThemeModeState>(
builder: (BuildContext context, ThemeModeState state) {
return MaterialApp(
title: 'Random application', title: 'Random application',
theme: appTheme, theme: lightTheme,
darkTheme: darkTheme,
themeMode: state.themeMode,
home: const SkeletonScreen(), home: const SkeletonScreen(),
localizationsDelegates: context.localizationDelegates, localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales, supportedLocales: context.supportedLocales,
locale: context.locale, locale: context.locale,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
), );
}),
); );
} }
} }
...@@ -3,6 +3,7 @@ import 'dart:math'; ...@@ -3,6 +3,7 @@ import 'dart:math';
import 'package:random/models/game/game_board.dart'; import 'package:random/models/game/game_board.dart';
import 'package:random/models/game/game_cell.dart'; import 'package:random/models/game/game_cell.dart';
import 'package:random/models/game/game_settings.dart'; import 'package:random/models/game/game_settings.dart';
import 'package:random/utils/tools.dart';
class Game { class Game {
GameBoard board; GameBoard board;
...@@ -88,7 +89,7 @@ class Game { ...@@ -88,7 +89,7 @@ class Game {
void dump() { void dump() {
GameBoard.printGrid(board.cells); GameBoard.printGrid(board.cells);
print(settings.toJson()); printlog(settings.toString());
print(toJson()); printlog(toString());
} }
} }
...@@ -2,6 +2,7 @@ import 'dart:math'; ...@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:random/models/game/game_cell.dart'; import 'package:random/models/game/game_cell.dart';
import 'package:random/models/game/game_settings.dart'; import 'package:random/models/game/game_settings.dart';
import 'package:random/utils/tools.dart';
class GameBoard { class GameBoard {
final List<List<GameCell>> cells; final List<List<GameCell>> cells;
...@@ -36,17 +37,17 @@ class GameBoard { ...@@ -36,17 +37,17 @@ class GameBoard {
} }
static printGrid(List<List<GameCell>> cells) { static printGrid(List<List<GameCell>> cells) {
print(''); printlog('');
print('-------'); printlog('-------');
for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) { for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
String row = ''; String row = '';
for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
row += cells[rowIndex][colIndex].value.toString(); row += cells[rowIndex][colIndex].value.toString();
} }
print(row); printlog(row);
} }
print('-------'); printlog('-------');
print(''); printlog('');
} }
@override @override
......
...@@ -3,6 +3,7 @@ import 'dart:io'; ...@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:random/models/api_failure.dart'; import 'package:random/models/api_failure.dart';
import 'package:random/utils/tools.dart';
class ApiService { class ApiService {
final Dio _dio = Dio(); final Dio _dio = Dio();
...@@ -12,15 +13,15 @@ class ApiService { ...@@ -12,15 +13,15 @@ class ApiService {
Future<Response?> getData() async { Future<Response?> getData() async {
String url = '$baseUrl/get.php'; String url = '$baseUrl/get.php';
try { try {
print('fetching api data... $url'); printlog('fetching api data... $url');
final Response response = await _dio.get(url); final Response response = await _dio.get(url);
print('ok got api response.'); printlog('ok got api response.');
print(response); printlog(response.toString());
return response; return response;
} on SocketException { } on SocketException {
throw const ApiFailure(message: 'Failed to reach API endpoint.'); throw const ApiFailure(message: 'Failed to reach API endpoint.');
} catch (err) { } catch (err) {
print("Error (getData): $err"); printlog("Error (getData): $err");
throw ApiFailure(message: "$err"); throw ApiFailure(message: "$err");
} }
} }
......
import 'package:random/models/api_data.dart'; import 'package:random/models/api_data.dart';
import 'package:random/network/api.dart'; import 'package:random/network/api.dart';
import 'package:random/utils/tools.dart';
class ApiRepository { class ApiRepository {
const ApiRepository({required this.apiService}); const ApiRepository({required this.apiService});
...@@ -7,15 +8,15 @@ class ApiRepository { ...@@ -7,15 +8,15 @@ class ApiRepository {
final ApiService apiService; final ApiService apiService;
Future<ApiData> getApiData() async { Future<ApiData> getApiData() async {
print('(getApiData) delayed API call...'); printlog('(getApiData) delayed API call...');
final response = await Future.delayed(const Duration(milliseconds: 1000)) final response = await Future.delayed(const Duration(milliseconds: 1000))
.then((value) => apiService.getData()); .then((value) => apiService.getData());
if (response != null) { if (response != null) {
print('(getApiData) got api response'); printlog('(getApiData) got api response');
print(response.data); printlog(response.data);
return ApiData.fromJson(response.data); return ApiData.fromJson(response.data);
} }
print('(getApiData) failed'); printlog('(getApiData) failed');
return ApiData.fromJson({}); return ApiData.fromJson({});
} }
} }
...@@ -25,7 +25,7 @@ class _GamePageState extends State<GamePage> { ...@@ -25,7 +25,7 @@ class _GamePageState extends State<GamePage> {
gameCubit.updateGameState(Game.createNew()); gameCubit.updateGameState(Game.createNew());
}, },
icon: const Icon(UniconsSolid.star), icon: const Icon(UniconsSolid.star),
color: Colors.white, color: Theme.of(context).colorScheme.primary,
) )
]; ];
...@@ -39,7 +39,7 @@ class _GamePageState extends State<GamePage> { ...@@ -39,7 +39,7 @@ class _GamePageState extends State<GamePage> {
setState(() {}); setState(() {});
}, },
icon: const Icon(UniconsLine.exit), icon: const Icon(UniconsLine.exit),
color: Colors.white, color: Theme.of(context).colorScheme.primary,
)); ));
} }
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:random/ui/painters/graph_painter.dart'; import 'package:random/ui/painters/graph_painter.dart';
import 'package:random/utils/tools.dart';
class GraphPage extends StatefulWidget { class GraphPage extends StatefulWidget {
const GraphPage({super.key}); const GraphPage({super.key});
...@@ -33,7 +34,7 @@ class _GraphPageState extends State<GraphPage> { ...@@ -33,7 +34,7 @@ class _GraphPageState extends State<GraphPage> {
onTapUp: (details) { onTapUp: (details) {
double xTap = details.localPosition.dx; double xTap = details.localPosition.dx;
double yTap = details.localPosition.dy; double yTap = details.localPosition.dy;
print('[$xTap,$yTap]'); printlog('[$xTap,$yTap]');
}, },
child: Container( child: Container(
margin: const EdgeInsets.all(4), margin: const EdgeInsets.all(4),
......
...@@ -6,6 +6,7 @@ import 'package:random/models/game/game.dart'; ...@@ -6,6 +6,7 @@ import 'package:random/models/game/game.dart';
import 'package:random/models/game/game_settings.dart'; import 'package:random/models/game/game_settings.dart';
import 'package:random/ui/painters/cell_painter.dart'; import 'package:random/ui/painters/cell_painter.dart';
import 'package:random/ui/widgets/game/game_score.dart'; import 'package:random/ui/widgets/game/game_score.dart';
import 'package:random/utils/tools.dart';
class GameBoardWidget extends StatefulWidget { class GameBoardWidget extends StatefulWidget {
const GameBoardWidget({ const GameBoardWidget({
...@@ -168,11 +169,11 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi ...@@ -168,11 +169,11 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi
int x = (xTap / widgetWidth * columnsCount).toInt(); int x = (xTap / widgetWidth * columnsCount).toInt();
int y = (yTap / widgetHeight * rowsCount).toInt(); int y = (yTap / widgetHeight * rowsCount).toInt();
print('[$x,$y]'); printlog('[$x,$y]');
removeCell(context, x, y); removeCell(context, x, y);
} else { } else {
print('animation in progress...'); printlog('animation in progress...');
} }
}, },
); );
......
...@@ -6,6 +6,7 @@ import 'package:unicons/unicons.dart'; ...@@ -6,6 +6,7 @@ import 'package:unicons/unicons.dart';
import 'package:random/cubit/settings_cubit.dart'; import 'package:random/cubit/settings_cubit.dart';
import 'package:random/config/theme.dart'; import 'package:random/config/theme.dart';
import 'package:random/models/interface_type.dart'; import 'package:random/models/interface_type.dart';
import 'package:random/ui/widgets/theme_card.dart';
class SettingsForm extends StatefulWidget { class SettingsForm extends StatefulWidget {
const SettingsForm({super.key}); const SettingsForm({super.key});
...@@ -54,6 +55,35 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -54,6 +55,35 @@ class _SettingsFormState extends State<SettingsForm> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
// Light/dark theme
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
const Text('settings_label_theme').tr(),
const Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ThemeCard(
mode: ThemeMode.system,
icon: UniconsLine.cog,
),
ThemeCard(
mode: ThemeMode.light,
icon: UniconsLine.sun,
),
ThemeCard(
mode: ThemeMode.dark,
icon: UniconsLine.moon,
)
],
),
],
),
const SizedBox(height: 16),
const Text('settings_label_api_url').tr(), const Text('settings_label_api_url').tr(),
TextFormField( TextFormField(
controller: apiUrlController, controller: apiUrlController,
...@@ -61,7 +91,9 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -61,7 +91,9 @@ class _SettingsFormState extends State<SettingsForm> {
border: UnderlineInputBorder(), border: UnderlineInputBorder(),
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text('settings_label_security_token').tr(), const Text('settings_label_security_token').tr(),
TextFormField( TextFormField(
controller: securityTokenController, controller: securityTokenController,
...@@ -69,7 +101,9 @@ class _SettingsFormState extends State<SettingsForm> { ...@@ -69,7 +101,9 @@ class _SettingsFormState extends State<SettingsForm> {
border: UnderlineInputBorder(), border: UnderlineInputBorder(),
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text('settings_label_interface_type').tr(), const Text('settings_label_interface_type').tr(),
ToggleButtons( ToggleButtons(
direction: Axis.horizontal, direction: Axis.horizontal,
......
...@@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; ...@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:unicons/unicons.dart'; import 'package:unicons/unicons.dart';
import 'package:random/utils/picture_storage.dart'; import 'package:random/utils/picture_storage.dart';
import 'package:random/utils/tools.dart';
class TakePictureWidget extends StatefulWidget { class TakePictureWidget extends StatefulWidget {
const TakePictureWidget({super.key}); const TakePictureWidget({super.key});
...@@ -71,14 +72,14 @@ class TakePictureWidgetState extends State<TakePictureWidget> { ...@@ -71,14 +72,14 @@ class TakePictureWidgetState extends State<TakePictureWidget> {
try { try {
if ((controller != null) && (controller!.value.isInitialized)) { if ((controller != null) && (controller!.value.isInitialized)) {
final XFile image = await controller!.takePicture(); final XFile image = await controller!.takePicture();
print('image.path: ${image.path}'); printlog('image.path: ${image.path}');
debug.add('image.path: ${image.path}'); debug.add('image.path: ${image.path}');
File savedFile = await storage!.writeCounter(File(image.path)); File savedFile = await storage!.writeCounter(File(image.path));
debug.add('image.path: ${image.path}'); debug.add('image.path: ${image.path}');
String imagePath = savedFile.path; String imagePath = savedFile.path;
print('imagePath: $imagePath'); printlog('imagePath: $imagePath');
debug.add('imagePath: $imagePath'); debug.add('imagePath: $imagePath');
previousImages.add(imagePath); previousImages.add(imagePath);
...@@ -88,7 +89,7 @@ class TakePictureWidgetState extends State<TakePictureWidget> { ...@@ -88,7 +89,7 @@ class TakePictureWidgetState extends State<TakePictureWidget> {
debug.add('error: $e'); debug.add('error: $e');
setState(() {}); setState(() {});
print(e); printlog(e.toString());
} }
}, },
), ),
......
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:random/cubit/theme_cubit.dart';
class ThemeCard extends StatelessWidget {
const ThemeCard({
super.key,
required this.mode,
required this.icon,
});
final IconData icon;
final ThemeMode mode;
@override
Widget build(BuildContext context) {
return BlocBuilder<ThemeCubit, ThemeModeState>(
builder: (BuildContext context, ThemeModeState state) {
return Card(
elevation: 2,
shadowColor: Theme.of(context).colorScheme.shadow,
color: state.themeMode == mode
? Theme.of(context).colorScheme.primary
: Theme.of(context).colorScheme.surface,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(12)),
),
margin: const EdgeInsets.all(5),
child: InkWell(
onTap: () => BlocProvider.of<ThemeCubit>(context).getTheme(
ThemeModeState(themeMode: mode),
),
borderRadius: const BorderRadius.all(Radius.circular(12)),
child: Icon(
icon,
size: 32,
color:
state.themeMode != mode ? Theme.of(context).colorScheme.primary : Colors.white,
),
),
);
});
}
}