Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat/v2.0.0 #85

Draft
wants to merge 9 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Expand Up @@ -19,16 +19,16 @@ jobs:
cancel-in-progress: true

steps:
- uses: actions/checkout@v3
- uses: dart-lang/setup-dart@v1.5.0
- uses: actions/checkout@v4
- uses: dart-lang/setup-dart@v1.6.4

# Dart
- name: Install dependencies
run: dart pub get
working-directory: ./packages/solidart

# Flutter
- uses: subosito/flutter-action@v2.10.0
- uses: subosito/flutter-action@v2.16.0
with:
channel: "stable"
- name: Install dependencies
Expand All @@ -51,6 +51,6 @@ jobs:
run: melos run combine_coverage

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
with:
files: ./lcov.info
5 changes: 2 additions & 3 deletions examples/counter/lib/main.dart
Expand Up @@ -41,9 +41,8 @@ class _CounterPageState extends State<CounterPage> {
),
body: Center(
child: SignalBuilder(
signal: counter,
builder: (_, value, __) {
return Text('$value');
builder: (_, __) {
return Text(counter().toString());
},
),
),
Expand Down
2 changes: 1 addition & 1 deletion examples/counter/pubspec.yaml
Expand Up @@ -31,7 +31,7 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_solidart: ^1.7.0
flutter_solidart: ^2.0.0

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
Expand Down
2 changes: 1 addition & 1 deletion examples/github_search/pubspec.yaml
Expand Up @@ -30,7 +30,7 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_solidart: ^1.7.0
flutter_solidart: ^2.0.0
json_annotation: ^4.8.1
equatable: ^2.0.5
http: ^1.2.1
Expand Down
9 changes: 4 additions & 5 deletions examples/todos/lib/widgets/todos_list.dart
Expand Up @@ -35,12 +35,11 @@ class _TodoListState extends State<TodoList> {
@override
Widget build(BuildContext context) {
// rebuilds this BuildContext every time the `activeFilter` value changes
final activeFilter = context.observe<TodosFilter>();

final activeFilter = context.observeSignal<TodosFilter>();
return SignalBuilder(
// react to the correct list of todos list
signal: mapFilterToTodosList(activeFilter),
builder: (_, todos, __) {
builder: (_, __) {
// react to the correct list of todos list
final todos = mapFilterToTodosList(activeFilter).value;
return ListView.builder(
itemCount: todos.length,
itemBuilder: (BuildContext context, int index) {
Expand Down
13 changes: 6 additions & 7 deletions examples/todos/lib/widgets/toolbar.dart
Expand Up @@ -30,14 +30,14 @@ class _ToolbarState extends State<Toolbar> {
}

/// Maps the given [filter] to the correct list of todos
ReadSignal<int> mapFilterToTodosList(TodosFilter filter) {
int mapFilterToTodosCount(TodosFilter filter) {
switch (filter) {
case TodosFilter.all:
return allTodosCount;
return allTodosCount();
case TodosFilter.incomplete:
return incompleteTodosCount;
return incompleteTodosCount();
case TodosFilter.completed:
return completedTodosCount;
return completedTodosCount();
}
}

Expand All @@ -50,11 +50,10 @@ class _ToolbarState extends State<Toolbar> {
labelColor: Colors.black,
tabs: TodosFilter.values.map(
(filter) {
final todosCount = mapFilterToTodosList(filter);
// Each tab bar is using its specific todos count signal
return SignalBuilder(
signal: todosCount,
builder: (context, todosCount, _) {
builder: (context, _) {
final todosCount = mapFilterToTodosCount(filter);
return Tab(text: '${filter.name} ($todosCount)');
},
);
Expand Down
2 changes: 1 addition & 1 deletion examples/todos/pubspec.yaml
Expand Up @@ -31,7 +31,7 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_solidart: ^1.7.0
flutter_solidart: ^2.0.0
uuid: ^4.4.0

dev_dependencies:
Expand Down
6 changes: 3 additions & 3 deletions examples/toggle_theme/lib/main.dart
Expand Up @@ -20,7 +20,7 @@ class MyApp extends StatelessWidget {
// using the builder method to immediately access the signal
builder: (context) {
// observe the theme mode value this will rebuild every time the themeMode signal changes.
final themeMode = context.observe<ThemeMode>();
final themeMode = context.observeSignal<ThemeMode>();
return MaterialApp(
title: 'Toggle theme',
themeMode: themeMode,
Expand Down Expand Up @@ -48,8 +48,8 @@ class MyHomePage extends StatelessWidget {
child:
// Listen to the theme mode signal rebuilding only the IconButton
SignalBuilder(
signal: themeMode,
builder: (_, mode, __) {
builder: (_, __) {
final mode = themeMode();
return IconButton(
onPressed: () {
// toggle the theme mode
Expand Down
2 changes: 1 addition & 1 deletion examples/toggle_theme/pubspec.yaml
Expand Up @@ -31,7 +31,7 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_solidart: ^1.7.0
flutter_solidart: ^2.0.0

dev_dependencies:
custom_lint: ^0.6.4
Expand Down
28 changes: 28 additions & 0 deletions packages/flutter_solidart/CHANGELOG.md
@@ -1,3 +1,31 @@
## 2.0.0

- **CHORE**: Improved `Solid` widget performance by more than 3000% in finding ancestor providers.
- **FEAT**: The `SignalBuilder` widget now automatically tracks the `Signal`s used in the `builder` function allowing you to react to N signals at the same time.
_Before_:
```dart
SignalBuilder(
signal: counter,
builder: (context, value, child) {
return Text('$value');
},
),
```

_Now_:
```dart
SignalBuilder(
builder: (context, child) {
return Text('${counter.value}');
},
),
```
- **BREAKING CHANGE**: Removed `DualSignalBuilder` and `TripleSignalBuilder` in favor of `SignalBuilder`.


### Changes from solidart

- **CHORE**: Add `devToolsEnabled` option to manually disable the DevTools extension that defaults to `kDebugMode`
## 1.7.1

- Update dependencies
Expand Down
5 changes: 2 additions & 3 deletions packages/flutter_solidart/example/lib/pages/counter.dart
Expand Up @@ -17,9 +17,8 @@ class _CounterPageState extends State<CounterPage> {
appBar: AppBar(title: const Text('Counter')),
body: Center(
child: SignalBuilder(
signal: counter,
builder: (context, count, _) {
return Text('Counter: $count');
builder: (_, __) {
return Text('Counter: ${counter()}');
},
),
),
Expand Down
26 changes: 10 additions & 16 deletions packages/flutter_solidart/example/lib/pages/derived_signal.dart
Expand Up @@ -20,22 +20,16 @@ class _DerivedSignalsPageState extends State<DerivedSignalsPage> {
title: const Text('Derived Signals'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SignalBuilder(
signal: count,
builder: (_, value, __) {
return Text('Count: $value');
}),
const SizedBox(height: 16),
SignalBuilder(
signal: doubleCount,
builder: (_, value, __) {
return Text('Double Count: $value');
}),
const SizedBox(height: 16),
],
child: SignalBuilder(
builder: (_, __) => Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Count: ${count()}'),
const SizedBox(height: 16),
Text('Double Count: ${doubleCount()}'),
const SizedBox(height: 16),
],
),
),
),
floatingActionButton: FloatingActionButton(
Expand Down
Expand Up @@ -24,28 +24,23 @@ class _DualSignalBuilderPageState extends State<DualSignalBuilderPage> {
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
DualSignalBuilder(
firstSignal: counter1,
secondSignal: counter2,
builder: (_, value1, value2, __) {
return ListTile(
title: Text(
'First counter: $value1',
textAlign: TextAlign.center,
style:
textTheme.titleMedium!.copyWith(color: Colors.black),
),
subtitle: Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(
'Second counter: $value2',
textAlign: TextAlign.center,
style: textTheme.titleMedium!
.copyWith(color: Colors.black),
),
),
);
}),
SignalBuilder(builder: (_, __) {
return ListTile(
title: Text(
'First counter: ${counter1.value}',
textAlign: TextAlign.center,
style: textTheme.titleMedium!.copyWith(color: Colors.black),
),
subtitle: Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(
'Second counter: ${counter2.value}',
textAlign: TextAlign.center,
style: textTheme.titleMedium!.copyWith(color: Colors.black),
),
),
);
}),
const SizedBox(height: 16),
Row(
mainAxisSize: MainAxisSize.min,
Expand Down
8 changes: 3 additions & 5 deletions packages/flutter_solidart/example/lib/pages/effects.dart
Expand Up @@ -39,11 +39,9 @@ class _EffectsPageState extends State<EffectsPage> {
children: [
const Text('Check the console to see the effect printing'),
const SizedBox(height: 16),
SignalBuilder(
signal: count,
builder: (context, value, __) {
return Text('Count: $value');
}),
SignalBuilder(builder: (context, child) {
return Text('Count: ${count.value}');
}),
],
),
),
Expand Down
3 changes: 1 addition & 2 deletions packages/flutter_solidart/example/lib/pages/list_signal.dart
Expand Up @@ -39,8 +39,7 @@ class _ListSignalPageState extends State<ListSignalPage> {
children: [
Expanded(
child: SignalBuilder(
signal: items,
builder: (context, items, __) {
builder: (context, child) {
return ListView.separated(
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
Expand Down
3 changes: 1 addition & 2 deletions packages/flutter_solidart/example/lib/pages/map_signal.dart
Expand Up @@ -45,8 +45,7 @@ class _MapSignalPageState extends State<MapSignalPage> {
children: [
Expanded(
child: SignalBuilder(
signal: items,
builder: (context, items, __) {
builder: (context, child) {
return ListView.separated(
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
Expand Down
3 changes: 1 addition & 2 deletions packages/flutter_solidart/example/lib/pages/set_signal.dart
Expand Up @@ -39,8 +39,7 @@ class _SetSignalPageState extends State<SetSignalPage> {
children: [
Expanded(
child: SignalBuilder(
signal: items,
builder: (context, items, __) {
builder: (context, child) {
return ListView.separated(
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
Expand Down
Expand Up @@ -70,8 +70,8 @@ class FullName extends StatelessWidget {

@override
Widget build(BuildContext context) {
final firstName = context.observe<String>(#firstName);
final lastName = context.observe<String>(#lastName);
final firstName = context.observeSignal<String>(#firstName);
final lastName = context.observeSignal<String>(#lastName);
return ListTile(
title: Text('First Name: $firstName'),
subtitle: Text('LastName: $lastName'),
Expand Down
Expand Up @@ -27,7 +27,7 @@ class SomeChild extends StatelessWidget {
@override
Widget build(BuildContext context) {
// retrieve the count signal, this works only if you don't have another signal of type int
final count = context.observe<int>();
final count = context.observeSignal<int>();

return Center(
child: Column(
Expand Down
Expand Up @@ -77,7 +77,7 @@ class _Counter1 extends StatelessWidget {

@override
Widget build(BuildContext context) {
final counter1 = context.observe<int>(#firstCounter);
final counter1 = context.observeSignal<int>(#firstCounter);
print('build counter1');
return Text('Counter1: $counter1');
}
Expand All @@ -89,7 +89,7 @@ class _Counter2 extends StatelessWidget {

@override
Widget build(BuildContext context) {
final counter2 = context.observe<int>(#secondCounter);
final counter2 = context.observeSignal<int>(#secondCounter);
print('build counter2');
return Text('Counter2: $counter2');
}
Expand Down
Expand Up @@ -57,17 +57,15 @@ class SomeChild extends StatelessWidget {
children: [
// render the count value
SignalBuilder(
signal: count,
builder: (context, value, child) {
return Text('count: $value');
builder: (context, child) {
return Text('count: ${count.value}');
},
),
const SizedBox(height: 8),
// render the double count value
SignalBuilder(
signal: doubleCount,
builder: (context, value, child) {
return Text('doubleCount: $value');
builder: (context, child) {
return Text('doubleCount: ${doubleCount.value}');
},
),
const SizedBox(height: 8),
Expand Down
2 changes: 1 addition & 1 deletion packages/flutter_solidart/example/pubspec.yaml
Expand Up @@ -32,7 +32,7 @@ dependencies:
flutter:
sdk: flutter
http: ^0.13.6
flutter_solidart: ^1.7.0
flutter_solidart: ^2.0.0

dev_dependencies:
flutter_test:
Expand Down