chemistry 0.0.1 copy "chemistry: ^0.0.1" to clipboard
chemistry: ^0.0.1 copied to clipboard

outdated

A new Flutter package project.

example/lib/main.dart

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Chemistry chemistry = Chemistry();
  late Atom<double> firstNumber;
  late Atom<double> secondNumber;
  late Atom<String> selectedOperator;
  late Molecule<dynamic> sum;

  @override
  void initState() {
    firstNumber = Atom<double>(defaultValue: 0, key: 'firstNumber');
    secondNumber = Atom<double>(defaultValue: 0, key: 'secondNumber');
    selectedOperator = Atom<String>(defaultValue: '+', key: 'selectedOperator');

    chemistry.addAtom(firstNumber);
    chemistry.addAtom(secondNumber);
    chemistry.addAtom(selectedOperator);

    sum = Molecule<dynamic>(
        atomKeys: <String>['firstNumber', 'secondNumber', 'selectedOperator'],
        computer: (atoms) {
          switch (atoms['selectedOperator']!.state) {
            case '+':
              return atoms['firstNumber']!.state + atoms['secondNumber']!.state;
            case '-':
              return atoms['firstNumber']!.state - atoms['secondNumber']!.state;
            case '*':
              return atoms['firstNumber']!.state * atoms['secondNumber']!.state;
            case '/':
              return atoms['firstNumber']!.state / atoms['secondNumber']!.state;
          }

          return 'Error';
        },
        key: 'sum');

    chemistry.addMolecule(sum);

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            children: [
              Expanded(
                child: Row(
                  children: [
                    Expanded(
                      child: TextField(
                        onChanged: (value) =>
                            firstNumber.setState(double.parse(value)),
                        keyboardType: TextInputType.number,
                        decoration: InputDecoration(
                          border: OutlineInputBorder(),
                          labelText: 'First number',
                        ),
                      ),
                    ),
                    Expanded(
                      child: AtomBuilder<String>(
                        builder: (context, value) => DropdownButton<String>(
                          value: value,
                          items: [
                            DropdownMenuItem(
                              child: Text('+'),
                              value: '+',
                            ),
                            DropdownMenuItem(
                              child: Text('-'),
                              value: '-',
                            ),
                            DropdownMenuItem(
                              child: Text('*'),
                              value: '*',
                            ),
                            DropdownMenuItem(
                              child: Text('/'),
                              value: '/',
                            ),
                          ],
                          onChanged: (value) =>
                              selectedOperator.setState(value!),
                        ),
                        atom: selectedOperator,
                      ),
                    ),
                    Expanded(
                      child: TextField(
                        onChanged: (value) =>
                            secondNumber.setState(double.parse(value)),
                        keyboardType: TextInputType.number,
                        decoration: InputDecoration(
                          border: OutlineInputBorder(),
                          labelText: 'Second number',
                        ),
                      ),
                    ),
                  ],
                ),
              ),
              Expanded(
                child: MoleculeBuilder<double>(
                    builder: (context, value) => Text('= $value'),
                    molecule: sum),
              )
            ],
          ),
        ),
      ),
    );
  }
}
8
likes
0
pub points
0%
popularity

Publisher

unverified uploader

A new Flutter package project.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on chemistry