osam_flutter 2.0.8 copy "osam_flutter: ^2.0.8" to clipboard
osam_flutter: ^2.0.8 copied to clipboard

discontinued
outdated

Navigation and UI elements which fits with Osam library

example/lib/main.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:osam_flutter/osam_flutter.dart';

const colors = [Colors.red, Colors.blue, Colors.green, Colors.yellow];

final appKey = GlobalKey();

void main() async {
  final core = Core();
  runApp(MaterialApp(
    key: appKey,
    home: App(core),
  ));
}

class App extends StatefulWidget {
  final Core core;

  const App(this.core);

  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: OsamBuilder(
          stream: widget.core.propertyStream((state) => state.test),
          builder: (ctx, snapshot) {
            print('new app bar');
            return Text(snapshot.data.hashCode.toString());
          },
        ),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: OsamBuilder<List<News>>(
              key: ValueKey('list_builder'),
              stream: widget.core.propertyStream((state) => state.test.news),
              builder: (ctx, snapshot) => ListView(
                key: ValueKey('list'),
                children: snapshot.data
                    .map((e) => GestureDetector(
                          key: ValueKey(e.id),
                          onTap: () => e.update((state) => state.isFavorite = !state.isFavorite),
                          child: OsamBuilder(
                            key: ValueKey(e.id + 300),
                            stream: e.propertyStream((state) => state.isFavorite),
                            builder: (cx, snp) => Icon(snp.data ? Icons.check : Icons.close),
                          ),
                        ))
                    .toList(),
              ),
            ),
          ),
          RaisedButton(
            onPressed: () => widget.core.update((state) {
              print(state.hashCode);
              state.test = Test();
              print(state.hashCode);
            }),
          )
        ],
      ),
    );
  }
}

// ignore: must_be_immutable
class Core extends BaseState<Core> {
  var test = Test();

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

// ignore: must_be_immutable
class Test extends BaseState<Test> {
  var news = <News>[News(1), News(2)];

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

// ignore: must_be_immutable
class News extends BaseState<News> {
  bool isFavorite = false;
  final id;

  News(this.id);

  @override
  List<Object> get props => [isFavorite];
}
2
likes
0
pub points
0%
popularity

Publisher

verified publisherrenesanse.net

Navigation and UI elements which fits with Osam library

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

after_layout, flutter, osam, provider, stream_transform

More

Packages that depend on osam_flutter