bolter_flutter 7.0.4 copy "bolter_flutter: ^7.0.4" to clipboard
bolter_flutter: ^7.0.4 copied to clipboard

discontinuedreplaced by: bolter

based on bolter library extensions for manage widgets updates

example/lib/main.dart

import 'dart:async';
import 'dart:math';

import 'package:bolter_flutter/bolter_flutter.dart';
import 'package:flutter/material.dart';

enum Example {
  simpleCounter("simpleCounter"),
  presenterCounter("presenterCounter"),
  performance("performance");

  final String value;
  const Example(this.value);

  static Example fromStr(String val) {
    return values.firstWhere((element) => element.value == val);
  }
}

void main(List<String> args) {
  kProfileBolterPerformanceLogging = true;
  late final Widget child;
  const t = String.fromEnvironment("type");
  if (t.isEmpty) {
    child = VerySimpleExample();
  } else {
    final type = Example.fromStr(t);
    switch (type) {
      case Example.simpleCounter:
        child = VerySimpleExample();
        break;
      case Example.presenterCounter:
        child = PresenterProvider(
          presenter: CounterPresenter(),
          child: const CounterScreen(),
        );
        break;
      case Example.performance:
        child = PresenterProvider(
          presenter: ExamplePerformancePresenter(),
          child: const ExamplePerformance(),
        );
        break;
    }
  }

  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      home: child,
    ),
  );
}

class CounterPresenter extends Presenter<CounterPresenter> {
  int _count = 0;

  int get count => _count;

  void increment() {
    perform(action: () => _count++);
  }
}

class CounterScreen extends StatelessWidget {
  const CounterScreen({super.key});

  @override
  Widget build(BuildContext context) {
    final presenter = context.presenter<CounterPresenter>();
    return Scaffold(
      appBar: AppBar(title: const Text('Counter')),
      body: Center(
        child: BolterBuilder(
          getter: () => presenter.count,
          builder: (context, count) => Text('Count: $count'),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: presenter.increment,
        child: const Icon(Icons.add),
      ),
    );
  }
}

const size = 10000000;

class ExamplePerformancePresenter
    extends Presenter<ExamplePerformancePresenter> {
  final updates = List.generate(size, (index) => index, growable: false);
  late final rnd = Random();

  void refresh() {
    final v = rnd.nextInt(10);
    perform(
      action: () {
        // final t = DateTime.now();
        for (var index = 0; index < updates.length; index++) {
          updates[index] = v;
        }
        // print(DateTime.now().difference(t).inMilliseconds);
      },
    );
  }
}

class ExamplePerformance extends StatefulWidget {
  const ExamplePerformance({Key? key}) : super(key: key);

  @override
  State<ExamplePerformance> createState() => _ExamplePerformanceState();
}

class _ExamplePerformanceState extends State<ExamplePerformance> {
  late final presenter = context.presenter<ExamplePerformancePresenter>();

  @override
  void initState() {
    Timer.periodic(const Duration(milliseconds: 200), (timer) {
      presenter.refresh();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Bolter Flutter Example'),
      ),
      body: GridView.builder(
        itemCount: size,
        addRepaintBoundaries: false,
        addAutomaticKeepAlives: false,
        addSemanticIndexes: false,
        gridDelegate:
            const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 20),
        itemBuilder: (_, index) {
          return BolterBuilder(
            getter: () => presenter.updates[index],
            builder: (_, val) => ColoredBox(
              color: Colors.cyan,
              child: Text(
                val.toString(),
                style: const TextStyle(color: Colors.white),
              ),
            ),
          );
        },
      ),
    );
  }
}

//ignore: must_be_immutable
class VerySimpleExample extends StatelessWidget {
  VerySimpleExample({super.key});

  var value = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          defaultBolter.runAndUpdate(action: () {
            value++;
          });
        },
      ),
      body: Center(
        child: BolterBuilder(
          getter: () => value,
          builder: (ctx, value) => Text(value.toString()),
        ),
      ),
    );
  }
}
4
likes
0
pub points
0%
popularity

Publisher

verified publisherrenesanse.net

based on bolter library extensions for manage widgets updates

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

bolter, flutter

More

Packages that depend on bolter_flutter