Flutter动态计算器功能插件flutter_dynamic_calculator的使用

Flutter 动态计算器功能插件 flutter_dynamic_calculator 的使用

flutter_dynamic_calculator 是一个用于轻松构建具有完全自定义能力的动态计算器的新插件。它将有助于创建自定义键盘或底部模态计算器。

默认样式

默认样式

带有自定义样式的计算器

带自定义样式的计算器

DynamicCalculator(
  theme: const CalculatorTheme(
    displayColor: Colors.black,
    displayStyle: const TextStyle(fontSize: 80, color: Colors.yellow),
    /*...*/
  ),
)

开始使用

要使用此插件,请在 pubspec.yaml 文件中添加 flutter_dynamic_calculator 作为依赖项。

dependencies:
  flutter_dynamic_calculator: 

然后在你的文件中导入库。

import 'package:flutter_dynamic_calculator/flutter_dynamic_calculator.dart';

查看 example 目录中的完整示例应用以了解如何使用 DynamicCalculator

或者你可以像下面这样直接使用 DynamicCalculator

DynamicCalculator(
  value: 123.45,
  hideExpression: true,
  onChanged: (key, value, expression) {
    /*...*/
  },
  theme: const CalculatorTheme(
    displayColor: Colors.black,
    displayStyle: const TextStyle(fontSize: 80, color: Colors.yellow),
  ),
)

完整示例

以下是一个完整的示例,展示了如何使用 flutter_dynamic_calculator 插件。

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dynamic_calculator/flutter_dynamic_calculator.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          centerTitle: true,
          title: const Text('DynamicCalculator'),
        ),
        body: const SizedBox(
          width: double.infinity,
          child: CalcButton(),
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  _CalcButtonState createState() => _CalcButtonState();
}

class _CalcButtonState extends State<CalcButton> {
  double? _currentValue = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    var calc = DynamicCalculator(
      value: _currentValue!,
      hideExpression: false,
      hideSurroundingBorder: true,
      showCalculatorDisplay: true,
      autofocus: true,
      onChanged: (key, value, expression) {
        setState(() {
          _currentValue = value ?? 0;
        });
        if (kDebugMode) {
          print('$key\t$value\t$expression');
        }
      },
      onTappedDisplay: (value, details) {
        if (kDebugMode) {
          print('$value\t${details.globalPosition}');
        }
      },
      theme: const CalculatorTheme(
        borderColor: Colors.transparent,
        borderWidth: 0.0,
        displayCalculatorRadius: 10.0,
        displayBackgroundColor: Colors.white,
        displayStyle: TextStyle(fontSize: 30, color: Colors.green),
        expressionBackgroundColor: Colors.black12,
        expressionStyle: TextStyle(fontSize: 14, color: Colors.black45),
        operatorColor: Colors.green,
        operatorStyle: TextStyle(fontSize: 24, color: Colors.white),
        commandColor: Colors.white,
        commandStyle: TextStyle(fontSize: 24, color: Colors.green),
        numColor: Colors.white,
        numStyle: TextStyle(fontSize: 24, color: Colors.black87),
      ),
    );

    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: TextFormField(
        controller: TextEditingController(text: _currentValue.toString()),
        enableInteractiveSelection: false,
        showCursor: false,
        readOnly: true,
        decoration: InputDecoration(
          contentPadding: const EdgeInsets.all(8.0),
          border: OutlineInputBorder(
            borderSide: const BorderSide(color: Colors.green),
            borderRadius: BorderRadius.circular(10.0),
          ),
          focusedBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(10.0),
            borderSide: const BorderSide(
              color: Colors.green,
            ),
          ),
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(10.0),
            borderSide: const BorderSide(
              color: Colors.green,
              width: 1.0,
            ),
          ),
        ),
        onTap: () {
          showModalBottomSheet(
            isScrollControlled: true,
            backgroundColor: Colors.transparent,
            barrierColor: Colors.transparent,
            context: context,
            builder: (BuildContext context) {
              return Container(
                decoration: BoxDecoration(
                  color: Colors.white,
                  boxShadow: [
                    BoxShadow(
                      color: Colors.grey.withOpacity(0.8),
                      spreadRadius: 5,
                      blurRadius: 2,
                      offset: const Offset(0, 3), // 改变阴影位置
                    ),
                  ],
                ),
                child: SizedBox(
                  height: MediaQuery.of(context).size.height * 0.6,
                  child: Padding(
                    padding: const EdgeInsets.only(
                      top: 8.0,
                      bottom: 8.0,
                      left: 26.0,
                      right: 26.0,
                    ),
                    child: calc,
                  ),
                ),
              );
            },
          );
        },
      ),
    );
  }
}

更多关于Flutter动态计算器功能插件flutter_dynamic_calculator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动态计算器功能插件flutter_dynamic_calculator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_dynamic_calculator 是一个用于在 Flutter 应用中实现动态计算器功能的插件。它允许你在应用中创建一个动态的计算器,用户可以通过输入表达式来执行计算。以下是如何使用 flutter_dynamic_calculator 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_dynamic_calculator 的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_dynamic_calculator: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 flutter_dynamic_calculator 包:

import 'package:flutter_dynamic_calculator/flutter_dynamic_calculator.dart';

3. 使用 DynamicCalculator 组件

你可以在你的 Flutter 应用中使用 DynamicCalculator 组件来创建一个动态计算器。以下是一个简单的示例:

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

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

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

class CalculatorScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dynamic Calculator'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            DynamicCalculator(
              onChanged: (String expression, double result) {
                print('Expression: $expression, Result: $result');
              },
            ),
          ],
        ),
      ),
    );
  }
}

4. 解释代码

  • DynamicCalculator 组件是一个动态计算器,用户可以在其中输入表达式并获取计算结果。
  • onChanged 回调函数会在用户输入表达式或计算结果发生变化时被调用。expression 参数是用户输入的表达式,result 参数是计算结果。

5. 运行应用

运行你的 Flutter 应用,你将看到一个动态计算器界面。用户可以输入表达式,例如 2 + 2 * 3,然后计算器会显示结果。

6. 自定义样式和行为

你可以通过传递不同的参数来自定义 DynamicCalculator 的外观和行为。例如,你可以设置初始表达式、禁用某些按钮、自定义按钮样式等。

DynamicCalculator(
  initialExpression: '1 + 1',
  buttonColor: Colors.blue,
  textColor: Colors.white,
  onChanged: (String expression, double result) {
    print('Expression: $expression, Result: $result');
  },
)
回到顶部