Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
336f5b9
:arrow_up: upgraded dependencies other than `go_router`
sarbagyastha Oct 20, 2022
5d2c31b
:arrow_up: upgraded dependencies
sarbagyastha Oct 21, 2022
c320dd4
:truck: moved things in places
sarbagyastha Oct 30, 2022
bb7753d
:sparkles: created `clean_framework_firestore`
sarbagyastha Oct 30, 2022
da74aec
:fire: removed `clean_framework_core`
sarbagyastha Oct 30, 2022
5f89450
:sparkles: created `clean_framework_graphql`
sarbagyastha Oct 30, 2022
fddfaea
:arrow_down: removed dependencies on graphql and firestore
sarbagyastha Oct 30, 2022
264963c
:rotating_light: made analyzer happy to some extent
sarbagyastha Oct 30, 2022
53aaef0
:sparkles: created `clean_framework_rest`
sarbagyastha Oct 30, 2022
5210ed7
:rotating_light: fixed error due to stronger lint
sarbagyastha Oct 30, 2022
fc31a11
:recycle: minor refactor
sarbagyastha Oct 30, 2022
3082503
:bug: fixed tests
sarbagyastha Oct 30, 2022
b89c331
:rotating_light: made analyzer happy
sarbagyastha Oct 30, 2022
6abf1a1
:rotating_light: made analyzer happy
sarbagyastha Oct 30, 2022
cb672f0
:rotating_light: made analyzer happy
sarbagyastha Oct 30, 2022
2d48d0f
:bug: fixed issue with analysis options
sarbagyastha Oct 30, 2022
df7318c
:wrench: configured melos
sarbagyastha Oct 30, 2022
65c403a
:truck: moved network logger to utilities
sarbagyastha Oct 30, 2022
7da9c39
:truck: moved test helpers to `clean_framework_test` package
sarbagyastha Oct 30, 2022
4052a50
:bug: fixed failing tests
sarbagyastha Oct 30, 2022
3a793e7
:fire: removed pubspec overrides from remote repo
sarbagyastha Oct 30, 2022
125d343
:recycle: removed print
sarbagyastha Oct 30, 2022
d0cb853
:art: updated deserializer to take any object as input
sarbagyastha Oct 30, 2022
6bf9943
:sparkles: added `Deserializer.map`
sarbagyastha Oct 31, 2022
f8bc522
:sparkles: added `deserialize` extension to Map<String, dynamic>
sarbagyastha Oct 31, 2022
0d9fdc8
:art: formatted
sarbagyastha Oct 31, 2022
b5905aa
chore(release): publish packages
sarbagyastha Oct 31, 2022
a4c172e
:bookmark: updated version for release
sarbagyastha Oct 31, 2022
3f38eb0
:green_heart: fixed coverage report generation
sarbagyastha Oct 31, 2022
5b53f62
:green_heart: verify pub score
sarbagyastha Oct 31, 2022
a9024ad
:truck: moved tests to routing to own package
sarbagyastha Oct 31, 2022
8009b0b
:green_heart: named ci steps
sarbagyastha Oct 31, 2022
21dbb62
:page_facing_up: updated license and symlinked it to all packages
sarbagyastha Oct 31, 2022
0799201
:page_facing_up: updated license and symlinked it to all packages
sarbagyastha Oct 31, 2022
b0ad9a6
:page_facing_up: updated license and symlinked it to all packages
sarbagyastha Oct 31, 2022
5fbee2a
:page_facing_up: updated license and symlinked it to all packages
sarbagyastha Oct 31, 2022
25b4727
:page_facing_up: updated license and readme
sarbagyastha Oct 31, 2022
28e4c54
:bookmark: prepare for stable release of v1.5.0
sarbagyastha Nov 1, 2022
e17adfc
:rotating_light: fixed usage of deprecated method from riverpod
sarbagyastha Nov 1, 2022
81709d6
:green_heart: commented pub score verification
sarbagyastha Nov 1, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
🚨 made analyzer happy
  • Loading branch information
