Flutter故事指示器插件story_indicator的使用

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

Flutter故事指示器插件story_indicator的使用

功能介绍

  • 自动运行指示器:模仿Facebook故事的效果。
  • 结合PageView显示横幅:可以与PageView一起使用来显示横幅。

示例图片

安装

在你的包的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  story_indicator: ^latest

导入

在你的 Dart 文件中导入 story_indicator 插件:

import 'package:story_indicator/story_indicator.dart';

使用示例

在任何地方使用这个插件,你可以查看示例代码中的具体用法。下面是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这个 widget 是你应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Story Indicator Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => __MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final currentIndex = ValueNotifier(0);
  static const itemOfOnBoarding = 5;
  final PageController _pageController = PageController();

  [@override](/user/override)
  void initState() {
    super.initState();
    currentIndex.addListener(() {
      if (currentIndex.value == 0) {
        _pageController.jumpToPage(currentIndex.value);
      } else {
        _pageController.animate toPage(currentIndex.value,
            duration: const Duration(milliseconds: 600),
            curve: Curves.easeInOut);
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
          color: Colors.blue,
          padding: const EdgeInsets.symmetric(vertical: 64),
          child: Column(
              children: [
                Expanded(
                    child: PageView.builder(
                        controller: _pageController,
                        itemCount: itemOfOnBoarding,
                        itemBuilder: (_, index) =&gt; Container(
                            padding: const EdgeInsets.all(24),
                            child: Container(
                                alignment: Alignment.center,
                                color: Colors.white,
                                child: Text("Page number ${index + 1}", style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w500))
                            )
                        ),
                        onPageChanged: (index) {
                          currentIndex.value = index;
                        }
                    )
                ),
                Container(
                    padding: const EdgeInsets.all(24),
                    child: StoryIndicator(
                        itemCount: itemOfOnBoarding,
                        currentIndex: currentIndex,
                        highlightColor: Colors.red,
                        indicatorSpacing: 8,
                        interval: const Duration(seconds: 2)
                    )
                )
              ]
          )
      )
    );
  }
}

更多关于Flutter故事指示器插件story_indicator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter故事指示器插件story_indicator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用story_indicator插件的一个代码示例。story_indicator插件通常用于显示图片轮播的指示器,类似于Instagram或TikTok中的故事指示器。

首先,确保你已经在pubspec.yaml文件中添加了story_indicator依赖:

dependencies:
  flutter:
    sdk: flutter
  story_indicator: ^最新版本号  # 请替换为实际最新版本号

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

接下来是一个简单的例子,展示如何使用story_indicator

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

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

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

class StoryIndicatorScreen extends StatefulWidget {
  @override
  _StoryIndicatorScreenState createState() => _StoryIndicatorScreenState();
}

class _StoryIndicatorScreenState extends State<StoryIndicatorScreen> with SingleTickerProviderStateMixin {
  late PageController _pageController;
  final List<String> _images = [
    'https://via.placeholder.com/350x150?text=Image+1',
    'https://via.placeholder.com/350x150?text=Image+2',
    'https://via.placeholder.com/350x150?text=Image+3',
  ];

  @override
  void initState() {
    super.initState();
    _pageController = PageController(initialPage: 0, length: _images.length);
    _pageController.addListener(() {
      setState(() {}); // Trigger UI update
    });
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          PageView.builder(
            controller: _pageController,
            itemCount: _images.length,
            itemBuilder: (context, index) {
              return Image.network(_images[index], fit: BoxFit.cover);
            },
          ),
          Positioned(
            bottom: 10,
            left: 0,
            right: 0,
            child: StoryIndicator(
              controller: _pageController,
              itemCount: _images.length,
              indicatorBuilder: (context, index, isActive) {
                return Container(
                  width: isActive ? 10 : 8,
                  height: isActive ? 10 : 8,
                  margin: EdgeInsets.symmetric(horizontal: 2),
                  decoration: BoxDecoration(
                    shape: BoxShape.circle,
                    color: isActive ? Colors.white : Colors.grey.withOpacity(0.5),
                  ),
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

解释

  1. 依赖导入:在pubspec.yaml中添加story_indicator依赖。
  2. 页面结构
    • 使用Scaffold作为页面布局的基础。
    • 使用Stack来重叠PageView和指示器。
  3. 图片轮播
    • 使用PageView.builder来创建图片轮播。
    • _pageController控制图片的翻页。
  4. 指示器
    • 使用StoryIndicator来显示指示器。
    • indicatorBuilder用于自定义每个指示器的样式。

这个例子展示了如何创建一个简单的图片轮播,并在底部显示一个自定义样式的指示器。你可以根据需要进一步自定义指示器的样式和行为。

回到顶部