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)