소스 검색

更新页面

tags/0.0.1
Weller 4 년 전
부모
커밋
6c70123e03
14개의 변경된 파일234개의 추가작업 그리고 141개의 파일을 삭제
  1. +1
    -1
      .dart_tool/package_config.json
  2. +14
    -7
      lib/pages/home_page/home_page_bloc.dart
  3. +30
    -31
      lib/pages/main_page/main_page.dart
  4. +27
    -11
      lib/pages/main_page/main_page_bloc.dart
  5. +18
    -3
      lib/register.dart
  6. +23
    -5
      lib/widgets/mine/mine_header/mine_header.dart
  7. +37
    -0
      lib/widgets/mine/mine_header/mine_header_bloc.dart
  8. +0
    -12
      lib/widgets/mine/mine_header/mine_header_creater.dart
  9. +39
    -15
      lib/widgets/mine/mine_nav/mine_nav.dart
  10. +44
    -0
      lib/widgets/mine/mine_nav/mine_nav_bg.dart
  11. +1
    -1
      lib/widgets/mine/mine_nav/mine_nav_creater.dart
  12. +0
    -0
     
  13. +0
    -12
      lib/widgets/mine/mine_quick_entry/mine_quick_entry_creater.dart
  14. +0
    -43
      lib/widgets/others/mine_header_bg_widget.dart

+ 1
- 1
.dart_tool/package_config.json 파일 보기

@@ -680,7 +680,7 @@
"languageVersion": "2.1"
}
],
"generated": "2020-09-10T07:09:00.863118Z",
"generated": "2020-09-11T04:26:30.812379Z",
"generator": "pub",
"generatorVersion": "2.7.2"
}

+ 14
- 7
lib/pages/home_page/home_page_bloc.dart 파일 보기

@@ -1,13 +1,14 @@
import 'dart:async';

