Flutter Netflix风格应用栏插件netflix_appbar的使用
Flutter Netflix风格应用栏插件netflix_appbar的使用
Dremar Design
WATCH THE VIDEO EXAMPLE
该插件将允许你模拟Netflix应用菜单的行为。
我创建的类只是一个简单的模仿,因此在较旧设备上可能会出现堆栈内存问题或图形性能问题。
如何使用它
为了使用此插件,你需要安装page_transition
(至少版本1.0.0
)和after_layout
(至少版本1.0.5
)。
导入后,你应该创建你自己的个性化状态或无状态小部件类。在你的默认main
函数中,你需要创建一个对象列表并返回NetflixAppBar
实例。
对象列表
让我们创建一个简单的对象列表:
// 初始化列表
List<DrTextTransitionTitleObject> titles = new List();
// 添加一个新的Widget类,这是你创建的一个
titles.add(new DrTextTransitionTitleObject("title", "slug", your_class_name()));
NetflixAppBar 参数
NetflixAppBar(List<DrTextTransitionTitleObject> titles, int duration,
{Widget header,
double headerHeight = 0,
Color background = Colors.transparent,
Color appBarColor,
int dumping = 100,
double titlePaddingLeft = 16,
double titlePaddingRight = 15,
double titleActiveFontSize = 20,
double maxOpacity = 0.6,
double initialOpacity = 0,
bool pinned = false,
TextStyle titleStyles = const TextStyle(
color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold),
Widget leading,
Function(ScrollController, String, NetflixAppBar) onScreenChange,
MainAxisAlignment mainAxisAlignment})
参数说明
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
titles | List | 你最初创建的对象列表 | null |
duration | int | 菜单动画的持续时间(以毫秒为单位) | null |
header | Widget | 应用栏头部,它是可选的 | null |
headerHeight | double | 应用栏头部高度 | 0 |
background | Color | Scaffold的基本颜色,NetflixToolbar 返回的颜色 |
Colors.transparent |
appBarColor | Color | 应用栏的主要颜色 | Colors.purpleAccent.withOpacity(0.7) |
dumping | int | 值越大用户需要滚动更多才能使应用栏消失 | 100 |
titleStyles | TextStyle | 要设置给菜单标题的样式 | const TextStyle( |
color: Colors.white, | |||
fontSize: 16, | |||
fontWeight: FontWeight.bold) | |||
titlePaddingLeft | double | 标题行应具有的左边距 | 16 |
titlePaddingRight | double | 标题行应具有的右边距 | 15 |
titleActiveFontSize | double | 标题标签在过渡期间的字体大小 | 20 |
leading | Widget | 应用栏的前导小部件 | null |
pinned | bool | 如果你想让应用栏始终固定在顶部,请将pinned设为true | false |
initialOpacity | double | 应用栏的初始和最小不透明度 | 0 |
maxOpacity | double | 用户向下滚动时应用栏能达到的最大不透明度。应用栏不透明度将遵循你设置的dumping值 | 0.6 |
onScreenChange | Function | 一个允许你获取当前屏幕控制权的函数 | null |
mainAxisAlignment | MainAxisAlignment | 应用栏标题行的主轴对齐方式 | MainAxisAlignment.spaceBetween 当标题长度 > 2; MainAxisAlignment.start 当标题长度 <= 2 |
示例
List<DrTextTransitionTitleObject> titles = new List();
titles.add(new DrTextTransitionTitleObject("Movies", "movies", Movies()));
titles.add(new DrTextTransitionTitleObject("Tv Series", "tv", Tv()));
titles.add(new DrTextTransitionTitleObject("About Me", "about", AboutUs()));
int milliseconds = 700;
TextStyle titleStyles = const TextStyle(
fontFamily: "Dr1",
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.bold);
instance = NetflixAppBar(
titles,
milliseconds,
initialOpacity: 0.3,
maxOpacity: 1,
dumping: 100,
titleStyles: titleStyles,
titleActiveFontSize: 21,
appBarColor: Colors.black,
background: Colors.black,
onScreenChange:
(ScrollController controller, String slug, NetflixAppBar instance) {
print("Controller received correctly \n We are on $slug screen");
this.currentSlug = slug;
this.instance = NetflixAppBar.getInstance();
var newTitles = this.instance.titles;
// ...
},
);
return instance;
重要提示
在第一次屏幕切换之后,包装NetflixAppBar
实例的类将被处置,所以请注意。
静态函数
getInstance()
NetflixAppBar.getInstance()
将返回当前的NetflixAppBar
实例。这样你就可以获取有关当前标题、属性等信息。
getContext()
NetflixAppBar.getContext()
将返回当前NetflixAppBar
实例的上下文。
notify()
NetflixAppBar.notify()
将允许你更新当前显示屏幕上图形元素。
goBack()
NetflixAppBar.goBack()
将允许你返回到上一个屏幕。
DrTextTransitionTitleObject 参数
DrTextTransitionTitleObject(String name, String heroTag, Widget function,
{List<DrTextTransitionTitleObject> newTitles,
bool personalized = false,
Widget overrideWidget,
Function overrideAction,
TextStyle primaryStyle,
Widget header,
double headerHeight,
double paddingLeft = 0})
参数说明
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
name | String | 标题值 | null |
heroTag | String | 这是标签slug,它允许应用程序将其用作Hero Widget标签进行动画处理 | null |
function | Widget | 这是你想让用户点击标签时显示的小部件。如果你设置了overrideAction 函数,你可以将function 属性设置为null |
null |
newTitles | List | 当用户点击特定标题时要显示的标题列表 | null |
personalized | bool | 如果设置为true ,则表示你想为此标题创建自己的小部件。默认小部件是一个动画文本视图 |
false |
overrideWidget | Widget | 如果personalized 为true ,你必须指定一个overrideWidget 。这是Flutter将为此标题显示的小部件 |
null |
overrideAction | Function | 当用户点击菜单上的此标题时触发的个性化函数 | null |
primaryStyle | TextStyle | 要给予默认TextView小部件的样式,该小部件显示应用栏上的标题名称 | null |
paddingLeft | double | 要给予默认TextView小部件的左边距 | 0 |
header | Widget | 当用户点击标题且未设置overrideAction 时,这将是出现在应用栏顶部的新小部件 |
null |
headerHeight | double | header widget的高度 | null |
示例
List<DrTextTransitionTitleObject> titles = new List();
List<DrTextTransitionTitleObject> tvTitles = new List();
var movies = new Movies();
var tv = new Tv();
titles.add(new DrTextTransitionTitleObject("Movies", "movies", movies,
header: switchHeader("movies")));
titles.add(new DrTextTransitionTitleObject("Tv Series", "tv", tv,
newTitles: tvTitles, header: switchHeader("movies")));
titles.add(new DrTextTransitionTitleObject("About Me", "about", AboutUs()));
tvTitles.add(new DrTextTransitionTitleObject("Tv Series", "tv", tv,
newTitles: titles,
header: switchHeader("tv"),
personalized: true,
overrideWidget: Icon(
Icons.search,
color: Colors.white,
size: 32,
)));
tvTitles.add(new DrTextTransitionTitleObject("Movies", "movies", movies,
newTitles: titles, paddingLeft: 35));
更多关于Flutter Netflix风格应用栏插件netflix_appbar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Netflix风格应用栏插件netflix_appbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用netflix_appbar
插件来实现Netflix风格的应用栏的一个代码示例。首先,你需要确保你的Flutter项目已经包含了netflix_appbar
插件。你可以通过在你的pubspec.yaml
文件中添加以下依赖项来实现这一点:
dependencies:
flutter:
sdk: flutter
netflix_appbar: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
一旦安装完成,你可以在你的Flutter应用中使用NetflixAppBar
组件。以下是一个简单的示例代码,展示了如何使用netflix_appbar
来创建一个Netflix风格的应用栏:
import 'package:flutter/material.dart';
import 'package:netflix_appbar/netflix_appbar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Netflix AppBar Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(kToolbarHeight + 40.0), // 调整高度以适应Netflix风格
child: NetflixAppBar(
title: Text('Netflix Clone'),
backgroundColor: Colors.black,
leading: IconButton(
icon: Icon(Icons.menu, color: Colors.white),
onPressed: () {},
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Colors.white),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.more_vert, color: Colors.white),
onPressed: () {},
),
],
bottom: TabBar(
indicatorColor: Colors.transparent,
tabs: [
Tab(icon: Icon(Icons.home, color: Colors.white)),
Tab(icon: Icon(Icons.trending_up, color: Colors.white)),
Tab(icon: Icon(Icons.library_books, color: Colors.white)),
],
),
),
),
body: TabBarView(
children: [
Center(child: Text('Home Tab')),
Center(child: Text('Trending Tab')),
Center(child: Text('My List Tab')),
],
),
),
);
}
}
在这个示例中,我们做了以下几件事:
-
引入必要的包:首先,我们导入了
flutter/material.dart
和netflix_appbar/netflix_appbar.dart
。 -
创建
MyApp
类:这是我们的主应用类,它扩展了StatelessWidget
。 -
设置
MaterialApp
:在MyApp
的build
方法中,我们创建了一个MaterialApp
,它包含了我们的应用的主题和主页。 -
创建
Scaffold
:在主页中,我们使用了Scaffold
来构建我们的页面布局。 -
使用
PreferredSize
包装NetflixAppBar
:由于NetflixAppBar
的高度不是标准的AppBar
高度,我们使用PreferredSize
来指定它的大小。 -
配置
NetflixAppBar
:我们设置了标题、背景颜色、leading图标(菜单按钮)、actions图标(搜索和更多按钮)以及底部的TabBar
。 -
使用
TabBarView
:在Scaffold
的body
中,我们使用TabBarView
来显示与TabBar
中的标签相对应的视图。
这个示例提供了一个基本的Netflix风格的应用栏,你可以根据需要进一步自定义和扩展它。