multiple_result 2.0.0 copy "multiple_result: ^2.0.0" to clipboard
multiple_result: ^2.0.0 copied to clipboard

Multiple results for dart. Inspired by dartz's Either and Kotlin's sealed classes

example/lib/main.dart

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          final result = _shouldIncrement(_counter);
          result.when(
            (success) {
              setState(() {
                _counter++;
              });
            },
            (error) {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text(error.message),
                ),
              );
            },
          );
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  Result<bool, IncrementException> _shouldIncrement(int currentCount) {
    if (currentCount + 1 == 10) {
      return Error(IncrementException("counter can't be bigger than 9"));
    } else {
      return Success(true);
    }
  }
}

class IncrementException implements Exception {
  final String message;

  IncrementException(this.message);
}
153
likes
150
points
63.9k
downloads

Publisher

unverified uploader

Weekly Downloads

Multiple results for dart. Inspired by dartz's Either and Kotlin's sealed classes

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

meta

More

Packages that depend on multiple_result