|
|
|
// Copyright 2022 The Flutter team. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import 'package:window_size/window_size.dart';
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
|
|
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
setWindowTitle('Simplistic Calculator');
|
|
|
|
}
|
|
|
|
|
|
|
|
runApp(
|
|
|
|
const ProviderScope(
|
|
|
|
child: CalculatorApp(),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@immutable
|
|
|
|
class CalculatorState {
|
|
|
|
const CalculatorState({
|
|
|
|
required this.buffer,
|
|
|
|
required this.error,
|
|
|
|
});
|
|
|
|
|
|
|
|
final String buffer;
|
|
|
|
final String error;
|
|
|
|
|
|
|
|
CalculatorState copyWith({
|
|
|
|
String? buffer,
|
|
|
|
String? error,
|
|
|
|
}) =>
|
|
|
|
CalculatorState(
|
|
|
|
buffer: buffer ?? this.buffer,
|
|
|
|
error: error ?? this.error,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
class CalculatorEngine extends StateNotifier<CalculatorState> {
|
|
|
|
CalculatorEngine()
|
|
|
|
: super(
|
|
|
|
const CalculatorState(
|
|
|
|
buffer: '0',
|
|
|
|
error: '',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
void addToBuffer(String str) {
|
|
|
|
state = state.copyWith(
|
|
|
|
buffer: state.buffer + str,
|
|
|
|
error: '',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
final calculatorStateProvider =
|
|
|
|
StateNotifierProvider<CalculatorEngine, CalculatorState>(
|
|
|
|
(_) => CalculatorEngine());
|
|
|
|
|
|
|
|
class CalculatorApp extends ConsumerWidget {
|
|
|
|
const CalculatorApp({super.key});
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
|
|
final state = ref.watch(calculatorStateProvider);
|
|
|
|
|
|
|
|
return MaterialApp(
|
|
|
|
debugShowCheckedModeBanner: false,
|
|
|
|
home: Scaffold(
|
|
|
|
body: Container(
|
|
|
|
color: Colors.white,
|
|
|
|
child: Center(
|
|
|
|
child: Text(
|
|
|
|
state.buffer,
|
|
|
|
style: TextStyle(fontSize: 40),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|