Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions example/counter/lib/counter/bloc/counter_event.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
part of 'counter_bloc.dart';

abstract class CounterEvent extends Equatable implements Mappable {
abstract class CounterEvent extends Equatable {
const CounterEvent();

@override
List<Object> get props => [];

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class IncrementCounterEvent extends CounterEvent {}
Expand Down
4 changes: 2 additions & 2 deletions example/counter/lib/counter/bloc/counter_state.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
part of 'counter_bloc.dart';

class CounterState extends Equatable implements Mappable {
class CounterState extends Equatable {
final int counter;

const CounterState({
Expand All @@ -20,7 +20,7 @@ class CounterState extends Equatable implements Mappable {
];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'counter': counter,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class FilteredTodosEvent extends Equatable implements Mappable {
abstract class FilteredTodosEvent extends Equatable {
const FilteredTodosEvent();

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class FilterUpdated extends FilteredTodosEvent {
Expand All @@ -18,7 +18,7 @@ class FilterUpdated extends FilteredTodosEvent {
List<Object> get props => [filter];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'filter': filter.toString().substring('VisibilityFilter.'.length),
};
}
Expand All @@ -32,7 +32,7 @@ class TodosUpdated extends FilteredTodosEvent {
List<Object> get props => [todos];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'todos': todos.map((e) => e.toEntity().toJson()).toList(),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class FilteredTodosState extends Equatable implements Mappable {
abstract class FilteredTodosState extends Equatable {
const FilteredTodosState();

@override
List<Object> get props => [];

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class FilteredTodosLoadInProgress extends FilteredTodosState {}
Expand All @@ -27,7 +27,7 @@ class FilteredTodosLoadSuccess extends FilteredTodosState {
List<Object> get props => [filteredTodos, activeFilter];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'filteredTodos':
filteredTodos.map((e) => e.toEntity().toJson()).toList(),
'activeFilter':
Expand Down
6 changes: 3 additions & 3 deletions example/flutter_todos/lib/blocs/stats/stats_event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class StatsEvent extends Equatable implements Mappable {
abstract class StatsEvent extends Equatable {
const StatsEvent();

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class StatsUpdated extends StatsEvent {
Expand All @@ -18,7 +18,7 @@ class StatsUpdated extends StatsEvent {
List<Object> get props => [todos];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'todos': todos.map((e) => e.toEntity().toJson()).toList(),
};
}
6 changes: 3 additions & 3 deletions example/flutter_todos/lib/blocs/stats/stats_state.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class StatsState extends Equatable implements Mappable {
abstract class StatsState extends Equatable {
const StatsState();

@override
List<Object> get props => [];

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class StatsLoadInProgress extends StatsState {}
Expand All @@ -23,7 +23,7 @@ class StatsLoadSuccess extends StatsState {
List<Object> get props => [numActive, numCompleted];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'numActive': numActive,
'numCompleted': numCompleted,
};
Expand Down
6 changes: 3 additions & 3 deletions example/flutter_todos/lib/blocs/tab/tab_event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class TabEvent extends Equatable implements Mappable {
abstract class TabEvent extends Equatable {
const TabEvent();

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class TabUpdated extends TabEvent {
Expand All @@ -18,7 +18,7 @@ class TabUpdated extends TabEvent {
List<Object> get props => [tab];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'tab': tab.toString(),
};
}
10 changes: 5 additions & 5 deletions example/flutter_todos/lib/blocs/todos/todos_event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class TodosEvent extends Equatable implements Mappable {
abstract class TodosEvent extends Equatable {
const TodosEvent();

@override
List<Object> get props => [];

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class TodosLoaded extends TodosEvent {}
Expand All @@ -23,7 +23,7 @@ class TodoAdded extends TodosEvent {
List<Object> get props => [todo];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'todo': todo.toEntity().toJson(),
};
}
Expand All @@ -37,7 +37,7 @@ class TodoUpdated extends TodosEvent {
List<Object> get props => [todo];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'todo': todo.toEntity().toJson(),
};
}
Expand All @@ -51,7 +51,7 @@ class TodoDeleted extends TodosEvent {
List<Object> get props => [todo];

@override
Map<String, dynamic> toMap() => {
Map<String, dynamic> toJson() => {
'todo': todo.toEntity().toJson(),
};
}
Expand Down
6 changes: 3 additions & 3 deletions example/flutter_todos/lib/blocs/todos/todos_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import 'package:equatable/equatable.dart';
import 'package:flutter_todos/models/models.dart';
import 'package:flutter_bloc_devtools/flutter_bloc_devtools.dart';

abstract class TodosState extends Equatable implements Mappable {
abstract class TodosState extends Equatable {
const TodosState();

@override
List<Object> get props => [];

@override
Map<String, dynamic> toMap() => {};
Map<String, dynamic> toJson() => {};
}

class TodosLoadInProgress extends TodosState {}
Expand All @@ -23,7 +23,7 @@ class TodosLoadSuccess extends TodosState {
List<Object> get props => [todos];

@override
Map<String, dynamic> toMap() =>
Map<String, dynamic> toJson() =>
{'todos': todos.map((e) => e.toEntity().toJson()).toList()};
}

Expand Down
60 changes: 26 additions & 34 deletions lib/src/remote_devtools_middleware.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ enum RemoteDevToolsStatus {
started
}

abstract class Mappable {
Map<String, dynamic> toMap();
}

class RemoteDevToolsObserver extends BlocObserver {
///
/// The remote-devtools server to connect to. Should include
Expand Down Expand Up @@ -110,29 +106,22 @@ class RemoteDevToolsObserver extends BlocObserver {
final message = {'type': type, 'id': socket.id, 'name': instanceName};
final blocName = _getBlocName(bloc);

if (state != null) {
/// Add or update Bloc state
if (state is Mappable) {
_appState[blocName] = state.toMap();
message['payload'] = jsonEncode(_appState);
} else {
_appState[blocName] = state.toString();
message['payload'] = jsonEncode(_appState);
}
} else {
if (state == null) {
/// Remove Bloc state
if (_appState.containsKey(blocName)) {
_removeBlocName(bloc);
_appState.remove(blocName);
message['payload'] = jsonEncode(_appState);
}
} else {
/// Add or update Bloc state
_appState[blocName] = _maybeToJson(state) ?? state.toString();
}

message['payload'] = jsonEncode(_appState);
message['action'] = _actionEncode(action);

if (type == 'ACTION') {
message['action'] = _actionEncode(action);
message['nextActionId'] = nextActionId;
} else if (action != null) {
message['action'] = action as String;
}
socket.emit(socket.id != null ? 'log' : 'log-noid', message);
}
Expand Down Expand Up @@ -161,27 +150,30 @@ class RemoteDevToolsObserver extends BlocObserver {
}
}

String _actionEncode(dynamic action) {
if (action is Mappable) {
if (action.toMap().keys.isEmpty) {
return jsonEncode({
'type': action.runtimeType.toString(),
});
}
return jsonEncode({
'type': action.runtimeType.toString(),
'payload': action.toMap(),
});
Object _maybeToJson(dynamic object) {
try {
return object.toJson();
} on NoSuchMethodError {
return null;
}
}

String _actionEncode(Object action) {
if (action == null) {
return null;
}
final jsonOrNull = _maybeToJson(action);

if (action.toString().contains('Instance of')) {
return jsonEncode({
'type': action.runtimeType.toString(),
});
var actionName = action.toString();
if (actionName.contains('Instance of')) {
actionName = action.runtimeType.toString();
}

return jsonEncode({
'type': action.toString(),
'type': actionName,
if (jsonOrNull != null &&
(jsonOrNull is Map ? jsonOrNull.isNotEmpty : true))
'payload': jsonOrNull,
});
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ homepage: https://github.com/andrea689/flutter_bloc_devtools/
version: 0.1.0

environment:
sdk: '>=2.0.0 <3.0.0'
sdk: '>=2.3.0 <3.0.0'

dependencies:
bloc: ^6.1.0
Expand Down