sarbagyastha committed Oct 30, 2022
commit b89c3315aec9e7c2a1365b133db070b23d663504
1 change: 1 addition & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ language:
linter:
rules:
one_member_abstracts: false
only_throw_errors: false
public_member_api_docs: false
21 changes: 10 additions & 11 deletions packages/clean_framework/lib/src/feature_state/feature_widget.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import 'package:clean_framework/src/feature_state/feature.dart';
import 'package:clean_framework/src/feature_state/feature_mapper.dart';
import 'package:clean_framework/src/feature_state/feature_state_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'feature.dart';
import 'feature_mapper.dart';
import 'feature_state_provider.dart';

/// For each feature entry point, a FeatureWidget instance is used to control
/// the visibility and behavior of the children. One FeatureWidget could have
/// many UI widgets, one per each state.
Expand All @@ -19,14 +18,13 @@ import 'feature_state_provider.dart';
/// current state for the given Feature, and use it as part of the [builder]
/// method.
abstract class FeatureWidget<S> extends ConsumerStatefulWidget {
final FeatureStateProvider<S, FeatureMapper<S>> provider;
final Feature feature;

FeatureWidget({
Key? key,
const FeatureWidget({
super.key,
required this.provider,
required this.feature,
}) : super(key: key);
});
final FeatureStateProvider<S, FeatureMapper<S>> provider;
final Feature feature;

/// The override of this method should return the proper widget depending
/// on the currentState value. A common pattern is to have states that
Expand Down Expand Up @@ -54,7 +52,8 @@ class _FeatureWidgetState<S> extends ConsumerState<FeatureWidget<S>> {
final mapper = ref.read(widget.provider.featuresMap);
final currentState = mapper.getStateFor(widget.feature);

//TODO THIS SHOULDN'T BE NEEDED, FIGURE OUT WHY THE REBUILD DOESN'T HAPPEN
// TODO(sarbagyastha): THIS SHOULDN'T BE NEEDED,
// FIGURE OUT WHY THE REBUILD DOESN'T HAPPEN
ref.listen(widget.provider(), (_, __) => setState(() {}));

return widget.builder(context, currentState);
Expand Down
13 changes: 7 additions & 6 deletions packages/clean_framework/lib/src/open_feature/open_feature.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// coverage:ignore-file
library open_feature;

import 'src/core/feature_client.dart';
import 'src/evaluation_context/evaluation_context.dart';
import 'src/hook/hook.dart';
import 'src/open_feature_client.dart';
import 'src/provider/feature_provider.dart';
import 'src/provider/no_op_feature_provider.dart';
import 'package:clean_framework/src/open_feature/src/core/feature_client.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/hook/hook.dart';
import 'package:clean_framework/src/open_feature/src/open_feature_client.dart';
import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart';
import 'package:clean_framework/src/open_feature/src/provider/no_op_feature_provider.dart';

export 'src/core/enums.dart';
export 'src/core/feature_client.dart';
Expand All @@ -30,6 +30,7 @@ class OpenFeature {

static OpenFeature? _instance;

// ignore: prefer_constructors_over_static_methods
static OpenFeature get instance {
return _instance ??= OpenFeature._();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// coverage:ignore-file

import 'package:clean_framework/clean_framework.dart';

/// Different error codes that can be returned by the [FeatureProvider].
enum ErrorCode {
/// Provider is not in ready state.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'flag_evaluation_lifecycle.dart';
import 'features.dart';
import 'package:clean_framework/src/open_feature/src/core/features.dart';
import 'package:clean_framework/src/open_feature/src/core/flag_evaluation_lifecycle.dart';

abstract class FeatureClient extends Features
implements FlagEvaluationLifecycle {}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import '../evaluation_context/evaluation_context.dart';
import '../flag_evaluation/flag_evaluation_details.dart';
import '../flag_evaluation/flag_evaluation_options.dart';
import 'enums.dart';
import 'package:clean_framework/src/open_feature/src/core/enums.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart';

abstract class Features {
Future<FlagEvaluationDetails<bool>> getBooleanDetails({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import '../hook/hook.dart';
import 'package:clean_framework/src/open_feature/src/hook/hook.dart';

abstract class FlagEvaluationLifecycle {
List<Hook> get hooks;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'enums.dart';
import 'package:clean_framework/src/open_feature/src/core/enums.dart';

class ResolutionDetails<T> {
ResolutionDetails({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:async';

import '../provider/feature_provider.dart';
import 'evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart';

mixin ContextTransformationMixin on FeatureProvider {
FutureOr<EvaluationContext> transformContext(EvaluationContext context);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// coverage:ignore-file

import '../core/enums/error_code.dart';
import 'package:clean_framework/src/open_feature/src/core/enums/error_code.dart';

export '../core/enums/error_code.dart';
export 'src/flag_not_found_exception.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// coverage:ignore-file

import '../open_feature_exception.dart';
import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart';

class FlagNotFoundException extends OpenFeatureException {
FlagNotFoundException(super.message) : super(code: ErrorCode.flagNotFound);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// coverage:ignore-file

import '../open_feature_exception.dart';
import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart';

class ParseException extends OpenFeatureException {
ParseException(super.message) : super(code: ErrorCode.flagNotFound);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// coverage:ignore-file

import '../open_feature_exception.dart';
import 'package:clean_framework/src/open_feature/src/exceptions/open_feature_exception.dart';

class TypeMismatchException extends OpenFeatureException {
TypeMismatchException(super.message) : super(code: ErrorCode.typeMismatch);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import '../core/enums.dart';
import 'package:clean_framework/src/open_feature/src/core/enums.dart';

class FlagEvaluationDetails<T extends Object> {
FlagEvaluationDetails({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import '../hook/hook.dart';
import 'package:clean_framework/src/open_feature/src/hook/hook.dart';

class FlagEvaluationOptions {
const FlagEvaluationOptions({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import 'dart:async';

import '../evaluation_context/evaluation_context.dart';
import '../flag_evaluation/flag_evaluation_details.dart';
import 'hook_context.dart';
import 'hook_hints.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart';
import 'package:clean_framework/src/open_feature/src/hook/hook_context.dart';
import 'package:clean_framework/src/open_feature/src/hook/hook_hints.dart';

export 'hook_context.dart';
export 'hook_hints.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// coverage:ignore-file

import '../core/enums/flag_value_type.dart';
import '../core/feature_client.dart';
import '../evaluation_context/evaluation_context.dart';
import '../provider/feature_provider.dart';
import 'package:clean_framework/src/open_feature/src/core/enums/flag_value_type.dart';
import 'package:clean_framework/src/open_feature/src/core/feature_client.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart';

class HookContext<T extends Object> {
HookContext({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// coverage:ignore-file

import '../open_feature.dart';
import 'flag_evaluation/flag_evaluation_details.dart';
import 'package:clean_framework/src/open_feature/open_feature.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_details.dart';

typedef FeatureProviderResolver<T extends Object> = Future<ResolutionDetails<T>>
Function({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '../core/resolution_details.dart';
import '../evaluation_context/evaluation_context.dart';
import '../flag_evaluation/flag_evaluation_options.dart';
import 'package:clean_framework/src/open_feature/src/core/resolution_details.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart';

abstract class FeatureProvider {
String get name;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// coverage:ignore-file

import '../core/enums/reason.dart';
import '../core/resolution_details.dart';
import '../evaluation_context/evaluation_context.dart';
import '../flag_evaluation/flag_evaluation_options.dart';
import 'feature_provider.dart';
import 'package:clean_framework/src/open_feature/src/core/enums/reason.dart';
import 'package:clean_framework/src/open_feature/src/core/resolution_details.dart';
import 'package:clean_framework/src/open_feature/src/evaluation_context/evaluation_context.dart';
import 'package:clean_framework/src/open_feature/src/flag_evaluation/flag_evaluation_options.dart';
import 'package:clean_framework/src/open_feature/src/provider/feature_provider.dart';

class NoOpFeatureProvider implements FeatureProvider {
const NoOpFeatureProvider();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import 'package:clean_framework/clean_framework.dart';
import 'package:clean_framework/src/providers/gateway.dart';
import 'package:clean_framework/src/providers/overridable_provider.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'gateway.dart';

class BridgeGatewayProvider<G extends BridgeGateway>
implements OverridableProvider<G> {
final Provider<G> _provider;
final G Function(Ref) create;

BridgeGatewayProvider(this.create) : _provider = Provider<G>(create);
final Provider<G> _provider;
final G Function(Ref) create;

@override
Override overrideWith(G gateway) => _provider.overrideWithValue(gateway);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import 'dart:async';

import 'package:clean_framework/src/providers/gateway.dart';
import 'package:clean_framework/src/utilities/clean_framework_observer.dart';
import 'package:either_dart/either.dart';

import 'gateway.dart';

abstract class ExternalInterface<R extends Request, S extends SuccessResponse> {
ExternalInterface(List<GatewayConnection<Gateway>> gatewayConnections) {
handleRequest();
Expand Down Expand Up @@ -97,7 +96,7 @@ class _RequestCompleter<R extends Request, S extends SuccessResponse> {

class _StreamRequestCompleter<R extends Request, S extends SuccessResponse>
extends _RequestCompleter<R, S> {
_StreamRequestCompleter(R request, this.emitSuccess) : super(request);
_StreamRequestCompleter(super.request, this.emitSuccess);

final void Function(S) emitSuccess;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

class ExternalInterfaceProvider<I extends ExternalInterface>
implements OverridableProvider<I> {
final Provider<I> _provider;
final I Function(Ref) create;

ExternalInterfaceProvider(this.create) : _provider = Provider<I>(create);
final Provider<I> _provider;
final I Function(Ref) create;

@override
Override overrideWith(I interface) => _provider.overrideWithValue(interface);
Expand Down
30 changes: 15 additions & 15 deletions packages/clean_framework/lib/src/providers/gateway.dart
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
import 'package:clean_framework/clean_framework_providers.dart';
import 'package:clean_framework/src/app_providers_container.dart';
import 'package:clean_framework/src/utilities/clean_framework_observer.dart';
import 'package:either_dart/either.dart';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

import '../app_providers_container.dart';

abstract class Gateway<O extends Output, R extends Request,
P extends SuccessResponse, S extends SuccessInput> {
late UseCase _useCase;

late final Transport<R, P> transport;

Gateway({
ProvidersContext? context,
UseCaseProvider? provider,
UseCase? useCase,
}) {
assert(() {
return (context != null && provider != null) || useCase != null;
}());
}) : assert(
() {
return (context != null && provider != null) || useCase != null;
}(),
'',
) {
_useCase = useCase ?? provider!.getUseCaseFromContext(context!);
_useCase.subscribe(
O,
(O output) async => _processRequest(buildRequest(output)),
);
}

late UseCase _useCase;

late final Transport<R, P> transport;

S onSuccess(covariant P response);
FailureInput onFailure(covariant FailureResponse failureResponse);
R buildRequest(O output);
Expand All @@ -48,9 +49,6 @@ abstract class Gateway<O extends Output, R extends Request,

abstract class BridgeGateway<SUBSCRIBER_OUTPUT extends Output,
PUBLISHER_OUTPUT extends Output, SUBSCRIBER_INPUT extends Input> {
late UseCase _subscriberUseCase;
late UseCase _publisherUseCase;

BridgeGateway({
required UseCase subscriberUseCase,
required UseCase publisherUseCase,
Expand All @@ -67,6 +65,8 @@ abstract class BridgeGateway<SUBSCRIBER_OUTPUT extends Output,
},
);
}
late final UseCase _subscriberUseCase;
late final UseCase _publisherUseCase;

SUBSCRIBER_INPUT onResponse(PUBLISHER_OUTPUT output);
}
Expand Down Expand Up @@ -125,8 +125,8 @@ class TypedFailureResponse<T extends Object> extends FailureResponse {
const TypedFailureResponse({
required this.type,
this.errorData = const {},
String message = '',
}) : super(message: message);
super.message,
});

final T type;
final Map<String, Object?> errorData;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'package:clean_framework/clean_framework.dart';
import 'package:clean_framework/src/providers/gateway.dart';
import 'package:clean_framework/src/providers/overridable_provider.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'gateway.dart';

class GatewayProvider<G extends Gateway> implements OverridableProvider<G> {
final Provider<G> _provider;
final G Function(Ref) create;

GatewayProvider(this.create) : _provider = Provider<G>(create);
final Provider<G> _provider;
final G Function(Ref) create;

@override
Override overrideWith(G gateway) => _provider.overrideWithValue(gateway);
Expand Down
Loading