import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class HomePageBloc extends BlocBase {
List<Map<String, dynamic>> _tabs = List();

StreamController<List<Map<String, dynamic>>> _tabController =
StreamController<List<Map<String, dynamic>>>();

Stream<List<Map<String, dynamic>>> get outData => _tabController.stream;

@override
@@ -17,12 +18,18 @@ class HomePageBloc extends BlocBase {
}

void refresh() {
NetUtil.request('/api/v1/config.json', onSuccess: (data) {
List list = data;
_tabs = list.map((item) {
return Map<String, dynamic>.from(item);
}).toList();
_tabController.add(_tabs);
NetUtil.request('/api/v1/config.json', onCache: (data) {
_refresh(data);
}, onSuccess: (data) {
_refresh(data);
});
}

void _refresh(dynamic data) {
List list = data;
_tabs = list.map((item) {
return Map<String, dynamic>.from(item);
}).toList();
_tabController.add(_tabs);
}
}

+ 30
- 31
lib/pages/main_page/main_page.dart 파일 보기

@@ -71,6 +71,10 @@ class _MainPageContainerState extends State<_MainPageContainer> {
@override
void initState() {
_bloc = BlocProvider.of<MainPageBloc>(context);
if (widget.data.containsKey('mod_id')) {
_bloc.loadData(widget.data['mod_id']);
}

_controller.addListener(() {
// print('${_controller.offset} ${_controller.position.maxScrollExtent}');
if (_controller.offset >= _controller.position.maxScrollExtent &&
@@ -89,21 +93,21 @@ class _MainPageContainerState extends State<_MainPageContainer> {

@override
Widget build(BuildContext context) {
return StreamBuilder<Map<String, dynamic>>(
stream: _bloc.outData,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return MediaQuery.removePadding(
removeTop: true,
context: context,
child: SmartRefresher(
enablePullDown: false,
enablePullUp: false,
header: WaterDropHeader(),
controller: _refreshController,
onLoading: _onLoading,
child: Container(
width: double.infinity,
child: Stack(
return MediaQuery.removePadding(
removeTop: true,
context: context,
child: SmartRefresher(
enablePullDown: false,
enablePullUp: false,
header: WaterDropHeader(),
controller: _refreshController,
onLoading: _onLoading,
child: Container(
width: double.infinity,
child: StreamBuilder<List<Map<String, dynamic>>>(
stream: _bloc.outData,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return Stack(
fit: StackFit.passthrough,
children: <Widget>[
MineHeaderBgWidget(
@@ -111,34 +115,29 @@ class _MainPageContainerState extends State<_MainPageContainer> {
),
CustomScrollView(
controller: _controller,
slivers: _createContent(context),
slivers: _createContent(context, snapshot.data ?? []),
)
],
),
),
));
},
);
},
),
)),
);
}

List<Widget> _createContent(BuildContext context) {
WidgetModel model = WidgetModel.fromJson(widget.data);

List<Widget> _createContent(
BuildContext context, List<Map<String, dynamic>> datas) {
List<Widget> list = List();
for (int i = 0; i < model.components.length; i++) {
WidgetModel item = model.components[i];
Map<String, dynamic> data = Map();
if (widget.data.containsKey('components')) {
data = widget.data['components'][i];
}
for (int i = 0; i < datas.length; i++) {
WidgetModel item =
WidgetModel.fromJson(Map<String, dynamic>.from(datas[i]));

list.addAll(WidgetFactory.create(
item.modName,
isSliver: true,
model: data,
model: datas[i],
));
}
model.components.forEach((item) {});
return list;
}
}

+ 27
- 11
lib/pages/main_page/main_page_bloc.dart 파일 보기

@@ -1,14 +1,15 @@
import 'dart:async';

import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class MainPageBloc extends BlocBase {
Map<String, dynamic> _mains = Map();
List<Map<String, dynamic>> _pageData = List();

StreamController<Map<String, dynamic>> _mainController =
StreamController<Map<String, dynamic>>();
Stream<Map<String, dynamic>> get outData => _mainController.stream;
StreamController<List<Map<String, dynamic>>> _mainController =
StreamController<List<Map<String, dynamic>>>();

Stream<List<Map<String, dynamic>>> get outData => _mainController.stream;

@override
void dispose() {
@@ -16,13 +17,28 @@ class MainPageBloc extends BlocBase {
_mainController = null;
}

void loadData(List<int> ids) {
NetUtil.request('/api/v1/config.json', onSuccess: (data) {
List list = data;
List<Map<String, dynamic>> tabs = list.map((item) {
void loadData(int id) {
NetUtil.request('/api/v1/mod',
method: NetMethod.POST,
params: Map<String, dynamic>.from({
'ids': [id]
}), onCache: (data) {
_loadData(id, data);
}, onSuccess: (data) {
_loadData(id, data);
});
}

void _loadData(int id, dynamic data) {
String key = id.toString();
Map<String, dynamic> json = Map<String, dynamic>.from(data);
if (json.containsKey(key)) {
List<dynamic> list = json[key];
_pageData = list.map((item) {
return Map<String, dynamic>.from(item);
}).toList();
_mainController.add(tabs.first);
});
}

_mainController.add(_pageData);
}
}

+ 18
- 3
lib/register.dart 파일 보기

@@ -1,12 +1,16 @@
import 'package:zhiying_base_widget/pages/home_page/home_page.dart';
import 'package:zhiying_base_widget/pages/login_page/login_page.dart';
import 'package:zhiying_base_widget/pages/main_page/main_page.dart';
import 'package:zhiying_base_widget/pages/wallet_page/wallet_page.dart';
import 'package:zhiying_base_widget/widgets/home/home_banner/home_banner_creater.dart';
import 'package:zhiying_base_widget/widgets/home/home_banner/home_banner_widget.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_creater.dart';
import 'package:zhiying_base_widget/widgets/home/home_quick_entry/home_quick_entry_creater.dart';
import 'package:zhiying_base_widget/widgets/home/home_slide_banner/home_slide_banner_creater.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_data/mine_data.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_nav/mine_nav_bg.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_nav/mine_nav_creater.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/mine_quick_entry.dart';
import 'package:zhiying_base_widget/widgets/others/normal_nav/normal_nav_creater.dart';
import 'package:zhiying_base_widget/widgets/wallet/wallet_data/wallet_data.dart';
import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail.dart';
@@ -24,7 +28,7 @@ class BaseWidgetRegister {
static void registPage() {
PageFactory.regist('homePage', (model) => HomePage());
PageFactory.regist('index', (model) => MainPage(model));
PageFactory.regist('login', (model) => LoginPage(model));
PageFactory.regist('profile', (model) => MainPage(model));
PageFactory.regist('category', (model) => WalletPage());
}

@@ -49,8 +53,19 @@ class BaseWidgetRegister {
WidgetFactory.regist('index_banner_two', HomeBannerCreater());

// ==================== 个人中心
WidgetFactory.regist('profile_appbar', MineNavCreater());
WidgetFactory.regist('profile_background',
DefaultWidgetCreater((model) => MineNavBg(model)));
WidgetFactory.regist(
'index_title', DefaultWidgetCreater((model) => MineHeader()));
'profile_header', DefaultWidgetCreater((model) => MineHeader(model)));
WidgetFactory.regist(
'profile_earning', DefaultWidgetCreater((model) => MineData()));
WidgetFactory.regist(
'profile_functions', DefaultWidgetCreater((model) => MineQuickEntry()));
WidgetFactory.regist('profile_my_functions',
DefaultWidgetCreater((model) => MineQuickEntry()));
WidgetFactory.regist('profile_carousel',
DefaultWidgetCreater((model) => HomeBannerWidget(model)));

// ==================== 钱包
WidgetFactory.regist(


+ 23
- 5
lib/widgets/mine/mine_header/mine_header.dart 파일 보기

@@ -3,12 +3,30 @@ import 'package:flutter/material.dart';

import 'mine_header_sk.dart';

class MineHeader extends StatelessWidget {
class MineHeader extends StatefulWidget {
final Map<String, dynamic> data;

const MineHeader(this.data, {Key key}) : super(key: key);

@override
_MineHeaderState createState() => _MineHeaderState();
}

class _MineHeaderState extends State<MineHeader> {
@override
Widget build(BuildContext context) {
return _MineContainer();
}
}

class _MineContainer extends StatefulWidget {
@override
_MineContainerState createState() => _MineContainerState();
}

class _MineContainerState extends State<_MineContainer> {
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
child: MineHeaderSkeleton(),
);
return MineHeaderSkeleton();
}
}

+ 37
- 0
lib/widgets/mine/mine_header/mine_header_bloc.dart 파일 보기

@@ -0,0 +1,37 @@
import 'dart:async';

import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class MineHeaderBloc extends BlocBase {
Map<String, dynamic> _mineData;

StreamController<Map<String, dynamic>> _mineController =
StreamController<Map<String, dynamic>>();

Stream<Map<String, dynamic>> get outData => _mineController.stream;

@override
void dispose() {
_mineController.close();
_mineController = null;
}

void loadData(int id) {
NetUtil.request('/api/v1/mod',
method: NetMethod.POST,
params: Map<String, dynamic>.from({
'ids': [id]
}),
onCache: (data) {}, onSuccess: (data) {
_loadData(id, data);
});
}

void _loadData(int id, dynamic data) {
String key = id.toString();
Map<String, dynamic> json = Map<String, dynamic>.from(data);

_mineController.add(_mineData);
}
}

+ 0
- 12
lib/widgets/mine/mine_header/mine_header_creater.dart 파일 보기

@@ -1,12 +0,0 @@
import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_header/mine_header.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class MineHeaderCreater extends WidgetCreater {
@override
List<Widget> createWidgets(Map<String, dynamic> model) {
return [
MineHeader(),
];
}
}

+ 39
- 15
lib/widgets/mine/mine_nav/mine_nav.dart 파일 보기

@@ -1,22 +1,53 @@
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;

MineNavDelegate() : super() {
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) {
// print('${shrinkOffset.toString()}');
double percent = shrinkOffset / _height;
print('${percent.toString()}');
return MineNav(Colors.red.withOpacity(percent));
return MineNav(_color.withOpacity(percent), _icons);
}

@override
@@ -32,12 +63,14 @@ class MineNavDelegate extends SliverPersistentHeaderDelegate {

class MineNav extends StatelessWidget {
final Color color;
final List<Widget> widgets;

MineNav(this.color);
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>[
@@ -48,16 +81,7 @@ class MineNav extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Icon(
Icons.settings,
color: Colors.white,
),
Icon(
Icons.chat,
color: Colors.white,
)
],
children: this.widgets,
),
)
],


+ 44
- 0
lib/widgets/mine/mine_nav/mine_nav_bg.dart 파일 보기

@@ -0,0 +1,44 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart';

class MineNavBg extends StatefulWidget {
final Map<String, dynamic> data;

const MineNavBg(this.data, {Key key}) : super(key: key);

@override
_MineNavBgState createState() => _MineNavBgState();
}

class _MineNavBgState extends State<MineNavBg> {
@override
void initState() {
super.initState();
}

void _updateBg() {
final double statusBarHeight = MediaQuery.of(context).padding.top;
if (widget.data.containsKey('img')) {
Provider.of<MainPageBgNotifier>(context, listen: false).switchBg(
Container(
width: double.infinity,
height: statusBarHeight + 250,
child: CachedNetworkImage(
imageUrl: widget.data['img'],
fit: BoxFit.fitHeight,
),
),
);
}
}

@override
Widget build(BuildContext context) {
Future.delayed(Duration.zero, () {
_updateBg();
});
return Container();
}
}

+ 1
- 1
lib/widgets/mine/mine_nav/mine_nav_creater.dart 파일 보기

@@ -9,7 +9,7 @@ class MineNavCreater extends WidgetCreater {
SliverPersistentHeader(
pinned: true,
floating: false,
delegate: MineNavDelegate(),
delegate: MineNavDelegate(model),
),
];
}


+ 0
- 0
파일 보기


+ 0
- 12
lib/widgets/mine/mine_quick_entry/mine_quick_entry_creater.dart 파일 보기

@@ -1,12 +0,0 @@
import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/widgets/mine/mine_quick_entry/mine_quick_entry.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class MineQuickEntryCreater extends WidgetCreater {
@override
List<Widget> createWidgets(Map<String, dynamic> model) {
return [
MineQuickEntry(),
];
}
}

+ 0
- 43
lib/widgets/others/mine_header_bg_widget.dart 파일 보기

@@ -37,56 +37,13 @@ class _MineHeaderBgWidgetState extends State<MineHeaderBgWidget> {
}
}

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

@override
void didChangeDependencies() {
super.didChangeDependencies();
print('didChangeDependencies');

// if (isNeedLoadMore && _provider != '') {
// print('HomeGoods loadmore...');
// _bloc.loadMore(_provider);
}

@override
Widget build(BuildContext context) {
print('mine_header_bg_widget build ${_offsetY.toString()}');
return Transform.translate(
offset: Offset(0, _offsetY),
child: _content,
);
}

// @override
// Widget build(BuildContext context) {
// return Container(
// height: 300,
// width: double.infinity,
// child: Stack(
// children: imageUrls
// .asMap()
// .keys
// .map<Widget>((i) => AnimatedOpacity(
// curve: Curves.easeIn,
// duration: Duration(milliseconds: 1600),
// opacity: i == zIndex ? 1 : 0,
// child: Container(
//// color: Color(int.parse(list[i], radix: 16))
//// .withAlpha(255),
// child: CachedNetworkImage(
// imageUrl: imageUrls[i],
// fit: BoxFit.fill,
// ),
// height: 300, //100%
// ),
// ))
// .toList(),
// ));
// }
}

class _MineHeaderBgContainer extends StatefulWidget {


불러오는 중...
취소
저장