Flutter里程表显示插件odometer的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter里程表显示插件odometer的使用

Flutter中的odometer插件是一个受Odometer js启发的包,它提供了一种动画计数器效果。此插件适用于需要展示平滑滚动数字变化的场景,例如里程表、倒计时等。

插件特性

  • 预构建小部件

    • AnimatedSlideOdometerNumber:一个隐式动画小部件,使用滑动和淡入淡出的数字过渡。
    • SlideOdometerTransition:一个显式动画小部件,同样使用滑动和淡入淡出的数字过渡。
  • 高度可定制的小部件

    • AnimatedOdometer:基于隐式动画。
    • OdometerTransition:基于显式动画,允许对新旧数字进行自定义转换。

使用方法

添加依赖

pubspec.yaml文件中添加odometer作为依赖项:

dependencies:
  flutter:
    sdk: flutter
  odometer: ^最新版本号 # 请根据实际情况填写最新版本号

然后执行flutter pub get来安装依赖。

示例代码

下面是一个完整的示例应用程序,展示了如何使用odometer插件创建一个带有动画效果的里程表。

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Odometer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(title: 'Odometer Demo Page'),
    );
  }
}

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

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

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  int _counter = 10000;
  AnimationController? animationController;
  late Animation<OdometerNumber> animation;

  void _incrementCounter() {
    setState(() {
      _counter += 88;
    });
  }

  @override
  void initState() {
    animationController = AnimationController(duration: const Duration(seconds: 2), vsync: this);
    animation = OdometerTween(begin: OdometerNumber(10000), end: OdometerNumber(12000))
        .animate(CurvedAnimation(curve: Curves.easeIn, parent: animationController!));
    super.initState();
  }

  @override
  void dispose() {
    animationController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AnimatedSlideOdometerNumber(
              letterWidth: 20,
              odometerNumber: OdometerNumber(_counter),
              duration: const Duration(seconds: 1),
              numberTextStyle: const TextStyle(fontSize: 20),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 30),
              child: SlideOdometerTransition(
                letterWidth: 20,
                odometerAnimation: animation,
                numberTextStyle: const TextStyle(fontSize: 20),
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 30),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                    onPressed: () => animationController!.reverse(),
                    child: const Text('Reverse'),
                  ),
                  ElevatedButton(
                    onPressed: () => animationController!.forward(),
                    child: const Text('Forward'),
                  )
                ],
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

在这个例子中,我们创建了一个简单的Flutter应用,其中包含两个主要部分:

  • AnimatedSlideOdometerNumber用于展示一个从当前值开始逐步增加的里程表样式动画。
  • SlideOdometerTransition则通过显式的动画控制器(AnimationController)来控制动画的正向和反向播放。

此外,还提供了一个按钮用于触发增量操作,并且可以通过“Reverse”和“Forward”按钮来手动控制动画的方向。

希望这个例子能够帮助您更好地理解和使用odometer插件!如果您有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter里程表显示插件odometer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter里程表显示插件odometer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用odometer插件来显示里程表的示例代码。这个插件可以帮助你以动画形式显示数值的变化,非常适合用于里程表、计数器等场景。

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

dependencies:
  flutter:
    sdk: flutter
  odometer: ^1.0.0  # 请确保使用最新版本

然后运行flutter pub get来安装依赖。

接下来是一个完整的示例代码,展示如何在Flutter应用中使用odometer插件:

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

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

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

class OdometerScreen extends StatefulWidget {
  @override
  _OdometerScreenState createState() => _OdometerScreenState();
}

class _OdometerScreenState extends State<OdometerScreen> {
  int _value = 0;

  void _incrementValue() {
    setState(() {
      _value += 100; // 你可以根据需要调整增量
      if (_value > 10000) {
        _value = 0; // 重置值,以避免数值过大
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Odometer Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Odometer(
              duration: Duration(milliseconds: 1000), // 动画持续时间
              value: _value.toString(),
              fontSize: 48.0,
              theme: OdometerTheme.light, // 或者 OdometerTheme.dark
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _incrementValue,
              child: Text('Increment'),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖添加:在pubspec.yaml中添加odometer依赖。
  2. 主应用MyApp是一个简单的Flutter应用,它设置了主题并导航到OdometerScreen
  3. OdometerScreen:这是包含里程表显示和按钮的主屏幕。
    • _value:存储当前显示的数值。
    • _incrementValue:每次按钮被点击时,增加_value的值。
  4. Odometer:使用Odometer小部件显示数值。
    • duration:动画持续时间。
    • value:要显示的数值,这里将其转换为字符串。
    • fontSize:字体大小。
    • theme:里程表的主题,可以是OdometerTheme.lightOdometerTheme.dark

运行这个示例应用,你会看到一个带有“Increment”按钮的界面。每次点击按钮,里程表的值会以动画形式增加,直到达到10000后重置为0。

这个示例展示了odometer插件的基本用法,你可以根据实际需求进一步自定义和扩展。

回到顶部