Giter VIP home page Giter VIP logo

Comments (4)

astralstriker avatar astralstriker commented on June 4, 2024 1

You have missed specifying the type with the factory constructor.

It should be

@superEnum
enum _ModelState {
  @generic
  @Data(fields: [DataField('data', Generic)])
  Success,

  @object
  Error,

  @object
  Loading,

  @object
  Empty,
}

//Somewhere else in code
Stream<ModelState<int>> getSomething() {
  return Stream.fromFuture(Future.value(1))
      .publishReplay(maxSize: 1)
      .refCount()
      .map((data) => ModelState<int>.loading());
}

Dart is unable to automatically infer template types.

As for the values added by enums are brevity of the code, simplicity and cohesion with the idea of sealed classes being superlative enums.
If dart had support for nested classes we could have had used classes but as per your example of sealed_unions, you have to rely on member methods to generate corresponding classes and factories. Neither it's readable nor does it make much sense.

from super_enum.

chimon2000 avatar chimon2000 commented on June 4, 2024

Seems like generics could be more easily handled using classes rather than enums. What's the value added by using enums?

from super_enum.

chimon2000 avatar chimon2000 commented on June 4, 2024

@astralstriker makes sense, thanks for pointing out that fix! That appeared to solve my initial issue, however I encounter the same error when using startWith

Stream<ModelState<int>> getSomething() {
  return Stream.fromFuture(Future.value(1))
      .publishReplay(maxSize: 1)
      .refCount()
      .map((data) => ModelState<int>.success(data: data))
      .startWith(ModelState<int>.loading());

It shouldn't matter, but I am using a more complex type and seeing the same error when I consume the observable.

    return Stream.fromFuture(Future.value())
        .publishReplay(maxSize: 1)
        .refCount()
        .map((data) => ModelState<VehicleTypeResults>.loading());

This appears to result in the same error. The only call that has worked correctly for me is success.

from super_enum.

chimon2000 avatar chimon2000 commented on June 4, 2024

I believe the issue is in how non-generic classes are created with singletons. Notice the following screenshot that shows the _instance is dynamic.

image

If I swap the generated code for Loading with similar code as Success the issue is resolved.

class Loading<T> extends ModelState<T> {
  const Loading._() : super(_ModelState.Loading);

  factory Loading() {
    _instance ??= Loading._();
    return _instance;
  }

  static Loading _instance;
}

//Becomes 
class Loading<T> extends ModelState<T> {
  const Loading() : super(_ModelState.Loading);
}

From what I understand, static members also cannot be referenced with generic types. See dart-lang/language#359

from super_enum.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.