1 Commits

Author SHA1 Message Date
2bc4314a3d Update dependency flutter to v3.44.1
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2026-06-08 00:08:39 +00:00
9 changed files with 41 additions and 118 deletions

View File

@@ -1 +1 @@
flutter 3.44.0-stable flutter 3.44.1-stable

View File

@@ -1,36 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:grpc/grpc_web.dart';
import 'package:softplayer_dart_proto/projects/v1/projects_v1.pbgrpc.dart';
import 'package:softplayer_web/core/grpc/grpc_client.dart';
final projectsGrpcProvider = Provider<ProjectsGrpcRepository>((ref) {
return ProjectsGrpcRepository(ref.watch(projectsServiceClientProvider));
});
class ProjectsGrpcRepository {
ProjectsGrpcRepository(this._client);
final ProjectsServiceClient _client;
ResponseFuture<CreateProjectResponse> createProject(
CreateProjectRequest data,
) {
try {
final response = _client.createProject(data);
return response;
} catch (e) {
rethrow;
}
}
Stream<ListProjectsResponse> listProjects() async* {
try {
await for (final projects in _client.listProjects(
ListProjectsRequest(),
)) {
yield projects;
}
} catch (error) {
rethrow;
}
}
}

View File

@@ -1,6 +1,5 @@
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:softplayer_dart_proto/accounts/v1/accounts_v1.pbgrpc.dart'; import 'package:softplayer_dart_proto/accounts/v1/accounts_v1.pbgrpc.dart';
import 'package:softplayer_dart_proto/projects/v1/projects_v1.pbgrpc.dart';
import 'package:softplayer_dart_proto/test/v1/test_v1.pbgrpc.dart'; import 'package:softplayer_dart_proto/test/v1/test_v1.pbgrpc.dart';
import 'package:softplayer_web/core/grpc/grpc_auth_interceptor.dart'; import 'package:softplayer_web/core/grpc/grpc_auth_interceptor.dart';
import 'package:softplayer_web/core/tokens/application/tokens_application.dart'; import 'package:softplayer_web/core/tokens/application/tokens_application.dart';
@@ -42,23 +41,6 @@ final accountsServiceClientProvider = Provider<AccountsServiceClient>((ref) {
); );
}); });
final projectsServiceClientProvider = Provider<ProjectsServiceClient>((ref) {
final channel = ref.watch(grpcChannelProvider);
final tokenState = ref.read(tokensControllerProvider).value;
if (tokenState == null) {
throw Exception("Token state is not initialized");
}
return ProjectsServiceClient(
channel,
interceptors: [
AuthInterceptor(
getAccessToken: tokenState.getAccessToken,
getRefreshToken: tokenState.getRefreshToken,
),
],
);
});
final publicAccountsServiceClientProvider = final publicAccountsServiceClientProvider =
Provider<PublicAccountsServiceClient>((ref) { Provider<PublicAccountsServiceClient>((ref) {
final channel = ref.watch(grpcChannelProvider); final channel = ref.watch(grpcChannelProvider);

View File

@@ -38,12 +38,18 @@ class AuthorizationController extends AsyncNotifier<AuthState> {
Future<void> signin(SignInData form) async { Future<void> signin(SignInData form) async {
state = const AsyncLoading(); state = const AsyncLoading();
sleep(Duration(seconds: 10));
state = await AsyncValue.guard(() async { state = await AsyncValue.guard(() async {
final accountsGrpc = ref.read(publicAccountsGrpcProvider); final accountsGrpc = ref.read(publicAccountsGrpcProvider);
final tokenCtrl = ref.read(tokensControllerProvider.notifier); final tokenCtrl = ref.read(tokensControllerProvider.notifier);
final response = await accountsGrpc.signIn(form.toProto()); try {
await tokenCtrl.writeTokenPair(Tokens.fromProto(response.tokenPair)); final response = await accountsGrpc.signIn(form.toProto());
return state.value!.copyWith(isAuthorized: true); await tokenCtrl.writeTokenPair(Tokens.fromProto(response.tokenPair));
return state.value!.copyWith(isAuthorized: true);
} catch (e) {
rethrow;
}
}); });
} }

View File

@@ -56,6 +56,7 @@ class _AuthorizationPage extends ConsumerState<AuthorizationPage> {
), ),
), ),
// ✅ only show decoration if width > 400
if (showDecoration) Expanded(flex: 3, child: AuthDecoration()), if (showDecoration) Expanded(flex: 3, child: AuthDecoration()),
], ],
), ),

View File

