Flutter故事指示器插件story_indicator的使用
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) => 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),
),
);
},
),
),
],
),
);
}
}
解释
- 依赖导入:在
pubspec.yaml
中添加story_indicator
依赖。 - 页面结构:
- 使用
Scaffold
作为页面布局的基础。 - 使用
Stack
来重叠PageView
和指示器。
- 使用
- 图片轮播:
- 使用
PageView.builder
来创建图片轮播。 _pageController
控制图片的翻页。
- 使用
- 指示器:
- 使用
StoryIndicator
来显示指示器。 indicatorBuilder
用于自定义每个指示器的样式。
- 使用
这个例子展示了如何创建一个简单的图片轮播,并在底部显示一个自定义样式的指示器。你可以根据需要进一步自定义指示器的样式和行为。