首页搭建
tabbar banner 滚动导航栏颜色渐变
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
const APPBAR_SCROLL_OFFSET = 100;
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
double _appbarAlpha = 0.0;
List<String> _imageUrls = [
'http://file02.16sucai.com/d/file/2015/0128/8b0f093a8edea9f7e7458406f19098af.jpg',
'http://b2-q.mafengwo.net/s5/M00/91/06/wKgB3FH_RVuATULaAAH7UzpKp6043.jpeg',
'http://file02.16sucai.com/d/file/2015/0408/779334da99e40adb587d0ba715eca102.jpg',
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: <Widget>[
MediaQuery.removePadding( // 移除widget边距
removeTop: true,
context: context,
child: NotificationListener(
onNotification: (scrollNotification) {
if (scrollNotification is ScrollUpdateNotification && scrollNotification.depth == 0) {
_onScroll(scrollNotification.metrics.pixels);
}
return true;
},
child: ListView(children: <Widget>[
Container(
height: 180,
child: Swiper(
itemCount: _imageUrls.length,
autoplay: true,
itemBuilder: (BuildContext context, int index) {
return Image.network(
_imageUrls[index],
fit: BoxFit.fill,
);
},
pagination: SwiperPagination(),
)),
Container(
child: Text('哈哈',),
),
]))),
Opacity(
opacity: _appbarAlpha,
child: Container(
height: 80,
decoration: BoxDecoration(color: Colors.white),
child: Center(
child: Padding(padding: EdgeInsets.only(top: 20),
child: Text('首页'),),
),
),
),
],
),
);
}
void _onScroll(offset) {
double alpha = offset / APPBAR_SCROLL_OFFSET;
if (alpha < 0) {
alpha = 0;
} else if (alpha > 1) {
alpha = 1;
}
setState(() {
_appbarAlpha = alpha;
});
print(alpha);
}
}
网络请求
http
数据模型转换
json_to_dart
异步加载
Future 和 FutureBuilder
本地存储
shared_preference