@@ -2,9 +2,9 @@ import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:softplayer_web/features/authorization/application/authorization_application.dart'; import 'package:softplayer_web/features/authorization/application/authorization_application.dart';
import 'package:softplayer_web/features/authorization/application/sign_in_data.dart'; import 'package:softplayer_web/features/authorization/application/sign_in_data.dart';
import 'package:toastification/toastification.dart';
class LoginForm extends ConsumerStatefulWidget { class LoginForm extends ConsumerStatefulWidget {
const LoginForm({super.key, required this.toggleAuth}); const LoginForm({super.key, required this.toggleAuth});
@@ -22,32 +22,34 @@ class _LoginForm extends ConsumerState<LoginForm> {
Future<void> _submitForm() async { Future<void> _submitForm() async {
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
// If valid, you can use the values
final email = emailCtrl.text; final email = emailCtrl.text;
final password = passwordCtrl.text; final password = passwordCtrl.text;
final form = SignInData(email: email, password: password); final form = SignInData(email: email, password: password);
await ref.read(authorizationControllerProvider.notifier).signin(form); try {
await ref.read(authorizationControllerProvider.notifier).signin(form);
} catch (e) {
if (!mounted) {
return;
}
log(e.toString());
toastification.show(
context: context,
type: ToastificationType.error,
style: ToastificationStyle.flatColored,
alignment: Alignment.topRight,
autoCloseDuration: const Duration(seconds: 4),
title: const Text('Authentication failed'),
description: Text(e.toString()),
showProgressBar: false,
);
}
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final state = ref.watch(authorizationControllerProvider); final state = ref.watch(authorizationControllerProvider);
ref.listenManual(authorizationControllerProvider, (previous, next) {
next.whenOrNull(
error: (error, stackTrace) {
log("test");
Fluttertoast.showToast(
msg: "Authentication failed",
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.TOP, // important for web
webPosition: "right", // 👈 important for web
webBgColor: "#d32f2f", // required for proper visibility
timeInSecForIosWeb: 4,
);
},
);
});
return LayoutBuilder( return LayoutBuilder(
builder: ((context, constraints) { builder: ((context, constraints) {
return Stack( return Stack(
@@ -114,7 +116,6 @@ class _LoginForm extends ConsumerState<LoginForm> {
autofillHints: const [AutofillHints.password], autofillHints: const [AutofillHints.password],
controller: passwordCtrl, controller: passwordCtrl,
obscureText: true, obscureText: true,
enabled: !state.isLoading,
decoration: InputDecoration(hintText: "Password"), decoration: InputDecoration(hintText: "Password"),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {

View File

@@ -17,37 +17,15 @@ class _DashboardPage extends ConsumerState<DashboardPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final ctrl = ref.read(pingControllerProvider.notifier); final ctrl = ref.read(pingControllerProvider.notifier);
return LayoutBuilder( log("test");
builder: ((context, constraints) { return Container(
return Scaffold( color: Colors.black87,
appBar: AppBar( child: ElevatedButton(
title: Text("Softplayer"), onPressed: () {
actions: [ ctrl.ping();
DropdownButtonHideUnderline( },
child: DropdownButton<String>( child: Text("pong"),
items: [ ),
DropdownMenuItem(value: "test", child: Text("test")),
DropdownMenuItem(value: "test2", child: Text("test2")),
],
onChanged: (value) => log(value!),
),
),
],
),
body: SafeArea(
child: Row(
children: [
ElevatedButton(
onPressed: () {
ctrl.ping();
},
child: Text("pong"),
),
],
),
),
);
}),
); );
} }
} }

View File

@@ -264,14 +264,6 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
fluttertoast:
dependency: "direct main"
description:
name: fluttertoast
sha256: "7903c9d5339173497bfecbc23bc4212f5a87e0edfac2e1693fb74465ea67da7e"
url: "https://pub.dev"
source: hosted
version: "9.1.0"
frontend_server_client: frontend_server_client:
dependency: transitive dependency: transitive
description: description:
@@ -864,4 +856,4 @@ packages:
version: "3.1.3" version: "3.1.3"
sdks: sdks:
dart: ">=3.11.5 <4.0.0" dart: ">=3.11.5 <4.0.0"
flutter: ">=3.41.0" flutter: ">=3.38.4"

View File

@@ -24,7 +24,6 @@ dependencies:
flutter_secure_storage: ^10.2.0 flutter_secure_storage: ^10.2.0
jwt_decoder: ^2.0.1 jwt_decoder: ^2.0.1
toastification: ^3.2.0 toastification: ^3.2.0
fluttertoast: ^9.1.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter