Recently I just got to know this dart syntax. You can define a class with a mixin like this:
class Foo = Bar with Baz;
Without the syntax, you would probably do this:
class Foo extends Bar with Baz {
Foo(): super();
}
Currently, there is an issue in DDC with the syntax, so probably better not to use it for the flutter web project yet:
Error with private variable setters in mixins on dart web. #50119
dart --version 2.19.0-266.0.dev
, also on stable / beta channels
web / chrome
Very similar issue to https://github.com/dart-lang/sdk/issues/44636.
Simplest reproduction so far: Edit: See @schultek's minimum sample below for a simpler reproduction.
dart create -t web-simple call_stack_overflow && cd call_stack_overflow
- Replace main with the following
import 'dart:html';
import 'package:riverpod/riverpod.dart';
void main() {
final container = ProviderContainer();
final value = container.read(stringValue.state);
querySelector('#output')?.text = 'Your ${value.state} app is running.';
}
final stringValue = StateProvider.autoDispose((ref) => 'Hello world');
- Add Riverpod to pubspec with
riverpod: ^2.0.0
- Run sample with
webdev serve
- Visit web app and check the console.
Stack overflow on private setter in a mixin. Making the field in the package public shifts the error to another private member.
.......
at set [_keepAliveLinks] (auto_dispose.dart:42:7)
at set [_keepAliveLinks] (auto_dispose.dart:42:7)
at set [_keepAliveLinks] (auto_dispose.dart:42:7)
at AutoDisposeProviderElementMixin.<computed> (auto_dispose.dart:6:24)
at StateProviderElement_AutoDisposeProviderElementMixin$36.__ (base.dart:81:48)
at new AutoDisposeStateProviderElement.__ (auto_dispose.dart:42:7)
at AutoDisposeStateProvider.new.createElement (auto_dispose.dart:31:44)
at [_create] (container.dart:49:32)
at framework._StateReader.new.getElement (container.dart:41:52)
at container.dart:434:37
at framework.ProviderContainer.new.readProviderElement (container.dart:466:14)
at ProviderElementProxy.new.read (proxy_provider_listenable.dart:112:25)
at framework.ProviderContainer.new.read (container.dart:257:20)
at main$ (main.dart:25:26)
at main.dart.bootstrap.js:273:10
at Array.forEach (<anonymous>)
at window.$dartRunMain (main.dart.bootstrap.js:272:32)
at <anonymous>:1:8
at Object.runMain (client.js:8777:21)
Originally reported here: https://github.com/rrousselGit/riverpod/issues/1713
I tried creating a more minimal sample, but was unsuccessful.
But I pretty much like the syntax that makes the code cleaner.
Top comments (0)