|
- import 'dart:convert' as convert;
- import 'dart:ui';
-
- import 'package:cached_network_image/cached_network_image.dart';
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:zhiying_comm/zhiying_comm.dart';
-
- class MineNavDelegate extends SliverPersistentHeaderDelegate {
- final Map<String, dynamic> data;
- double _height;
- Color _color;
-
- List<Widget> _icons = List();
-
- MineNavDelegate(this.data) : super() {
- _height = MediaQueryData.fromWindow(window).padding.top + 44;
- String d = data['data'];
- Map<String, dynamic> json = convert.jsonDecode(d);
- if (json.containsKey('app_bar_bg_color')) {
- _color = HexColor.fromHex(json['app_bar_bg_color']);
- } else {
- _color = Colors.amber;
- }
- if (json.containsKey('app_bar_icons')) {
- List icons = json['app_bar_icons'];
- _icons = icons.map((icon) {
- SkipModel model = SkipModel.fromJson(Map<String, dynamic>.from(icon));
- return GestureDetector(
- child: Container(
- width: 24,
- height: 24,
- margin: EdgeInsets.only(left: 6),
- child: CachedNetworkImage(
- imageUrl: model.icon,
- ),
- ),
- onTap: () {
- print('页面跳转 ${model.skipIdentifier}');
- },
- );
- }).toList();
- }
- }
-
- @override
- Widget build(
- BuildContext context, double shrinkOffset, bool overlapsContent) {
- double percent = shrinkOffset / _height;
- return MineNav(_color.withOpacity(percent), _icons);
- }
-
- @override
- double get maxExtent => _height;
-
- @override
- double get minExtent => _height;
-
- @override
- bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) =>
- false; // 如果内容需要更新,设置为true
- }
-
- class MineNav extends StatelessWidget {
- final Color color;
- final List<Widget> widgets;
-
- MineNav(this.color, this.widgets);
-
- @override
- Widget build(BuildContext context) {
- return Container(
- padding: EdgeInsets.only(left: 12, right: 12),
- color: color,
- child: Column(
- children: <Widget>[
- Expanded(child: Container()),
- Container(
- width: double.infinity,
- height: 44,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.end,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: this.widgets,
- ),
- )
- ],
- ));
- }
- }
|