diff --git a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165239.dart b/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165239.dart deleted file mode 100644 index 7d9419accc5de640e797543e6d962bebc7a1a7c9..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165239.dart +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'package:flutter/material.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/ActivityReportRepository.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:gmalpha_flutter/commonModel/live/BaseModel.dart'; -import 'package:gmalpha_flutter/commonModel/live/LiveData.dart'; -import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -class ActivityReportModel extends BaseModel { - - LiveData<ActivityReportEntity> activityReportLive = new LiveData(); - - final String cookie; - final int id; - final int type; - - ActivityReportModel(this.cookie, this.id, this.type); - - init(BuildContext context) { - - Map<String, dynamic> headMap = new Map(); - headMap.putIfAbsent("Cookie", () => cookie); - DioUtil.addHeadMap = headMap; - ActivityReportRepository.getInstance().getActivityReport(id, type).listen((value) { - if (value != null) { - activityReportLive.notifyView(value); - } - }).onError((error) { - Toast.show(context, "${error.toString()}"); - print(error); - }); - } - - @override - void dispose() { - activityReportLive.dispost(); - } - -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165918.dart b/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165918.dart deleted file mode 100644 index 74d9423c2e499f05fb11ab5f547fce0bef9976c0..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165918.dart +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'package:flutter/material.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/ActivityReportRepository.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:gmalpha_flutter/commonModel/live/BaseModel.dart'; -import 'package:gmalpha_flutter/commonModel/live/LiveData.dart'; -import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -class ActivityReportModel extends BaseModel { - - LiveData<ActivityReportEntity> activityReportLive = new LiveData(); - - final String cookie; - final int id; - final int type; - - ActivityReportModel(this.cookie, this.id, this.type); - - init(BuildContext context) { - - Map<String, dynamic> headMap = new Map(); - headMap.putIfAbsent("Cookie", () => cookie); - DioUtil.addHead = headMap; - ActivityReportRepository.getInstance().getActivityReport(id, type).listen((value) { - if (value != null) { - activityReportLive.notifyView(value); - } - }).onError((error) { - Toast.show(context, "${error.toString()}"); - print(error); - }); - } - - @override - void dispose() { - activityReportLive.dispost(); - } - -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165933.dart b/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165933.dart deleted file mode 100644 index b94109e101222b92ab1b40da3aa836eda46e7fe2..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165933.dart +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'package:flutter/material.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/ActivityReportRepository.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:gmalpha_flutter/commonModel/live/BaseModel.dart'; -import 'package:gmalpha_flutter/commonModel/live/LiveData.dart'; -import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -class ActivityReportModel extends BaseModel { - - LiveData<ActivityReportEntity> activityReportLive = new LiveData(); - - final String cookie; - final int id; - final int type; - - ActivityReportModel(this.cookie, this.id, this.type); - - init(BuildContext context) { - - Map<String, dynamic> headMap = new Map(); - headMap.putIfAbsent("Cookie", () => cookie); - DioUtil*().addHead = headMap; - ActivityReportRepository.getInstance().getActivityReport(id, type).listen((value) { - if (value != null) { - activityReportLive.notifyView(value); - } - }).onError((error) { - Toast.show(context, "${error.toString()}"); - print(error); - }); - } - - @override - void dispose() { - activityReportLive.dispost(); - } - -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165934.dart b/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165934.dart deleted file mode 100644 index 2952edfdc22bafdcfaf6638e6d0ae42cb4b8f4da..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165934.dart +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'package:flutter/material.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/ActivityReportRepository.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:gmalpha_flutter/commonModel/live/BaseModel.dart'; -import 'package:gmalpha_flutter/commonModel/live/LiveData.dart'; -import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -class ActivityReportModel extends BaseModel { - - LiveData<ActivityReportEntity> activityReportLive = new LiveData(); - - final String cookie; - final int id; - final int type; - - ActivityReportModel(this.cookie, this.id, this.type); - - init(BuildContext context) { - - Map<String, dynamic> headMap = new Map(); - headMap.putIfAbsent("Cookie", () => cookie); - DioUtil*.addHead = headMap; - ActivityReportRepository.getInstance().getActivityReport(id, type).listen((value) { - if (value != null) { - activityReportLive.notifyView(value); - } - }).onError((error) { - Toast.show(context, "${error.toString()}"); - print(error); - }); - } - - @override - void dispose() { - activityReportLive.dispost(); - } - -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165936.dart b/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165936.dart deleted file mode 100644 index 1418ae8fec14ca225a4c77686fcead59b5b5675f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportModel_20190924165936.dart +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'package:flutter/material.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/ActivityReportRepository.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:gmalpha_flutter/commonModel/live/BaseModel.dart'; -import 'package:gmalpha_flutter/commonModel/live/LiveData.dart'; -import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -class ActivityReportModel extends BaseModel { - - LiveData<ActivityReportEntity> activityReportLive = new LiveData(); - - final String cookie; - final int id; - final int type; - - ActivityReportModel(this.cookie, this.id, this.type); - - init(BuildContext context) { - - Map<String, dynamic> headMap = new Map(); - headMap.putIfAbsent("Cookie", () => cookie); - DioUtil().addHead = headMap; - ActivityReportRepository.getInstance().getActivityReport(id, type).listen((value) { - if (value != null) { - activityReportLive.notifyView(value); - } - }).onError((error) { - Toast.show(context, "${error.toString()}"); - print(error); - }); - } - - @override - void dispose() { - activityReportLive.dispost(); - } - -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924164532.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924164532.dart deleted file mode 100644 index b35e2ac80c3ebd06459105c71ad2a260a05bf1fc..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924164532.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170044.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170044.dart deleted file mode 100644 index 50f5f0c60c6d41bbc35b04108b7e689a986eec2e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170044.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170053.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170053.dart deleted file mode 100644 index 6fbbd0591c53762b2fce26fcdf7ce4cb6bd02c5e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170053.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards),? - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170054.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170054.dart deleted file mode 100644 index c7f260365a64377998a7fbb0b659f52e0e46d5c2..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170054.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170117.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170117.dart deleted file mode 100644 index 4bdbd77c99f6982f63501da269b85805867da810..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170117.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost., delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170119.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170119.dart deleted file mode 100644 index b1329fc3eb68852d885fa0e3f0be99fdb37c946f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170119.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.to, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170122.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170122.dart deleted file mode 100644 index c7f260365a64377998a7fbb0b659f52e0e46d5c2..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170122.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170151.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170151.dart deleted file mode 100644 index 50f5f0c60c6d41bbc35b04108b7e689a986eec2e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170151.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image.imageUrl + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170328.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170328.dart deleted file mode 100644 index 1d009da77c77af7f758f9d2b56bd05a2b22ebc3e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170328.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170705.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170705.dart deleted file mode 100644 index 434f7af5c90d884cfd8f3c4608b2fd03588d417d..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170705.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170710.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170710.dart deleted file mode 100644 index f4962b6af8dbb0b2883c2ff7972a45fcb2b8e9df..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170710.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170718.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170718.dart deleted file mode 100644 index 163ca9c5da4481db172032a33df73a8d584c1786..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170718.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170725.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170725.dart deleted file mode 100644 index 1b69f63922ed3374dac5c80a78a522b1e7dbe07a..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170725.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 21212121, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170749.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170749.dart deleted file mode 100644 index 1a7341e9aa3e0bd04116603ab458f201e822f9dd..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170749.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222.0, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 21212121, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170753.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170753.dart deleted file mode 100644 index 633cc5ec4c088748f084e59ba0c24a5b8bc1cbf3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170753.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222.0, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21.0, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 21212121, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170758.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170758.dart deleted file mode 100644 index 0dbe8f7ed9af813abccbbbdb0419055f98c2b705..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170758.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222.0, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21.0, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21.0, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 21212121, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170803.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170803.dart deleted file mode 100644 index aa079b4446178787b33e875dc61fb28a6404f3be..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170803.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222.0, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21.0, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 21.0, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 21212121.0, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170855.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170855.dart deleted file mode 100644 index f4962b6af8dbb0b2883c2ff7972a45fcb2b8e9df..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170855.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 21, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170857.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170857.dart deleted file mode 100644 index 434f7af5c90d884cfd8f3c4608b2fd03588d417d..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170857.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1222, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170859.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170859.dart deleted file mode 100644 index 1d009da77c77af7f758f9d2b56bd05a2b22ebc3e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170859.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170922.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170922.dart deleted file mode 100644 index 89f4c6dcbab67df1c3ca4f21eb06e5e32bd3e1cc..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924170922.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171126.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171126.dart deleted file mode 100644 index 684566f7368b5a5aad373b49dd9c0edd67d950e7..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171126.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toDouble(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171130.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171130.dart deleted file mode 100644 index 17187ef2580054085bc752d05f0a2673bd9796ff..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171130.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toDouble(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171135.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171135.dart deleted file mode 100644 index 23216bfba6dc65dbfce0d404ecb77a47a43c7d5f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171135.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toDouble(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171140.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171140.dart deleted file mode 100644 index 48ba8efe793d8b3b50f3dc833a5b8282e0a33a4e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924171140.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toDouble(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172051.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172051.dart deleted file mode 100644 index 02bf53ee503561ac9e1ef1fd8ee30563dfcd1a71..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172051.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.t, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172053.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172053.dart deleted file mode 100644 index c6ae0b16c20858791b7b0446a20da17f1434a3d6..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172053.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toI, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172055.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172055.dart deleted file mode 100644 index 2eb8c527a18ab02c5c5ca4795d957847f8d23679..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172055.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.I, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172100.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172100.dart deleted file mode 100644 index 1608246022cf32988fe7ec410f01244d304d6119..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172100.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toInt(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toDouble(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172108.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172108.dart deleted file mode 100644 index 37713bfce0afb570b4a427f341bec61902d3301e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172108.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toInt(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toInt(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172113.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172113.dart deleted file mode 100644 index d2308da65aae785ecbd72460c78e030241c5908f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172113.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toInt(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toInt(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toInt(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172117.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172117.dart deleted file mode 100644 index de62f4d135fc01247c4b9e4f886bd3602d5f548b..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172117.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.total_cost.toInt(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toInt(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toInt(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toInt(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172227.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172227.dart deleted file mode 100644 index f5466347127af0e05537919d1ffb40a2d2a18486..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172227.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost.toInt(), delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toInt(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toInt(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toInt(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172246.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172246.dart deleted file mode 100644 index 278f065e0cfcef127b026d2b59ce16c35940c6f5..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172246.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat.toInt(), delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toInt(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toInt(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172251.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172251.dart deleted file mode 100644 index 6f61a3f3b68d07bfeed125c55f6a1ad5777a8123..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172251.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1.1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toInt(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toInt(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172429.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172429.dart deleted file mode 100644 index fe5145e27983fe4cc9a85b509a23a5606400a3e2..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172429.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1.1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toInt(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172440.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172440.dart deleted file mode 100644 index b64b254a88c42fe6400f669a7cf522dd10587e6e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172440.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1.1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172453.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172453.dart deleted file mode 100644 index 3b49a9182cde44f011cb83be9edc816e985c6d2c..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172453.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1.1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172500.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172500.dart deleted file mode 100644 index 3f79efd722a72e5785d14d9fe38559e83b583288..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172500.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1.1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172503.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172503.dart deleted file mode 100644 index 15129cd4e5ad192dc0dbc83e9d92894c942e56c3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172503.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1.1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172515.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172515.dart deleted file mode 100644 index cffa27d1feb97e4601a69421c03d250cd145b4c8..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172515.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172557.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172557.dart deleted file mode 100644 index d0f4e289a244069edbb8deba100f94bc6ec4390d..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172557.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - // @override - // Widget build(BuildContext context) { - // ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - // return Scaffold( - // appBar: AppBar( - // title: Text(''), - // centerTitle: true, - // leading: IconButton( - // onPressed: () { - // FlutterBoost.singleton.openPage('url', {}); - // }, - // icon: Icon( - // Icons.keyboard_arrow_left, - // ), - // ), - // actions: <Widget>[ - // GestureDetector( - // child: Container( - // margin: EdgeInsets.only(right: 30), - // child: Center( - // child: Text( - // '冿µ‹ä¸€æ¬¡', - // style: TextStyle( - // color: ALColors.Color323232, - // fontSize: 14, - // fontWeight: FontWeight.bold - // ), - // ) - // ) - // ), - // onTap: () { - // FlutterBoost.singleton.openPage('url', {}); - // }, - // ) - // ], - // ), - // body: StreamBuilder<ActivityReportEntity>( - // stream: _model.activityReportLive.stream, - // initialData: _model.activityReportLive.data, - // builder: (context, data) { - // if (data.data == null) { - // return loadingItem(); - // } - // if (data.data.error != 0 || data.data.data == null) { - // return errorItem(data.data.message); - // } - // return Container( - // padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - // child: SingleChildScrollView( - // child: Column( - // children: <Widget>[ - // TopCard(share: data.data.data.report.share), - // // SizedBox(height: ScreenUtil().setHeight(41)), - // // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // // PictorialCard(pictorialList: data.data.data.report.cards), - // // SizedBox(height: ScreenUtil().setHeight(38)) - // ], - // ), - // ), - // ); - // }, - // ) - // ); - // } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172608.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172608.dart deleted file mode 100644 index cffa27d1feb97e4601a69421c03d250cd145b4c8..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172608.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172621.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172621.dart deleted file mode 100644 index 26b07200f8d80d59bc61dc0dfc171ee5d0fe9774..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172621.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - // body: StreamBuilder<ActivityReportEntity>( - // stream: _model.activityReportLive.stream, - // initialData: _model.activityReportLive.data, - // builder: (context, data) { - // if (data.data == null) { - // return loadingItem(); - // } - // if (data.data.error != 0 || data.data.data == null) { - // return errorItem(data.data.message); - // } - // return Container( - // padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - // child: SingleChildScrollView( - // child: Column( - // children: <Widget>[ - // TopCard(share: data.data.data.report.share), - // // SizedBox(height: ScreenUtil().setHeight(41)), - // // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // // PictorialCard(pictorialList: data.data.data.report.cards), - // // SizedBox(height: ScreenUtil().setHeight(38)) - // ], - // ), - // ), - // ); - // }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172628.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172628.dart deleted file mode 100644 index d5358b611381c2f82a456c4eae28b31ab7d48196..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924172628.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - // body: StreamBuilder<ActivityReportEntity>( - // stream: _model.activityReportLive.stream, - // initialData: _model.activityReportLive.data, - // builder: (context, data) { - // if (data.data == null) { - // return loadingItem(); - // } - // if (data.data.error != 0 || data.data.data == null) { - // return errorItem(data.data.message); - // } - // return Container( - // padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - // child: SingleChildScrollView( - // child: Column( - // children: <Widget>[ - // TopCard(share: data.data.data.report.share), - // // SizedBox(height: ScreenUtil().setHeight(41)), - // // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // // PictorialCard(pictorialList: data.data.data.report.cards), - // // SizedBox(height: ScreenUtil().setHeight(38)) - // ], - // ), - // ), - // ); - // }, - // ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173210.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173210.dart deleted file mode 100644 index cffa27d1feb97e4601a69421c03d250cd145b4c8..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173210.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: 1, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173234.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173234.dart deleted file mode 100644 index 8d2517fc3e1fb71e100dde24ae250e58418b716b..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173234.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: , delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173240.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173240.dart deleted file mode 100644 index 1e0f9b10a6ba7b34b46e69d364e810e3e62c4464..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173240.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173242.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173242.dart deleted file mode 100644 index c4acaefb73e52c56a5f663d02e301da2ef9226ef..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173242.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share., delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173254.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173254.dart deleted file mode 100644 index b4b3284ee8e30f3c11560e51c1903436d37add53..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173254.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173313.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173313.dart deleted file mode 100644 index 8b9540570762d608701a06e733f6818cdb5e499a..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173313.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: , delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173316.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173316.dart deleted file mode 100644 index 9b02b7664c3a9cad6cafe546bf42dac55a79b483..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173316.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share., delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173323.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173323.dart deleted file mode 100644 index a9db04df3ee3eb622d08c2afe5085803ce9f571f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173323.dart +++ /dev/null @@ -1,615 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - beat = json['beat']; - child: AnimationNumber(targetNmber: share., delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173325.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173325.dart deleted file mode 100644 index 9b02b7664c3a9cad6cafe546bf42dac55a79b483..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173325.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share., delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173330.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173330.dart deleted file mode 100644 index eaaf031b9bd0861522855422bd8bcc9e82277568..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173330.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: 1, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173345.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173345.dart deleted file mode 100644 index e28675639ba6a2324f27a5434876024e6a47a702..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173345.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share., delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173346.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173346.dart deleted file mode 100644 index cb8dd33be0c6d7ef38aeaeaaf3841938612c4e0a..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173346.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: 1, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173411.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173411.dart deleted file mode 100644 index 3270a008911ac79139dd82e61d82ece79678defa..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173411.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share., delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173418.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173418.dart deleted file mode 100644 index 6affcc9f1181b8f9bc136e6f6c9f26c7e2a3087f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173418.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173424.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173424.dart deleted file mode 100644 index 6affcc9f1181b8f9bc136e6f6c9f26c7e2a3087f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173424.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173447.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173447.dart deleted file mode 100644 index 976c319a6ecaec67e06ae713386c254699f2e834..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173447.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.to, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173452.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173452.dart deleted file mode 100644 index f4beb854804de62a7ec9beeb119e8eaf880f8275..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173452.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble, delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173455.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173455.dart deleted file mode 100644 index 13d71f5c87339c70042430798ead3596b8411ea8..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173455.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank, delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173505.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173505.dart deleted file mode 100644 index a6a6bd290f5676c34954c5e552603ca953099d3f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173505.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - // SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173534.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173534.dart deleted file mode 100644 index aef0fa549fea7313c333c9c3c698d6336d0ead53..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173534.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - // SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173546.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173546.dart deleted file mode 100644 index c4fb4c2eb81fe8e19ed8cf48bb73415989317dde..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173546.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173548.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173548.dart deleted file mode 100644 index 055146b07844f27ecf82f65c73531304d5a484c6..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173548.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173551.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173551.dart deleted file mode 100644 index c4fb4c2eb81fe8e19ed8cf48bb73415989317dde..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173551.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // // AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173553.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173553.dart deleted file mode 100644 index fd19b6b74d1901aade3b4cdddd6bb3cda369dd83..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173553.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - AnimatedListSample(pictorialList: data.data.data.report.cards), - // PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173554.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173554.dart deleted file mode 100644 index 7bd6a4a46552d007538af4e48e7cb3ee0ab5669e..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173554.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173608.dart b/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173608.dart deleted file mode 100644 index 174c799cd59a9014e7391f715d3c5c91c4921ae3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/page/ActivityReportPage_20190924173608.dart +++ /dev/null @@ -1,614 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart' as IMAGE; -import 'package:flutter_boost/flutter_boost.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/AnimationList.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; -import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; - -final _goldenColor = Color(0xFFB59C64); - -class ActivityReportPage extends StatefulWidget { - ActivityReportModel _model; - - ActivityReportPage(String cookie, int id, int type) { - _model = new ActivityReportModel(cookie, id, type); - } - - @override - State<StatefulWidget> createState() => ActivityReportState(_model); -} - -class ActivityReportState extends State<ActivityReportPage> { - ActivityReportModel _model; - - - ActivityReportState(this._model); - - @override - void initState() { - super.initState(); - _model.init(context); - } - - @override - Widget build(BuildContext context) { - ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); - return Scaffold( - appBar: AppBar( - title: Text(''), - centerTitle: true, - leading: IconButton( - onPressed: () { - FlutterBoost.singleton.openPage('url', {}); - }, - icon: Icon( - Icons.keyboard_arrow_left, - ), - ), - actions: <Widget>[ - GestureDetector( - child: Container( - margin: EdgeInsets.only(right: 30), - child: Center( - child: Text( - '冿µ‹ä¸€æ¬¡', - style: TextStyle( - color: ALColors.Color323232, - fontSize: 14, - fontWeight: FontWeight.bold - ), - ) - ) - ), - onTap: () { - FlutterBoost.singleton.openPage('url', {}); - }, - ) - ], - ), - body: StreamBuilder<ActivityReportEntity>( - stream: _model.activityReportLive.stream, - initialData: _model.activityReportLive.data, - builder: (context, data) { - if (data.data == null) { - return loadingItem(); - } - if (data.data.error != 0 || data.data.data == null) { - return errorItem(data.data.message); - } - return Container( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(16), right: ScreenUtil().setWidth(16)), - child: SingleChildScrollView( - child: Column( - children: <Widget>[ - TopCard(share: data.data.data.report.share), - SizedBox(height: ScreenUtil().setHeight(41)), - // AnimatedListSample(pictorialList: data.data.data.report.cards), - PictorialCard(pictorialList: data.data.data.report.cards), - SizedBox(height: ScreenUtil().setHeight(38)) - ], - ), - ), - ); - }, - ) - ); - } - - Widget errorItem(String reason) { - return Center( - child: Text("$reason"), - ); - } - - Widget loadingItem() { - return Center( - child: CircularProgressIndicator() - ); - } - - @override - void dispose() { - super.dispose(); - _model.dispose(); - } -} - -class TopCard extends StatelessWidget { - final share; - TopCard({Key key, this.share}) : super(key: key); - - _moneyContainer(val) { - return Container( - child: Column( - children: <Widget>[ - Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xffeeeeee), width: 1.0)) - ), - margin: EdgeInsets.only(left: 18, right: 18), - height: 62, - child: Row( - children: <Widget>[ - Text( - 'Â¥', - style: TextStyle( - fontSize: 28, - color: _goldenColor, - fontWeight: FontWeight.bold - ) - ), - SizedBox(width: 8), - Text( - '$val', - style: TextStyle( - color: _goldenColor, - fontSize: 45, - fontWeight: FontWeight.bold - ) - ), - ] - ), - ) - ], - ) - ); - } - - _percentageContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '$val%', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - '的全国åŒé¾„人', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ) - ); - } - - _rankingContainer(val) { - return Container( - child: Row( - children: <Widget>[ - Text( - '第', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ), - SizedBox(width: 4), - Text( - '$val', - style: TextStyle( - fontSize: 24, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 34/24 - ), - ), - SizedBox(width: 4), - Text( - 'å', - style: TextStyle( - fontSize: 11, - color: _goldenColor, - fontWeight: FontWeight.bold, - height: 2 - ), - ) - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - child: Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(277), - decoration: BoxDecoration( - border: Border.all(color: ALColors.Color323232, width: ScreenUtil().setWidth(2)) - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - SizedBox( - height: ScreenUtil().setHeight(8.5), - child: Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(.5)), - color: ALColors.Color323232, - ), - ), - Padding( - padding: EdgeInsets.only(left: ScreenUtil().setWidth(18), top: ScreenUtil().setHeight(20)), - child: Text( - 'ä½ ä¸€å¹´çš„é¢œå€¼æ°ªé‡‘çº¦ä¸ºï¼š', - textAlign: TextAlign.left, - style: TextStyle( - color: ALColors.Color323232, - fontSize: ScreenUtil().setSp(12), - fontWeight: FontWeight.bold, - letterSpacing: 1.5, - ), - ) - ), - AnimationNumber(targetNmber: share.totalCost, delay: 400, container: _moneyContainer), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setWidth(18), - top: ScreenUtil().setHeight(14) - ), - child: AnimationCharacter(targetNmber: share.beat, delay: 1000) - ), - Container( - padding: EdgeInsets.only( - left: ScreenUtil().setWidth(18), - right: ScreenUtil().setHeight(18), - top: ScreenUtil().setHeight(16) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: <Widget>[ - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(left: ScreenUtil().setWidth(8), top: ScreenUtil().setHeight(4)), - child: Text( - 'ä½ çš„æ°ªé‡‘é‡è¶…过了', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: ALColors.Color8E8E8E, - fontWeight: FontWeight.bold - ) - ), - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(8), - bottom: 0, - child: AnimationNumber(targetNmber: share.beat.toDouble(), delay: 1000, container: _percentageContainer) - ) - ], - ) - ], - ), - ), - Container( - color: Color(0xFFF6F6F6), - width: ScreenUtil().setWidth(139), - height: ScreenUtil().setHeight(55), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Container( - margin: EdgeInsets.only(top: ScreenUtil().setHeight(4), left: ScreenUtil().setWidth(14)), - child: Text( - 'ä½ çš„æ°ªé‡‘æŽ’å为全国', - style: TextStyle( - fontSize: ScreenUtil().setSp(11), - color: Color(0xFF8E8E8E), - fontWeight: FontWeight.bold - ) - ) - ), - Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(32), - ), - Positioned( - right: ScreenUtil().setWidth(11), - bottom: 0, - child: AnimationNumber(targetNmber: share.rank.toDouble(), delay: 1000, container: _rankingContainer), - ) - ], - ) - ], - ), - ) - ], - ) - ) - ], - ), - ) - ); - } -} - -class PictorialCard extends StatelessWidget { - final List<Cards> pictorialList; - - PictorialCard({Key key, this.pictorialList}) : super(key: key); - - Widget _gridViewItemUI(BuildContext context, item) { - return Container( - padding: EdgeInsets.all(3), - child: CachedNetworkImage( - imageUrl: item.image + '-w', - width: ScreenUtil().setWidth(110), - height: ScreenUtil().setHeight(110) - ) - ); - } - - Widget _listViewUI(BuildContext context, item) { - List<Widget> list = []; - item.drafts.forEach((item){ - list.add(_gridViewItemUI(context,item)); - }); - return Container( - child: GestureDetector( - onTap: () { - FlutterBoost.singleton.openPage(item.protocol, {}); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - Padding( - padding: EdgeInsets.only(bottom: 14.0), - child: Wrap( - children: list - ), - ), - Container( - width: ScreenUtil().setWidth(343), - height: ScreenUtil().setHeight(53), - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: <Widget>[ - Stack( - children: <Widget>[ - Container( - padding: EdgeInsets.only(right: 12), - child: Text( - '${item.guide}', - style: TextStyle( - color: Color(0xFF323232), - fontWeight: FontWeight.bold, - fontSize: ScreenUtil().setSp(14) - ), - ), - ), - Positioned( - width: ScreenUtil().setWidth(10), - height: ScreenUtil().setHeight(20), - top: ScreenUtil().setHeight(2), - right: 0, - child: IMAGE.Image.asset('images/right_icon.png', width: ScreenUtil().setWidth(5), height: ScreenUtil().setHeight(10)), - ) - ], - ) - ], - ) - ) - ], - ) - ) - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: pictorialList.map((item) { - return _listViewUI(context, item); - }).toList(), - ); - } -} - -class AnimationNumber extends StatefulWidget { - final targetNmber; - final delay; - final container; - AnimationNumber({Key key, this.targetNmber, this.delay, this.container}) : super(key: key); - - _AnimationNumberState createState() => _AnimationNumberState(); -} - -class _AnimationNumberState extends State<AnimationNumber> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: widget.targetNmber, - vsync: this - ); - - _animationController.addListener((){ - setState(() { - }); - }); - } - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - @override - Widget build(BuildContext context) { - - _timer = Timer(Duration(seconds: 1), (){ - _animationController.forward(); - }); - return widget.container(_animationController.value.toInt()); - } -} - -class AnimationCharacter extends StatefulWidget { - final targetNmber; - final delay; - AnimationCharacter({Key key, this.targetNmber, this.delay}) : super(key: key); - - _AnimationCharacterState createState() => _AnimationCharacterState(); -} - -class _AnimationCharacterState extends State<AnimationCharacter> with TickerProviderStateMixin { - AnimationController _animationController; - var _timer; - List peopleList; - double margin = 0; - - @override - void initState() { - super.initState(); - _animationController = AnimationController( - duration: Duration(milliseconds: widget.delay), - lowerBound: 0, - upperBound: 10, - vsync: this - ); - - peopleList = [ - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0}, - {'url': 'images/light_grey_person.png', 'width': 14.0, 'height': 36.0} - ]; - - final target = widget.targetNmber.ceil() / 10; - _animationController.addListener(() { - var value = _animationController.value; - double percent = value / 10; - double frist = target / 10; - int nowValue; - - setState(() { - peopleList.forEach((item) { - int index = peopleList.indexOf(item); - if(percent < frist) { - double tempPercent = percent / frist; - nowValue = (target * tempPercent).ceil(); - margin= ScreenUtil().setWidth(6 + (29 * nowValue).ceil()); - if(index != nowValue) { - item['url'] = 'images/dark_grey_person.png'; - }else{ - item['url'] = 'images/golden_person.png'; - } - } else { - double tempPercent = (percent - frist) / (1 - frist); - nowValue = (target + (11 - target) * tempPercent).ceil(); - if(index > target && index <= nowValue) { - item['url'] = 'images/black_person.png'; - } - } - }); - }); - }); - } - - @override - void dispose() { - super.dispose(); - _animationController.dispose(); - _timer.dispose(); - } - - Widget _peopleViewUI(BuildContext context, item) { - return IMAGE.Image.asset(item['url'], width: ScreenUtil().setWidth(item['width']), height: ScreenUtil().setHeight(item['height'])); - } - - @override - Widget build(BuildContext context) { - _timer = Timer(Duration(seconds: 1), () { - _animationController.forward(); - }); - return Column( - children: <Widget>[ - _youContainer(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: peopleList.map((item) { - return _peopleViewUI(context, item); - }).toList() - ) - ], - ); - } - - _youContainer() { - return Container( - child: Stack( - children: <Widget>[ - Container( - width: double.maxFinite, - height: ScreenUtil().setHeight(19), - margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(4)), - ), - Positioned( - child: Container( - margin: EdgeInsets.only(left: margin), - width: ScreenUtil().setWidth(32), - height: ScreenUtil().setHeight(19), - child: IMAGE.Image.asset('images/you_icon.png'), - ) - ) - ] - ) - ); - } -} diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924164708.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924164708.dart deleted file mode 100644 index 1f5713f79c69dab859425e8282f97b3dace89465..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924164708.dart +++ /dev/null @@ -1,198 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - String message; - int error; - int errorCode; - Data data; - - ActivityReportEntity({this.message, this.error, this.errorCode, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - message = json['message']; - error = json['error']; - errorCode = json['error_code']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['message'] = this.message; - data['error'] = this.error; - data['error_code'] = this.errorCode; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - int surveyRecordId; - String type; - Report report; - - Data({this.surveyRecordId, this.type, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - type = json['type']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - data['type'] = this.type; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - double total_cost; - double beat; - double rank; - String range; - - Share({this.total_cost, this.beat, this.rank, this.range}); - - Share.fromJson(Map<String, dynamic> json) { - total_cost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - range = json['range']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.total_cost; - data['beat'] = this.beat; - data['rank'] = this.rank; - data['range'] = this.range; - return data; - } -} - -class Cards { - int id; - String name; - String description; - String guide; - String protocol; - List<Drafts> drafts; - - Cards( - {this.id, - this.name, - this.description, - this.guide, - this.protocol, - this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - description = json['description']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['description'] = this.description; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - int id; - Image image; - - Drafts({this.id, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - image = json['image'] != null ? new Image.fromJson(json['image']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - if (this.image != null) { - data['image'] = this.image.toJson(); - } - return data; - } -} - -class Image { - String imageUrl; - String videoUrl; - int width; - int height; - - Image({this.imageUrl, this.videoUrl, this.width, this.height}); - - Image.fromJson(Map<String, dynamic> json) { - imageUrl = json['image_url']; - videoUrl = json['video_url']; - width = json['width']; - height = json['height']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['image_url'] = this.imageUrl; - data['video_url'] = this.videoUrl; - data['width'] = this.width; - data['height'] = this.height; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924170620.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924170620.dart deleted file mode 100644 index 359412a5df07da61451e8188c7939b097022858f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924170620.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172831.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172831.dart deleted file mode 100644 index c583ce02096f2394675987d998e41131b6a04a9a..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172831.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172833.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172833.dart deleted file mode 100644 index d0b086afa3267ed5aa95851901c8071afc378727..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172833.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - prin - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172835.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172835.dart deleted file mode 100644 index d15ea8bd788009d0ab039ca7a44307acbccec9c9..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172835.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print(object) - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172836.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172836.dart deleted file mode 100644 index 517ee660280c4e744333d7eacd7bdf37830c1592..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172836.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('object') - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172837.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172837.dart deleted file mode 100644 index 54e1f7825b8f0ec87dd67d6d02bd00c3ed5408e3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172837.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1') - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172840.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172840.dart deleted file mode 100644 index 7390501290ea1eca566af24ec85546476e06e4ce..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172840.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1#') - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172842.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172842.dart deleted file mode 100644 index c37f0eebd2b998d43e6ba719e181e8c792b6c95b..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172842.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1$') - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172845.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172845.dart deleted file mode 100644 index 54e1f7825b8f0ec87dd67d6d02bd00c3ed5408e3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172845.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1') - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172846.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172846.dart deleted file mode 100644 index 3263576c5801f17f319bbe71768428b5c80cbe9b..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172846.dart +++ /dev/null @@ -1,160 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172848.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172848.dart deleted file mode 100644 index 0c8dceba0b002785c57bbb5a4dac24e36b989007..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172848.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172850.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172850.dart deleted file mode 100644 index a3ba2298ea5c5ce95236a052d059acf95cd79ca3..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172850.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - print('3'); - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172901.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172901.dart deleted file mode 100644 index 7d6037475558aa5857ca22a32cc75964ff8fb05a..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172901.dart +++ /dev/null @@ -1,164 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - - print('3'); - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172902.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172902.dart deleted file mode 100644 index 9f5d036ee1e255c22167ec7c587829b757393323..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172902.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - print('3'); - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172914.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172914.dart deleted file mode 100644 index b9e0951ac587d36e74d7021e38471b753df76d73..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172914.dart +++ /dev/null @@ -1,162 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172917.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172917.dart deleted file mode 100644 index 359412a5df07da61451e8188c7939b097022858f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172917.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172928.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172928.dart deleted file mode 100644 index bafbdb418f5ff0266d12bf0eddba00d639cf9d18..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172928.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost'] - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172932.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172932.dart deleted file mode 100644 index 359412a5df07da61451e8188c7939b097022858f..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172932.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172939.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172939.dart deleted file mode 100644 index bafbdb418f5ff0266d12bf0eddba00d639cf9d18..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172939.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost'] - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172947.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172947.dart deleted file mode 100644 index 4e1d391a75d35d20dd96ac314e69f892c976742d..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172947.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost'] as int; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172951.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172951.dart deleted file mode 100644 index 9f5d036ee1e255c22167ec7c587829b757393323..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172951.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - print('3'); - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172952.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172952.dart deleted file mode 100644 index b9e0951ac587d36e74d7021e38471b753df76d73..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172952.dart +++ /dev/null @@ -1,162 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172954.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172954.dart deleted file mode 100644 index 9f5d036ee1e255c22167ec7c587829b757393323..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172954.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost']; - print('3'); - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172958.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172958.dart deleted file mode 100644 index 445a72bda4712c411fd182299a4c2fe4592e5515..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924172958.dart +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - int totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - print('1'); - print('1'); - print('1'); - totalCost = json['total_cost'] as int; - print('3'); - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924173149.dart b/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924173149.dart deleted file mode 100644 index 0b0117d44cffec4d12a61add7f58552dae925856..0000000000000000000000000000000000000000 --- a/.history/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity_20190924173149.dart +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @author dx - * @date 2019-09-17 - **/ -class ActivityReportEntity { - int error; - String message; - Null extra; - Data data; - - ActivityReportEntity({this.error, this.message, this.extra, this.data}); - - ActivityReportEntity.fromJson(Map<String, dynamic> json) { - error = json['error']; - message = json['message']; - extra = json['extra']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['error'] = this.error; - data['message'] = this.message; - data['extra'] = this.extra; - if (this.data != null) { - data['data'] = this.data.toJson(); - } - return data; - } -} - -class Data { - String surveyRecordId; - Report report; - - Data({this.surveyRecordId, this.report}); - - Data.fromJson(Map<String, dynamic> json) { - surveyRecordId = json['survey_record_id']; - report = - json['report'] != null ? new Report.fromJson(json['report']) : null; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['survey_record_id'] = this.surveyRecordId; - if (this.report != null) { - data['report'] = this.report.toJson(); - } - return data; - } -} - -class Report { - Share share; - List<Cards> cards; - - Report({this.share, this.cards}); - - Report.fromJson(Map<String, dynamic> json) { - share = json['share'] != null ? new Share.fromJson(json['share']) : null; - if (json['cards'] != null) { - cards = new List<Cards>(); - json['cards'].forEach((v) { - cards.add(new Cards.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - if (this.share != null) { - data['share'] = this.share.toJson(); - } - if (this.cards != null) { - data['cards'] = this.cards.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Share { - double totalCost; - int beat; - int rank; - - Share({this.totalCost, this.beat, this.rank}); - - Share.fromJson(Map<String, dynamic> json) { - totalCost = json['total_cost']; - beat = json['beat']; - rank = json['rank']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['total_cost'] = this.totalCost; - data['beat'] = this.beat; - data['rank'] = this.rank; - return data; - } -} - -class Cards { - int id; - String name; - String guide; - String protocol; - List<Drafts> drafts; - - Cards({this.id, this.name, this.guide, this.protocol, this.drafts}); - - Cards.fromJson(Map<String, dynamic> json) { - id = json['id']; - name = json['name']; - guide = json['guide']; - protocol = json['protocol']; - if (json['drafts'] != null) { - drafts = new List<Drafts>(); - json['drafts'].forEach((v) { - drafts.add(new Drafts.fromJson(v)); - }); - } - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['name'] = this.name; - data['guide'] = this.guide; - data['protocol'] = this.protocol; - if (this.drafts != null) { - data['drafts'] = this.drafts.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class Drafts { - Null id; - String content; - String image; - - Drafts({this.id, this.content, this.image}); - - Drafts.fromJson(Map<String, dynamic> json) { - id = json['id']; - content = json['content']; - image = json['image']; - } - - Map<String, dynamic> toJson() { - final Map<String, dynamic> data = new Map<String, dynamic>(); - data['id'] = this.id; - data['content'] = this.content; - data['image'] = this.image; - return data; - } -} \ No newline at end of file diff --git a/.history/lib/commonModel/net/DioUtil_20190924164939.dart b/.history/lib/commonModel/net/DioUtil_20190924164939.dart deleted file mode 100644 index 70eeb21864b9e407dbf0599941e1a347ebe8f317..0000000000000000000000000000000000000000 --- a/.history/lib/commonModel/net/DioUtil_20190924164939.dart +++ /dev/null @@ -1,512 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:gmalpha_flutter/commonModel/net/Api.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -const bool inProduction = const bool.fromEnvironment("dart.vm.product"); - -/// <BaseResp<T> 返回 status code msg data. -class BaseResp<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - - BaseResp( - this.status, this.code, this.msg, this.data, this.extra, this.userType); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - } -} - -/// <BaseRespR<T> 返回 status code msg data Response. -class BaseRespR<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - Response response; - - BaseRespR(this.status, this.code, this.msg, this.data, this.extra, - this.userType, this.response); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - ; - } -} - -/// 请求方法. -class Method { - static final String get = "GET"; - static final String post = "POST"; - static final String put = "PUT"; - static final String head = "HEAD"; - static final String delete = "DELETE"; - static final String patch = "PATCH"; -} - -///Httpé…ç½®. -class HttpConfig { - /// constructor. - HttpConfig({ - this.status, - this.code, - this.msg, - this.data, - this.options, - this.pem, - this.pKCSPath, - this.pKCSPwd, - this.nativeCookie, - }); - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String status; - - /// BaseResp [int code]å—æ®µ key, 默认:errorCode. - String code; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String msg; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String data; - - /// Options. - BaseOptions options; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PEMè¯ä¹¦å†…容. - String pem; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦è·¯å¾„. - String pKCSPath; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦å¯†ç . - String pKCSPwd; - - //ç¼“å˜ - Map nativeCookie; -} - -/// å•例 DioUtil. -/// debug模å¼ä¸‹å¯ä»¥æ‰“å°è¯·æ±‚日志. DioUtil.openDebug(). -/// dio详细使用请查看dio官网(https://github.com/flutterchina/dio). -class DioUtil { - static final DioUtil _instance = DioUtil._init(); - static Dio _dio; - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String _statusKey = "status"; - - /// BaseResp [int code]å—æ®µ key, 默认:error = 0 代表æˆåŠŸ. - String _codeKey = "error"; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String _msgKey = "message"; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String _dataKey = "data"; - - /// BaseResp [T data]å—æ®µ key, 默认:extra. - String _extraKey = 'extra'; - - // BaseResp [T data]å—æ®µ key, 默认:user_type. - String _userType = 'user_type'; - - /// Options. - static BaseOptions _options = getDefOptions(); - - /// PEMè¯ä¹¦å†…容. - String _pem; - - /// PKCS12 è¯ä¹¦è·¯å¾„. - String _pKCSPath; - - /// PKCS12 è¯ä¹¦å¯†ç . - String _pKCSPwd; - - String _proxy = '172.30.9.117:8888'; - - static Map<String, dynamic> addHeadMap; - - /// æ˜¯å¦æ˜¯debug模å¼. - static bool _isDebug = !inProduction; - - static DioUtil getInstance() { - return _instance; - } - - factory DioUtil() { - return _instance; - } - - static var interceptor = InterceptorsWrapper(onRequest: (opt) { - var headers = opt.headers; - if (addHeadMap != null) { - print("请求之å‰"); - addHeadMap.forEach((k, v) { - headers.putIfAbsent(k, () => v); - print("HEADDD ${k} ${v}"); - }); - } - }, onResponse: (response) { - print("相应之å‰"); - }, onError: (e) { - print("网络错误 $e"); - }); - - DioUtil._init() { - _dio = new Dio(_options); - _dio.interceptors.add(interceptor); - } - - set addHead(Map<String, dynamic> map) { - if (map != null) { - addHeadMap = map; - } - } - - /// set Config. - void setConfig(HttpConfig config) { - _statusKey = config.status ?? _statusKey; - _codeKey = config.code ?? _codeKey; - _msgKey = config.msg ?? _msgKey; - _dataKey = config.data ?? _dataKey; - _mergeOption(config.options); - _mergeNativeCookie(config); - _pem = config.pem ?? _pem; - - if (_dio != null) { -// _dio.options = _options; -// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { -// client.findProxy = (url) { -// return _isDebug ? 'PROXY $_proxy' : 'DIRECT'; -// }; -// }; - if (_pem != null) { - // httpClientAdapter - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - client.badCertificateCallback = - (X509Certificate cert, String host, int port) { - if (cert.pem == _pem) { - // è¯ä¹¦ä¸€è‡´ï¼Œåˆ™æ”¾è¡Œ - return true; - } - return false; - }; - }; - } - if (_pKCSPath != null) { - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - SecurityContext sc = new SecurityContext(); - //file为è¯ä¹¦è·¯å¾„ - sc.setTrustedCertificates(_pKCSPath, password: _pKCSPwd); - HttpClient httpClient = new HttpClient(context: sc); - return httpClient; - }; - } - } - } - - /* - * get请求 - */ - Future<Response> get(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.get(url, - queryParameters: data, options: options, cancelToken: cancelToken); -// print('get success---------${response.statusCode}'); -// print('get success---------${response.data}'); - _printHttpLog(response); -// response.data; å“应体 -// response.headers; å“应头 -// response.request; 请求体 -// response.statusCode; 状æ€ç - } on DioError catch (e) { - print('get error---------$e'); - formatError(e); - } - return response; - } - - /* - * post请求 - */ - Future<Response> post(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.post(url, - queryParameters: data, options: options, cancelToken: cancelToken); - print('post success---------${response.statusCode} ${response.data}'); - } on DioError catch (e) { - print('post error---------$e'); - formatError(e); - } - return response; - } - - /* - * 下载文件 - */ - downloadFile(urlPath, savePath) async { - Response response; - try { - response = await _dio.download(urlPath, savePath, - onReceiveProgress: (int count, int total) { - //进度 - print("$count $total"); - }); - print('downloadFile success---------${response.data}'); - } on DioError catch (e) { - print('downloadFile error---------$e'); - formatError(e); - } - return response.data; - } - - Future<BaseRespR<T>> requestR<T>(String method, String path, - {data, Options options, CancelToken cancelToken}) async { - Response response = await _dio.request(path, - data: data, - options: _checkOptions(method, options), - cancelToken: cancelToken); - _printHttpLog(response); - String _status; - int _code; - String _msg; - T _data; - T _extra; - T _userType; - - _status = response.statusCode.toString(); - if (response.statusCode == HttpStatus.ok || - response.statusCode == HttpStatus.created) { - try { - if (response.data is Map) { - _code = (response.data[_codeKey] is String) - ? int.tryParse(response.data[_codeKey]) - : response.data[_codeKey]; - _msg = response.data[_msgKey]; - _data = response.data[_dataKey]; - } else { - Map<String, dynamic> _dataMap = _decodeData(response); - _code = (_dataMap[_codeKey] is String) - ? int.tryParse(_dataMap[_codeKey]) - : _dataMap[_codeKey]; - _msg = _dataMap[_msgKey]; - _data = _dataMap[_dataKey]; - _extra = response.data[_extraKey]; - _userType = response.data[_userType]; - } - return new BaseRespR( - _status, _code, _msg, _data, _extra, _userType, response); - } catch (e) { - return new Future.error(new DioError( - response: response, - message: "data parsing exception...", - type: DioErrorType.RESPONSE, - )); - } - } else { - _code = 1; - _msg = '请求失败'; - } - return new Future.error(new DioError( - response: response, - message: "statusCode: $response.statusCode, service error", - type: DioErrorType.RESPONSE, - )); - } - - void formatError(DioError e) { - String reason = ""; - if (e.type == DioErrorType.CONNECT_TIMEOUT) { - // It occurs when url is opened timeout. - print("连接超时"); - reason = "连接超时 ${e.message}"; - } else if (e.type == DioErrorType.SEND_TIMEOUT) { - // It occurs when url is sent timeout. - print("请求超时"); - reason = "请求超时 ${e.message}"; - } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { - //It occurs when receiving timeout - print("å“应超时"); - reason = "å“应超时 ${e.message}"; - } else if (e.type == DioErrorType.RESPONSE) { - // When the server response, but with a incorrect status, such as 404, 503... - print("出现异常"); - reason = "出现异常 ${e.message}"; - } else if (e.type == DioErrorType.CANCEL) { - // When the request is cancelled, dio will throw a error with this type. - print("è¯·æ±‚å–æ¶ˆ"); - reason = "è¯·æ±‚å–æ¶ˆ ${e.message}"; - } else { - //DEFAULT Default error type, Some other Error. In this case, you can read the DioError.error if it is not null. - print("未知错误"); - reason = "未知错误 ${e.message}"; - } - throw HttpException(reason); - } - - Future<Response> download( - String urlPath, - savePath, { - CancelToken cancelToken, - data, - Options options, - }) { - return _dio.download(urlPath, savePath, - cancelToken: cancelToken, data: data, options: options); - } - - /// decode response data. - Map<String, dynamic> _decodeData(Response response) { - if (response == null || - response.data == null || - response.data.toString().isEmpty) { - return new Map(); - } - return json.decode(response.data.toString()); - } - - /// check Options. - Options _checkOptions(method, options) { - if (options == null) { - options = new Options(); - } - options.method = method; - return options; - } - - /// merge Option. - void _mergeOption(BaseOptions opt) { - _options.method = opt.method ?? _options.method; - _options.headers = (new Map.from(_options.headers))..addAll(opt.headers); - _options.baseUrl = opt.baseUrl ?? _options.baseUrl; - _options.connectTimeout = opt.connectTimeout ?? _options.connectTimeout; - _options.receiveTimeout = opt.receiveTimeout ?? _options.receiveTimeout; - _options.responseType = opt.responseType ?? _options.responseType; - _options.extra = (new Map.from(_options.extra))..addAll(opt.extra); - _options.contentType = opt.contentType ?? _options.contentType; - _options.validateStatus = opt.validateStatus ?? _options.validateStatus; - _options.followRedirects = opt.followRedirects ?? _options.followRedirects; - } - - void _mergeNativeCookie(HttpConfig config) { - //åˆå¹¶native cookie - Map<String, dynamic> headers = _options.headers; - headers['Cookie'] = config.nativeCookie['Cookie']; - _options.headers = headers; - - print('cookie---------'); - print(_options.headers); - } - - /// print Http Log. - void _printHttpLog(Response response) { - if (!_isDebug) { - return; - } - try { - print("----------------Http Log----------------" + - "\n[statusCode]: " + - response.statusCode.toString() + - "\n[request ]: " + - _getOptionsStr(response.request)); - _printDataStr("reqdata ", response.request.data); - _printDataStr("response", response.data); - } catch (ex) { - print("Http Log" + " error......"); - } - } - - /// get Options Str. - String _getOptionsStr(Options request) { - return "method: " + request.method; - } - - /// print Data Str. - void _printDataStr(String tag, Object value) { - String da = value.toString(); - while (da.isNotEmpty) { - if (da.length > 512) { - print("[$tag ]: " + da.substring(0, 512)); - da = da.substring(512, da.length); - } else { - print("[$tag ]: " + da); - da = ""; - } - } - } - - /// get dio. - Dio getDio() { - return _dio; - } - - /// create new dio. - static Dio createNewDio([Options options]) { - Dio dio = new Dio(); - return dio; - } - - static String getBaseUrl() { -// if (inProduction) { -// //æ£å¼çŽ¯å¢ƒçš„ -// return APP_HOST_RELEASE; -// } else { -// return APP_HOST_DEBUG; -// } - return APP_HOST_DEBUG; - } - - /// get Def Options. - static BaseOptions getDefOptions() { - BaseOptions options = BaseOptions(); - options.connectTimeout = 10 * 1000; - options.receiveTimeout = 20 * 1000; -// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); - options.contentType = ContentType.json; - options.responseType = ResponseType.plain; - // options.baseUrl = 'https://earth.iyanzhi.com/'; -// options.baseUrl = 'http://earth.gmapp.env/'; - options.baseUrl = getBaseUrl() + "/"; - print("BASEURL!! ${getBaseUrl()}"); - Map<String, dynamic> headers = Map<String, dynamic>(); - headers['Accept'] = 'application/json'; - headers['version'] = '1.0.0'; - options.headers = headers; - return options; - } -} diff --git a/.history/lib/commonModel/net/DioUtil_20190924165738.dart b/.history/lib/commonModel/net/DioUtil_20190924165738.dart deleted file mode 100644 index 2c8293d0d36a01e516d3d07ad188d492f375a6c0..0000000000000000000000000000000000000000 --- a/.history/lib/commonModel/net/DioUtil_20190924165738.dart +++ /dev/null @@ -1,512 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:gmalpha_flutter/commonModel/net/Api.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -const bool inProduction = const bool.fromEnvironment("dart.vm.product"); - -/// <BaseResp<T> 返回 status code msg data. -class BaseResp<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - - BaseResp( - this.status, this.code, this.msg, this.data, this.extra, this.userType); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - } -} - -/// <BaseRespR<T> 返回 status code msg data Response. -class BaseRespR<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - Response response; - - BaseRespR(this.status, this.code, this.msg, this.data, this.extra, - this.userType, this.response); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - ; - } -} - -/// 请求方法. -class Method { - static final String get = "GET"; - static final String post = "POST"; - static final String put = "PUT"; - static final String head = "HEAD"; - static final String delete = "DELETE"; - static final String patch = "PATCH"; -} - -///Httpé…ç½®. -class HttpConfig { - /// constructor. - HttpConfig({ - this.status, - this.code, - this.msg, - this.data, - this.options, - this.pem, - this.pKCSPath, - this.pKCSPwd, - this.nativeCookie, - }); - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String status; - - /// BaseResp [int code]å—æ®µ key, 默认:errorCode. - String code; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String msg; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String data; - - /// Options. - BaseOptions options; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PEMè¯ä¹¦å†…容. - String pem; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦è·¯å¾„. - String pKCSPath; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦å¯†ç . - String pKCSPwd; - - //ç¼“å˜ - Map nativeCookie; -} - -/// å•例 DioUtil. -/// debug模å¼ä¸‹å¯ä»¥æ‰“å°è¯·æ±‚日志. DioUtil.openDebug(). -/// dio详细使用请查看dio官网(https://github.com/flutterchina/dio). -class DioUtil { - static final DioUtil _instance = DioUtil._init(); - static Dio _dio; - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String _statusKey = "status"; - - /// BaseResp [int code]å—æ®µ key, 默认:error = 0 代表æˆåŠŸ. - String _codeKey = "error"; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String _msgKey = "message"; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String _dataKey = "data"; - - /// BaseResp [T data]å—æ®µ key, 默认:extra. - String _extraKey = 'extra'; - - // BaseResp [T data]å—æ®µ key, 默认:user_type. - String _userType = 'user_type'; - - /// Options. - static BaseOptions _options = getDefOptions(); - - /// PEMè¯ä¹¦å†…容. - String _pem; - - /// PKCS12 è¯ä¹¦è·¯å¾„. - String _pKCSPath; - - /// PKCS12 è¯ä¹¦å¯†ç . - String _pKCSPwd; - - String _proxy = '172.30.9.117:8888'; - - static Map<String, dynamic> addHeadMap; - - /// æ˜¯å¦æ˜¯debug模å¼. - static bool _isDebug = !inProduction; - - static DioUtil getInstance() { - return _instance; - } - - factory DioUtil() { - return _instance; - } - - static var interceptor = InterceptorsWrapper(onRequest: (opt) { - var headers = opt.headers; - if (addHeadMap != null) { - print("请求之å‰"); - addHeadMap.forEach((k, v) { - headers.putIfAbsent(k, () => v); - print("HEADDD ${k} ${v}"); - }); - } - }, onResponse: (response) { - print("相应之å‰"); - }, onError: (e) { - print("网络错误 $e"); - }); - - DioUtil._init() { - _dio = new Dio(_options); - _dio.interceptors.add(interceptor); - } - - set addHead(Map<String, dynamic> map) { - if (map != null) { - addHeadMap = map; - } - } - - /// set Config. - void setConfig(HttpConfig config) { - _statusKey = config.status ?? _statusKey; - _codeKey = config.code ?? _codeKey; - _msgKey = config.msg ?? _msgKey; - _dataKey = config.data ?? _dataKey; - _mergeOption(config.options); - _mergeNativeCookie(config); - _pem = config.pem ?? _pem; - - if (_dio != null) { -// _dio.options = _options; -// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { -// client.findProxy = (url) { -// return _isDebug ? 'PROXY $_proxy' : 'DIRECT'; -// }; -// }; - if (_pem != null) { - // httpClientAdapter - (_dio.httpClientAdapter as DefaultHttpClientAdapter)R - .onHttpClientCreate = (client) { - client.badCertificateCallback = - (X509Certificate cert, String host, int port) { - if (cert.pem == _pem) { - // è¯ä¹¦ä¸€è‡´ï¼Œåˆ™æ”¾è¡Œ - return true; - } - return false; - }; - }; - } - if (_pKCSPath != null) { - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - SecurityContext sc = new SecurityContext(); - //file为è¯ä¹¦è·¯å¾„ - sc.setTrustedCertificates(_pKCSPath, password: _pKCSPwd); - HttpClient httpClient = new HttpClient(context: sc); - return httpClient; - }; - } - } - } - - /* - * get请求 - */ - Future<Response> get(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.get(url, - queryParameters: data, options: options, cancelToken: cancelToken); -// print('get success---------${response.statusCode}'); -// print('get success---------${response.data}'); - _printHttpLog(response); -// response.data; å“应体 -// response.headers; å“应头 -// response.request; 请求体 -// response.statusCode; 状æ€ç - } on DioError catch (e) { - print('get error---------$e'); - formatError(e); - } - return response; - } - - /* - * post请求 - */ - Future<Response> post(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.post(url, - queryParameters: data, options: options, cancelToken: cancelToken); - print('post success---------${response.statusCode} ${response.data}'); - } on DioError catch (e) { - print('post error---------$e'); - formatError(e); - } - return response; - } - - /* - * 下载文件 - */ - downloadFile(urlPath, savePath) async { - Response response; - try { - response = await _dio.download(urlPath, savePath, - onReceiveProgress: (int count, int total) { - //进度 - print("$count $total"); - }); - print('downloadFile success---------${response.data}'); - } on DioError catch (e) { - print('downloadFile error---------$e'); - formatError(e); - } - return response.data; - } - - Future<BaseRespR<T>> requestR<T>(String method, String path, - {data, Options options, CancelToken cancelToken}) async { - Response response = await _dio.request(path, - data: data, - options: _checkOptions(method, options), - cancelToken: cancelToken); - _printHttpLog(response); - String _status; - int _code; - String _msg; - T _data; - T _extra; - T _userType; - - _status = response.statusCode.toString(); - if (response.statusCode == HttpStatus.ok || - response.statusCode == HttpStatus.created) { - try { - if (response.data is Map) { - _code = (response.data[_codeKey] is String) - ? int.tryParse(response.data[_codeKey]) - : response.data[_codeKey]; - _msg = response.data[_msgKey]; - _data = response.data[_dataKey]; - } else { - Map<String, dynamic> _dataMap = _decodeData(response); - _code = (_dataMap[_codeKey] is String) - ? int.tryParse(_dataMap[_codeKey]) - : _dataMap[_codeKey]; - _msg = _dataMap[_msgKey]; - _data = _dataMap[_dataKey]; - _extra = response.data[_extraKey]; - _userType = response.data[_userType]; - } - return new BaseRespR( - _status, _code, _msg, _data, _extra, _userType, response); - } catch (e) { - return new Future.error(new DioError( - response: response, - message: "data parsing exception...", - type: DioErrorType.RESPONSE, - )); - } - } else { - _code = 1; - _msg = '请求失败'; - } - return new Future.error(new DioError( - response: response, - message: "statusCode: $response.statusCode, service error", - type: DioErrorType.RESPONSE, - )); - } - - void formatError(DioError e) { - String reason = ""; - if (e.type == DioErrorType.CONNECT_TIMEOUT) { - // It occurs when url is opened timeout. - print("连接超时"); - reason = "连接超时 ${e.message}"; - } else if (e.type == DioErrorType.SEND_TIMEOUT) { - // It occurs when url is sent timeout. - print("请求超时"); - reason = "请求超时 ${e.message}"; - } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { - //It occurs when receiving timeout - print("å“应超时"); - reason = "å“应超时 ${e.message}"; - } else if (e.type == DioErrorType.RESPONSE) { - // When the server response, but with a incorrect status, such as 404, 503... - print("出现异常"); - reason = "出现异常 ${e.message}"; - } else if (e.type == DioErrorType.CANCEL) { - // When the request is cancelled, dio will throw a error with this type. - print("è¯·æ±‚å–æ¶ˆ"); - reason = "è¯·æ±‚å–æ¶ˆ ${e.message}"; - } else { - //DEFAULT Default error type, Some other Error. In this case, you can read the DioError.error if it is not null. - print("未知错误"); - reason = "未知错误 ${e.message}"; - } - throw HttpException(reason); - } - - Future<Response> download( - String urlPath, - savePath, { - CancelToken cancelToken, - data, - Options options, - }) { - return _dio.download(urlPath, savePath, - cancelToken: cancelToken, data: data, options: options); - } - - /// decode response data. - Map<String, dynamic> _decodeData(Response response) { - if (response == null || - response.data == null || - response.data.toString().isEmpty) { - return new Map(); - } - return json.decode(response.data.toString()); - } - - /// check Options. - Options _checkOptions(method, options) { - if (options == null) { - options = new Options(); - } - options.method = method; - return options; - } - - /// merge Option. - void _mergeOption(BaseOptions opt) { - _options.method = opt.method ?? _options.method; - _options.headers = (new Map.from(_options.headers))..addAll(opt.headers); - _options.baseUrl = opt.baseUrl ?? _options.baseUrl; - _options.connectTimeout = opt.connectTimeout ?? _options.connectTimeout; - _options.receiveTimeout = opt.receiveTimeout ?? _options.receiveTimeout; - _options.responseType = opt.responseType ?? _options.responseType; - _options.extra = (new Map.from(_options.extra))..addAll(opt.extra); - _options.contentType = opt.contentType ?? _options.contentType; - _options.validateStatus = opt.validateStatus ?? _options.validateStatus; - _options.followRedirects = opt.followRedirects ?? _options.followRedirects; - } - - void _mergeNativeCookie(HttpConfig config) { - //åˆå¹¶native cookie - Map<String, dynamic> headers = _options.headers; - headers['Cookie'] = config.nativeCookie['Cookie']; - _options.headers = headers; - - print('cookie---------'); - print(_options.headers); - } - - /// print Http Log. - void _printHttpLog(Response response) { - if (!_isDebug) { - return; - } - try { - print("----------------Http Log----------------" + - "\n[statusCode]: " + - response.statusCode.toString() + - "\n[request ]: " + - _getOptionsStr(response.request)); - _printDataStr("reqdata ", response.request.data); - _printDataStr("response", response.data); - } catch (ex) { - print("Http Log" + " error......"); - } - } - - /// get Options Str. - String _getOptionsStr(Options request) { - return "method: " + request.method; - } - - /// print Data Str. - void _printDataStr(String tag, Object value) { - String da = value.toString(); - while (da.isNotEmpty) { - if (da.length > 512) { - print("[$tag ]: " + da.substring(0, 512)); - da = da.substring(512, da.length); - } else { - print("[$tag ]: " + da); - da = ""; - } - } - } - - /// get dio. - Dio getDio() { - return _dio; - } - - /// create new dio. - static Dio createNewDio([Options options]) { - Dio dio = new Dio(); - return dio; - } - - static String getBaseUrl() { -// if (inProduction) { -// //æ£å¼çŽ¯å¢ƒçš„ -// return APP_HOST_RELEASE; -// } else { -// return APP_HOST_DEBUG; -// } - return APP_HOST_DEBUG; - } - - /// get Def Options. - static BaseOptions getDefOptions() { - BaseOptions options = BaseOptions(); - options.connectTimeout = 10 * 1000; - options.receiveTimeout = 20 * 1000; -// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); - options.contentType = ContentType.json; - options.responseType = ResponseType.plain; - // options.baseUrl = 'https://earth.iyanzhi.com/'; -// options.baseUrl = 'http://earth.gmapp.env/'; - options.baseUrl = getBaseUrl() + "/"; - print("BASEURL!! ${getBaseUrl()}"); - Map<String, dynamic> headers = Map<String, dynamic>(); - headers['Accept'] = 'application/json'; - headers['version'] = '1.0.0'; - options.headers = headers; - return options; - } -} diff --git a/.history/lib/commonModel/net/DioUtil_20190924165740.dart b/.history/lib/commonModel/net/DioUtil_20190924165740.dart deleted file mode 100644 index 70eeb21864b9e407dbf0599941e1a347ebe8f317..0000000000000000000000000000000000000000 --- a/.history/lib/commonModel/net/DioUtil_20190924165740.dart +++ /dev/null @@ -1,512 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:gmalpha_flutter/commonModel/net/Api.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -const bool inProduction = const bool.fromEnvironment("dart.vm.product"); - -/// <BaseResp<T> 返回 status code msg data. -class BaseResp<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - - BaseResp( - this.status, this.code, this.msg, this.data, this.extra, this.userType); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - } -} - -/// <BaseRespR<T> 返回 status code msg data Response. -class BaseRespR<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - Response response; - - BaseRespR(this.status, this.code, this.msg, this.data, this.extra, - this.userType, this.response); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - ; - } -} - -/// 请求方法. -class Method { - static final String get = "GET"; - static final String post = "POST"; - static final String put = "PUT"; - static final String head = "HEAD"; - static final String delete = "DELETE"; - static final String patch = "PATCH"; -} - -///Httpé…ç½®. -class HttpConfig { - /// constructor. - HttpConfig({ - this.status, - this.code, - this.msg, - this.data, - this.options, - this.pem, - this.pKCSPath, - this.pKCSPwd, - this.nativeCookie, - }); - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String status; - - /// BaseResp [int code]å—æ®µ key, 默认:errorCode. - String code; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String msg; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String data; - - /// Options. - BaseOptions options; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PEMè¯ä¹¦å†…容. - String pem; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦è·¯å¾„. - String pKCSPath; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦å¯†ç . - String pKCSPwd; - - //ç¼“å˜ - Map nativeCookie; -} - -/// å•例 DioUtil. -/// debug模å¼ä¸‹å¯ä»¥æ‰“å°è¯·æ±‚日志. DioUtil.openDebug(). -/// dio详细使用请查看dio官网(https://github.com/flutterchina/dio). -class DioUtil { - static final DioUtil _instance = DioUtil._init(); - static Dio _dio; - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String _statusKey = "status"; - - /// BaseResp [int code]å—æ®µ key, 默认:error = 0 代表æˆåŠŸ. - String _codeKey = "error"; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String _msgKey = "message"; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String _dataKey = "data"; - - /// BaseResp [T data]å—æ®µ key, 默认:extra. - String _extraKey = 'extra'; - - // BaseResp [T data]å—æ®µ key, 默认:user_type. - String _userType = 'user_type'; - - /// Options. - static BaseOptions _options = getDefOptions(); - - /// PEMè¯ä¹¦å†…容. - String _pem; - - /// PKCS12 è¯ä¹¦è·¯å¾„. - String _pKCSPath; - - /// PKCS12 è¯ä¹¦å¯†ç . - String _pKCSPwd; - - String _proxy = '172.30.9.117:8888'; - - static Map<String, dynamic> addHeadMap; - - /// æ˜¯å¦æ˜¯debug模å¼. - static bool _isDebug = !inProduction; - - static DioUtil getInstance() { - return _instance; - } - - factory DioUtil() { - return _instance; - } - - static var interceptor = InterceptorsWrapper(onRequest: (opt) { - var headers = opt.headers; - if (addHeadMap != null) { - print("请求之å‰"); - addHeadMap.forEach((k, v) { - headers.putIfAbsent(k, () => v); - print("HEADDD ${k} ${v}"); - }); - } - }, onResponse: (response) { - print("相应之å‰"); - }, onError: (e) { - print("网络错误 $e"); - }); - - DioUtil._init() { - _dio = new Dio(_options); - _dio.interceptors.add(interceptor); - } - - set addHead(Map<String, dynamic> map) { - if (map != null) { - addHeadMap = map; - } - } - - /// set Config. - void setConfig(HttpConfig config) { - _statusKey = config.status ?? _statusKey; - _codeKey = config.code ?? _codeKey; - _msgKey = config.msg ?? _msgKey; - _dataKey = config.data ?? _dataKey; - _mergeOption(config.options); - _mergeNativeCookie(config); - _pem = config.pem ?? _pem; - - if (_dio != null) { -// _dio.options = _options; -// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { -// client.findProxy = (url) { -// return _isDebug ? 'PROXY $_proxy' : 'DIRECT'; -// }; -// }; - if (_pem != null) { - // httpClientAdapter - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - client.badCertificateCallback = - (X509Certificate cert, String host, int port) { - if (cert.pem == _pem) { - // è¯ä¹¦ä¸€è‡´ï¼Œåˆ™æ”¾è¡Œ - return true; - } - return false; - }; - }; - } - if (_pKCSPath != null) { - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - SecurityContext sc = new SecurityContext(); - //file为è¯ä¹¦è·¯å¾„ - sc.setTrustedCertificates(_pKCSPath, password: _pKCSPwd); - HttpClient httpClient = new HttpClient(context: sc); - return httpClient; - }; - } - } - } - - /* - * get请求 - */ - Future<Response> get(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.get(url, - queryParameters: data, options: options, cancelToken: cancelToken); -// print('get success---------${response.statusCode}'); -// print('get success---------${response.data}'); - _printHttpLog(response); -// response.data; å“应体 -// response.headers; å“应头 -// response.request; 请求体 -// response.statusCode; 状æ€ç - } on DioError catch (e) { - print('get error---------$e'); - formatError(e); - } - return response; - } - - /* - * post请求 - */ - Future<Response> post(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.post(url, - queryParameters: data, options: options, cancelToken: cancelToken); - print('post success---------${response.statusCode} ${response.data}'); - } on DioError catch (e) { - print('post error---------$e'); - formatError(e); - } - return response; - } - - /* - * 下载文件 - */ - downloadFile(urlPath, savePath) async { - Response response; - try { - response = await _dio.download(urlPath, savePath, - onReceiveProgress: (int count, int total) { - //进度 - print("$count $total"); - }); - print('downloadFile success---------${response.data}'); - } on DioError catch (e) { - print('downloadFile error---------$e'); - formatError(e); - } - return response.data; - } - - Future<BaseRespR<T>> requestR<T>(String method, String path, - {data, Options options, CancelToken cancelToken}) async { - Response response = await _dio.request(path, - data: data, - options: _checkOptions(method, options), - cancelToken: cancelToken); - _printHttpLog(response); - String _status; - int _code; - String _msg; - T _data; - T _extra; - T _userType; - - _status = response.statusCode.toString(); - if (response.statusCode == HttpStatus.ok || - response.statusCode == HttpStatus.created) { - try { - if (response.data is Map) { - _code = (response.data[_codeKey] is String) - ? int.tryParse(response.data[_codeKey]) - : response.data[_codeKey]; - _msg = response.data[_msgKey]; - _data = response.data[_dataKey]; - } else { - Map<String, dynamic> _dataMap = _decodeData(response); - _code = (_dataMap[_codeKey] is String) - ? int.tryParse(_dataMap[_codeKey]) - : _dataMap[_codeKey]; - _msg = _dataMap[_msgKey]; - _data = _dataMap[_dataKey]; - _extra = response.data[_extraKey]; - _userType = response.data[_userType]; - } - return new BaseRespR( - _status, _code, _msg, _data, _extra, _userType, response); - } catch (e) { - return new Future.error(new DioError( - response: response, - message: "data parsing exception...", - type: DioErrorType.RESPONSE, - )); - } - } else { - _code = 1; - _msg = '请求失败'; - } - return new Future.error(new DioError( - response: response, - message: "statusCode: $response.statusCode, service error", - type: DioErrorType.RESPONSE, - )); - } - - void formatError(DioError e) { - String reason = ""; - if (e.type == DioErrorType.CONNECT_TIMEOUT) { - // It occurs when url is opened timeout. - print("连接超时"); - reason = "连接超时 ${e.message}"; - } else if (e.type == DioErrorType.SEND_TIMEOUT) { - // It occurs when url is sent timeout. - print("请求超时"); - reason = "请求超时 ${e.message}"; - } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { - //It occurs when receiving timeout - print("å“应超时"); - reason = "å“应超时 ${e.message}"; - } else if (e.type == DioErrorType.RESPONSE) { - // When the server response, but with a incorrect status, such as 404, 503... - print("出现异常"); - reason = "出现异常 ${e.message}"; - } else if (e.type == DioErrorType.CANCEL) { - // When the request is cancelled, dio will throw a error with this type. - print("è¯·æ±‚å–æ¶ˆ"); - reason = "è¯·æ±‚å–æ¶ˆ ${e.message}"; - } else { - //DEFAULT Default error type, Some other Error. In this case, you can read the DioError.error if it is not null. - print("未知错误"); - reason = "未知错误 ${e.message}"; - } - throw HttpException(reason); - } - - Future<Response> download( - String urlPath, - savePath, { - CancelToken cancelToken, - data, - Options options, - }) { - return _dio.download(urlPath, savePath, - cancelToken: cancelToken, data: data, options: options); - } - - /// decode response data. - Map<String, dynamic> _decodeData(Response response) { - if (response == null || - response.data == null || - response.data.toString().isEmpty) { - return new Map(); - } - return json.decode(response.data.toString()); - } - - /// check Options. - Options _checkOptions(method, options) { - if (options == null) { - options = new Options(); - } - options.method = method; - return options; - } - - /// merge Option. - void _mergeOption(BaseOptions opt) { - _options.method = opt.method ?? _options.method; - _options.headers = (new Map.from(_options.headers))..addAll(opt.headers); - _options.baseUrl = opt.baseUrl ?? _options.baseUrl; - _options.connectTimeout = opt.connectTimeout ?? _options.connectTimeout; - _options.receiveTimeout = opt.receiveTimeout ?? _options.receiveTimeout; - _options.responseType = opt.responseType ?? _options.responseType; - _options.extra = (new Map.from(_options.extra))..addAll(opt.extra); - _options.contentType = opt.contentType ?? _options.contentType; - _options.validateStatus = opt.validateStatus ?? _options.validateStatus; - _options.followRedirects = opt.followRedirects ?? _options.followRedirects; - } - - void _mergeNativeCookie(HttpConfig config) { - //åˆå¹¶native cookie - Map<String, dynamic> headers = _options.headers; - headers['Cookie'] = config.nativeCookie['Cookie']; - _options.headers = headers; - - print('cookie---------'); - print(_options.headers); - } - - /// print Http Log. - void _printHttpLog(Response response) { - if (!_isDebug) { - return; - } - try { - print("----------------Http Log----------------" + - "\n[statusCode]: " + - response.statusCode.toString() + - "\n[request ]: " + - _getOptionsStr(response.request)); - _printDataStr("reqdata ", response.request.data); - _printDataStr("response", response.data); - } catch (ex) { - print("Http Log" + " error......"); - } - } - - /// get Options Str. - String _getOptionsStr(Options request) { - return "method: " + request.method; - } - - /// print Data Str. - void _printDataStr(String tag, Object value) { - String da = value.toString(); - while (da.isNotEmpty) { - if (da.length > 512) { - print("[$tag ]: " + da.substring(0, 512)); - da = da.substring(512, da.length); - } else { - print("[$tag ]: " + da); - da = ""; - } - } - } - - /// get dio. - Dio getDio() { - return _dio; - } - - /// create new dio. - static Dio createNewDio([Options options]) { - Dio dio = new Dio(); - return dio; - } - - static String getBaseUrl() { -// if (inProduction) { -// //æ£å¼çŽ¯å¢ƒçš„ -// return APP_HOST_RELEASE; -// } else { -// return APP_HOST_DEBUG; -// } - return APP_HOST_DEBUG; - } - - /// get Def Options. - static BaseOptions getDefOptions() { - BaseOptions options = BaseOptions(); - options.connectTimeout = 10 * 1000; - options.receiveTimeout = 20 * 1000; -// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); - options.contentType = ContentType.json; - options.responseType = ResponseType.plain; - // options.baseUrl = 'https://earth.iyanzhi.com/'; -// options.baseUrl = 'http://earth.gmapp.env/'; - options.baseUrl = getBaseUrl() + "/"; - print("BASEURL!! ${getBaseUrl()}"); - Map<String, dynamic> headers = Map<String, dynamic>(); - headers['Accept'] = 'application/json'; - headers['version'] = '1.0.0'; - options.headers = headers; - return options; - } -} diff --git a/.history/lib/commonModel/net/DioUtil_20190924165832.dart b/.history/lib/commonModel/net/DioUtil_20190924165832.dart deleted file mode 100644 index 75c5c819ec8be2eb795029338376f498fc15aac7..0000000000000000000000000000000000000000 --- a/.history/lib/commonModel/net/DioUtil_20190924165832.dart +++ /dev/null @@ -1,512 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:gmalpha_flutter/commonModel/net/Api.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -const bool inProduction = const bool.fromEnvironment("dart.vm.product"); - -/// <BaseResp<T> 返回 status code msg data. -class BaseResp<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - - BaseResp( - this.status, this.code, this.msg, this.data, this.extra, this.userType); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - } -} - -/// <BaseRespR<T> 返回 status code msg data Response. -class BaseRespR<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - Response response; - - BaseRespR(this.status, this.code, this.msg, this.data, this.extra, - this.userType, this.response); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - ; - } -} - -/// 请求方法. -class Method { - static final String get = "GET"; - static final String post = "POST"; - static final String put = "PUT"; - static final String head = "HEAD"; - static final String delete = "DELETE"; - static final String patch = "PATCH"; -} - -///Httpé…ç½®. -class HttpConfig { - /// constructor. - HttpConfig({ - this.status, - this.code, - this.msg, - this.data, - this.options, - this.pem, - this.pKCSPath, - this.pKCSPwd, - this.nativeCookie, - }); - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String status; - - /// BaseResp [int code]å—æ®µ key, 默认:errorCode. - String code; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String msg; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String data; - - /// Options. - BaseOptions options; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PEMè¯ä¹¦å†…容. - String pem; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦è·¯å¾„. - String pKCSPath; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦å¯†ç . - String pKCSPwd; - - //ç¼“å˜ - Map nativeCookie; -} - -/// å•例 DioUtil. -/// debug模å¼ä¸‹å¯ä»¥æ‰“å°è¯·æ±‚日志. DioUtil.openDebug(). -/// dio详细使用请查看dio官网(https://github.com/flutterchina/dio). -class DioUtil { - static final DioUtil _instance = DioUtil._init(); - static Dio _dio; - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String _statusKey = "status"; - - /// BaseResp [int code]å—æ®µ key, 默认:error = 0 代表æˆåŠŸ. - String _codeKey = "error"; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String _msgKey = "message"; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String _dataKey = "data"; - - /// BaseResp [T data]å—æ®µ key, 默认:extra. - String _extraKey = 'extra'; - - // BaseResp [T data]å—æ®µ key, 默认:user_type. - String _userType = 'user_type'; - - /// Options. - static BaseOptions _options = getDefOptions(); - - /// PEMè¯ä¹¦å†…容. - String _pem; - - /// PKCS12 è¯ä¹¦è·¯å¾„. - String _pKCSPath; - - /// PKCS12 è¯ä¹¦å¯†ç . - String _pKCSPwd; - - String _proxy = '172.30.9.117:8888'; - - static Map<String, dynamic> addHeadMap; - - /// æ˜¯å¦æ˜¯debug模å¼. - static bool _isDebug = !inProduction; - - static DioUtil getInstance() { - return _instance; - } - - factory DioUtil() { - return _instance; - } - - static var interceptor = InterceptorsWrapper(onRequest: (opt) { - var headers = opt.headers; - if (addHeadMap != null) { - print("请求之å‰"); - addHeadMap.forEach((k, v) { - headers.putIfAbsent(k, () => v); - print("HEADDD ${k} ${v}"); - }); - } - }, onResponse: (response) { - print("相应之å‰"); - }, onError: (e) { - print("网络错误 $e"); - }); - - DioUtil._init() { - _dio = new Dio(_options); - _dio.interceptors.add(interceptor); - } - - set addHead(Map<String, dynamic> map) { - if (map != null) { - addHeadMap = map; - } - } - - /// set Config. - void setConfig(HttpConfig config) { - _statusKey = config.status ?? _statusKey; - _codeKey = config.code ?? _codeKey; - _msgKey = config.msg ?? _msgKey; - _dataKey = config.data ?? _dataKey; - _mergeOption(config.options); - // _mergeNativeCookie(config); - _pem = config.pem ?? _pem; - - if (_dio != null) { -// _dio.options = _options; -// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { -// client.findProxy = (url) { -// return _isDebug ? 'PROXY $_proxy' : 'DIRECT'; -// }; -// }; - if (_pem != null) { - // httpClientAdapter - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - client.badCertificateCallback = - (X509Certificate cert, String host, int port) { - if (cert.pem == _pem) { - // è¯ä¹¦ä¸€è‡´ï¼Œåˆ™æ”¾è¡Œ - return true; - } - return false; - }; - }; - } - if (_pKCSPath != null) { - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - SecurityContext sc = new SecurityContext(); - //file为è¯ä¹¦è·¯å¾„ - sc.setTrustedCertificates(_pKCSPath, password: _pKCSPwd); - HttpClient httpClient = new HttpClient(context: sc); - return httpClient; - }; - } - } - } - - /* - * get请求 - */ - Future<Response> get(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.get(url, - queryParameters: data, options: options, cancelToken: cancelToken); -// print('get success---------${response.statusCode}'); -// print('get success---------${response.data}'); - _printHttpLog(response); -// response.data; å“应体 -// response.headers; å“应头 -// response.request; 请求体 -// response.statusCode; 状æ€ç - } on DioError catch (e) { - print('get error---------$e'); - formatError(e); - } - return response; - } - - /* - * post请求 - */ - Future<Response> post(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.post(url, - queryParameters: data, options: options, cancelToken: cancelToken); - print('post success---------${response.statusCode} ${response.data}'); - } on DioError catch (e) { - print('post error---------$e'); - formatError(e); - } - return response; - } - - /* - * 下载文件 - */ - downloadFile(urlPath, savePath) async { - Response response; - try { - response = await _dio.download(urlPath, savePath, - onReceiveProgress: (int count, int total) { - //进度 - print("$count $total"); - }); - print('downloadFile success---------${response.data}'); - } on DioError catch (e) { - print('downloadFile error---------$e'); - formatError(e); - } - return response.data; - } - - Future<BaseRespR<T>> requestR<T>(String method, String path, - {data, Options options, CancelToken cancelToken}) async { - Response response = await _dio.request(path, - data: data, - options: _checkOptions(method, options), - cancelToken: cancelToken); - _printHttpLog(response); - String _status; - int _code; - String _msg; - T _data; - T _extra; - T _userType; - - _status = response.statusCode.toString(); - if (response.statusCode == HttpStatus.ok || - response.statusCode == HttpStatus.created) { - try { - if (response.data is Map) { - _code = (response.data[_codeKey] is String) - ? int.tryParse(response.data[_codeKey]) - : response.data[_codeKey]; - _msg = response.data[_msgKey]; - _data = response.data[_dataKey]; - } else { - Map<String, dynamic> _dataMap = _decodeData(response); - _code = (_dataMap[_codeKey] is String) - ? int.tryParse(_dataMap[_codeKey]) - : _dataMap[_codeKey]; - _msg = _dataMap[_msgKey]; - _data = _dataMap[_dataKey]; - _extra = response.data[_extraKey]; - _userType = response.data[_userType]; - } - return new BaseRespR( - _status, _code, _msg, _data, _extra, _userType, response); - } catch (e) { - return new Future.error(new DioError( - response: response, - message: "data parsing exception...", - type: DioErrorType.RESPONSE, - )); - } - } else { - _code = 1; - _msg = '请求失败'; - } - return new Future.error(new DioError( - response: response, - message: "statusCode: $response.statusCode, service error", - type: DioErrorType.RESPONSE, - )); - } - - void formatError(DioError e) { - String reason = ""; - if (e.type == DioErrorType.CONNECT_TIMEOUT) { - // It occurs when url is opened timeout. - print("连接超时"); - reason = "连接超时 ${e.message}"; - } else if (e.type == DioErrorType.SEND_TIMEOUT) { - // It occurs when url is sent timeout. - print("请求超时"); - reason = "请求超时 ${e.message}"; - } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { - //It occurs when receiving timeout - print("å“应超时"); - reason = "å“应超时 ${e.message}"; - } else if (e.type == DioErrorType.RESPONSE) { - // When the server response, but with a incorrect status, such as 404, 503... - print("出现异常"); - reason = "出现异常 ${e.message}"; - } else if (e.type == DioErrorType.CANCEL) { - // When the request is cancelled, dio will throw a error with this type. - print("è¯·æ±‚å–æ¶ˆ"); - reason = "è¯·æ±‚å–æ¶ˆ ${e.message}"; - } else { - //DEFAULT Default error type, Some other Error. In this case, you can read the DioError.error if it is not null. - print("未知错误"); - reason = "未知错误 ${e.message}"; - } - throw HttpException(reason); - } - - Future<Response> download( - String urlPath, - savePath, { - CancelToken cancelToken, - data, - Options options, - }) { - return _dio.download(urlPath, savePath, - cancelToken: cancelToken, data: data, options: options); - } - - /// decode response data. - Map<String, dynamic> _decodeData(Response response) { - if (response == null || - response.data == null || - response.data.toString().isEmpty) { - return new Map(); - } - return json.decode(response.data.toString()); - } - - /// check Options. - Options _checkOptions(method, options) { - if (options == null) { - options = new Options(); - } - options.method = method; - return options; - } - - /// merge Option. - void _mergeOption(BaseOptions opt) { - _options.method = opt.method ?? _options.method; - _options.headers = (new Map.from(_options.headers))..addAll(opt.headers); - _options.baseUrl = opt.baseUrl ?? _options.baseUrl; - _options.connectTimeout = opt.connectTimeout ?? _options.connectTimeout; - _options.receiveTimeout = opt.receiveTimeout ?? _options.receiveTimeout; - _options.responseType = opt.responseType ?? _options.responseType; - _options.extra = (new Map.from(_options.extra))..addAll(opt.extra); - _options.contentType = opt.contentType ?? _options.contentType; - _options.validateStatus = opt.validateStatus ?? _options.validateStatus; - _options.followRedirects = opt.followRedirects ?? _options.followRedirects; - } - - void _mergeNativeCookie(HttpConfig config) { - //åˆå¹¶native cookie - Map<String, dynamic> headers = _options.headers; - headers['Cookie'] = config.nativeCookie['Cookie']; - _options.headers = headers; - - print('cookie---------'); - print(_options.headers); - } - - /// print Http Log. - void _printHttpLog(Response response) { - if (!_isDebug) { - return; - } - try { - print("----------------Http Log----------------" + - "\n[statusCode]: " + - response.statusCode.toString() + - "\n[request ]: " + - _getOptionsStr(response.request)); - _printDataStr("reqdata ", response.request.data); - _printDataStr("response", response.data); - } catch (ex) { - print("Http Log" + " error......"); - } - } - - /// get Options Str. - String _getOptionsStr(Options request) { - return "method: " + request.method; - } - - /// print Data Str. - void _printDataStr(String tag, Object value) { - String da = value.toString(); - while (da.isNotEmpty) { - if (da.length > 512) { - print("[$tag ]: " + da.substring(0, 512)); - da = da.substring(512, da.length); - } else { - print("[$tag ]: " + da); - da = ""; - } - } - } - - /// get dio. - Dio getDio() { - return _dio; - } - - /// create new dio. - static Dio createNewDio([Options options]) { - Dio dio = new Dio(); - return dio; - } - - static String getBaseUrl() { -// if (inProduction) { -// //æ£å¼çŽ¯å¢ƒçš„ -// return APP_HOST_RELEASE; -// } else { -// return APP_HOST_DEBUG; -// } - return APP_HOST_DEBUG; - } - - /// get Def Options. - static BaseOptions getDefOptions() { - BaseOptions options = BaseOptions(); - options.connectTimeout = 10 * 1000; - options.receiveTimeout = 20 * 1000; -// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); - options.contentType = ContentType.json; - options.responseType = ResponseType.plain; - // options.baseUrl = 'https://earth.iyanzhi.com/'; -// options.baseUrl = 'http://earth.gmapp.env/'; - options.baseUrl = getBaseUrl() + "/"; - print("BASEURL!! ${getBaseUrl()}"); - Map<String, dynamic> headers = Map<String, dynamic>(); - headers['Accept'] = 'application/json'; - headers['version'] = '1.0.0'; - options.headers = headers; - return options; - } -} diff --git a/.history/lib/commonModel/net/DioUtil_20190924173855.dart b/.history/lib/commonModel/net/DioUtil_20190924173855.dart deleted file mode 100644 index 70eeb21864b9e407dbf0599941e1a347ebe8f317..0000000000000000000000000000000000000000 --- a/.history/lib/commonModel/net/DioUtil_20190924173855.dart +++ /dev/null @@ -1,512 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:gmalpha_flutter/commonModel/net/Api.dart'; -import 'package:gmalpha_flutter/commonModel/toast/toast.dart'; - -const bool inProduction = const bool.fromEnvironment("dart.vm.product"); - -/// <BaseResp<T> 返回 status code msg data. -class BaseResp<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - - BaseResp( - this.status, this.code, this.msg, this.data, this.extra, this.userType); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - } -} - -/// <BaseRespR<T> 返回 status code msg data Response. -class BaseRespR<T> { - String status; - int code; - String msg; - T data; - T extra; - T userType; - Response response; - - BaseRespR(this.status, this.code, this.msg, this.data, this.extra, - this.userType, this.response); - - @override - String toString() { - StringBuffer sb = new StringBuffer('{'); - sb.write("\"status\":\"$status\""); - sb.write(",\"code\":$code"); - sb.write(",\"msg\":\"$msg\""); - sb.write(",\"data\":\"$data\""); - sb.write(",\"extra\":\"$extra\""); - sb.write(",\"userType\":\"$userType\""); - sb.write('}'); - return sb.toString(); - ; - } -} - -/// 请求方法. -class Method { - static final String get = "GET"; - static final String post = "POST"; - static final String put = "PUT"; - static final String head = "HEAD"; - static final String delete = "DELETE"; - static final String patch = "PATCH"; -} - -///Httpé…ç½®. -class HttpConfig { - /// constructor. - HttpConfig({ - this.status, - this.code, - this.msg, - this.data, - this.options, - this.pem, - this.pKCSPath, - this.pKCSPwd, - this.nativeCookie, - }); - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String status; - - /// BaseResp [int code]å—æ®µ key, 默认:errorCode. - String code; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String msg; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String data; - - /// Options. - BaseOptions options; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PEMè¯ä¹¦å†…容. - String pem; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦è·¯å¾„. - String pKCSPath; - - /// 详细使用请查看dio官网 https://github.com/flutterchina/dio/blob/flutter/README-ZH.md#Httpsè¯ä¹¦æ ¡éªŒ. - /// PKCS12 è¯ä¹¦å¯†ç . - String pKCSPwd; - - //ç¼“å˜ - Map nativeCookie; -} - -/// å•例 DioUtil. -/// debug模å¼ä¸‹å¯ä»¥æ‰“å°è¯·æ±‚日志. DioUtil.openDebug(). -/// dio详细使用请查看dio官网(https://github.com/flutterchina/dio). -class DioUtil { - static final DioUtil _instance = DioUtil._init(); - static Dio _dio; - - /// BaseResp [String status]å—æ®µ key, 默认:status. - String _statusKey = "status"; - - /// BaseResp [int code]å—æ®µ key, 默认:error = 0 代表æˆåŠŸ. - String _codeKey = "error"; - - /// BaseResp [String msg]å—æ®µ key, 默认:errorMsg. - String _msgKey = "message"; - - /// BaseResp [T data]å—æ®µ key, 默认:data. - String _dataKey = "data"; - - /// BaseResp [T data]å—æ®µ key, 默认:extra. - String _extraKey = 'extra'; - - // BaseResp [T data]å—æ®µ key, 默认:user_type. - String _userType = 'user_type'; - - /// Options. - static BaseOptions _options = getDefOptions(); - - /// PEMè¯ä¹¦å†…容. - String _pem; - - /// PKCS12 è¯ä¹¦è·¯å¾„. - String _pKCSPath; - - /// PKCS12 è¯ä¹¦å¯†ç . - String _pKCSPwd; - - String _proxy = '172.30.9.117:8888'; - - static Map<String, dynamic> addHeadMap; - - /// æ˜¯å¦æ˜¯debug模å¼. - static bool _isDebug = !inProduction; - - static DioUtil getInstance() { - return _instance; - } - - factory DioUtil() { - return _instance; - } - - static var interceptor = InterceptorsWrapper(onRequest: (opt) { - var headers = opt.headers; - if (addHeadMap != null) { - print("请求之å‰"); - addHeadMap.forEach((k, v) { - headers.putIfAbsent(k, () => v); - print("HEADDD ${k} ${v}"); - }); - } - }, onResponse: (response) { - print("相应之å‰"); - }, onError: (e) { - print("网络错误 $e"); - }); - - DioUtil._init() { - _dio = new Dio(_options); - _dio.interceptors.add(interceptor); - } - - set addHead(Map<String, dynamic> map) { - if (map != null) { - addHeadMap = map; - } - } - - /// set Config. - void setConfig(HttpConfig config) { - _statusKey = config.status ?? _statusKey; - _codeKey = config.code ?? _codeKey; - _msgKey = config.msg ?? _msgKey; - _dataKey = config.data ?? _dataKey; - _mergeOption(config.options); - _mergeNativeCookie(config); - _pem = config.pem ?? _pem; - - if (_dio != null) { -// _dio.options = _options; -// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { -// client.findProxy = (url) { -// return _isDebug ? 'PROXY $_proxy' : 'DIRECT'; -// }; -// }; - if (_pem != null) { - // httpClientAdapter - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - client.badCertificateCallback = - (X509Certificate cert, String host, int port) { - if (cert.pem == _pem) { - // è¯ä¹¦ä¸€è‡´ï¼Œåˆ™æ”¾è¡Œ - return true; - } - return false; - }; - }; - } - if (_pKCSPath != null) { - (_dio.httpClientAdapter as DefaultHttpClientAdapter) - .onHttpClientCreate = (client) { - SecurityContext sc = new SecurityContext(); - //file为è¯ä¹¦è·¯å¾„ - sc.setTrustedCertificates(_pKCSPath, password: _pKCSPwd); - HttpClient httpClient = new HttpClient(context: sc); - return httpClient; - }; - } - } - } - - /* - * get请求 - */ - Future<Response> get(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.get(url, - queryParameters: data, options: options, cancelToken: cancelToken); -// print('get success---------${response.statusCode}'); -// print('get success---------${response.data}'); - _printHttpLog(response); -// response.data; å“应体 -// response.headers; å“应头 -// response.request; 请求体 -// response.statusCode; 状æ€ç - } on DioError catch (e) { - print('get error---------$e'); - formatError(e); - } - return response; - } - - /* - * post请求 - */ - Future<Response> post(url, {data, options, cancelToken}) async { - Response response; - try { - response = await _dio.post(url, - queryParameters: data, options: options, cancelToken: cancelToken); - print('post success---------${response.statusCode} ${response.data}'); - } on DioError catch (e) { - print('post error---------$e'); - formatError(e); - } - return response; - } - - /* - * 下载文件 - */ - downloadFile(urlPath, savePath) async { - Response response; - try { - response = await _dio.download(urlPath, savePath, - onReceiveProgress: (int count, int total) { - //进度 - print("$count $total"); - }); - print('downloadFile success---------${response.data}'); - } on DioError catch (e) { - print('downloadFile error---------$e'); - formatError(e); - } - return response.data; - } - - Future<BaseRespR<T>> requestR<T>(String method, String path, - {data, Options options, CancelToken cancelToken}) async { - Response response = await _dio.request(path, - data: data, - options: _checkOptions(method, options), - cancelToken: cancelToken); - _printHttpLog(response); - String _status; - int _code; - String _msg; - T _data; - T _extra; - T _userType; - - _status = response.statusCode.toString(); - if (response.statusCode == HttpStatus.ok || - response.statusCode == HttpStatus.created) { - try { - if (response.data is Map) { - _code = (response.data[_codeKey] is String) - ? int.tryParse(response.data[_codeKey]) - : response.data[_codeKey]; - _msg = response.data[_msgKey]; - _data = response.data[_dataKey]; - } else { - Map<String, dynamic> _dataMap = _decodeData(response); - _code = (_dataMap[_codeKey] is String) - ? int.tryParse(_dataMap[_codeKey]) - : _dataMap[_codeKey]; - _msg = _dataMap[_msgKey]; - _data = _dataMap[_dataKey]; - _extra = response.data[_extraKey]; - _userType = response.data[_userType]; - } - return new BaseRespR( - _status, _code, _msg, _data, _extra, _userType, response); - } catch (e) { - return new Future.error(new DioError( - response: response, - message: "data parsing exception...", - type: DioErrorType.RESPONSE, - )); - } - } else { - _code = 1; - _msg = '请求失败'; - } - return new Future.error(new DioError( - response: response, - message: "statusCode: $response.statusCode, service error", - type: DioErrorType.RESPONSE, - )); - } - - void formatError(DioError e) { - String reason = ""; - if (e.type == DioErrorType.CONNECT_TIMEOUT) { - // It occurs when url is opened timeout. - print("连接超时"); - reason = "连接超时 ${e.message}"; - } else if (e.type == DioErrorType.SEND_TIMEOUT) { - // It occurs when url is sent timeout. - print("请求超时"); - reason = "请求超时 ${e.message}"; - } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { - //It occurs when receiving timeout - print("å“应超时"); - reason = "å“应超时 ${e.message}"; - } else if (e.type == DioErrorType.RESPONSE) { - // When the server response, but with a incorrect status, such as 404, 503... - print("出现异常"); - reason = "出现异常 ${e.message}"; - } else if (e.type == DioErrorType.CANCEL) { - // When the request is cancelled, dio will throw a error with this type. - print("è¯·æ±‚å–æ¶ˆ"); - reason = "è¯·æ±‚å–æ¶ˆ ${e.message}"; - } else { - //DEFAULT Default error type, Some other Error. In this case, you can read the DioError.error if it is not null. - print("未知错误"); - reason = "未知错误 ${e.message}"; - } - throw HttpException(reason); - } - - Future<Response> download( - String urlPath, - savePath, { - CancelToken cancelToken, - data, - Options options, - }) { - return _dio.download(urlPath, savePath, - cancelToken: cancelToken, data: data, options: options); - } - - /// decode response data. - Map<String, dynamic> _decodeData(Response response) { - if (response == null || - response.data == null || - response.data.toString().isEmpty) { - return new Map(); - } - return json.decode(response.data.toString()); - } - - /// check Options. - Options _checkOptions(method, options) { - if (options == null) { - options = new Options(); - } - options.method = method; - return options; - } - - /// merge Option. - void _mergeOption(BaseOptions opt) { - _options.method = opt.method ?? _options.method; - _options.headers = (new Map.from(_options.headers))..addAll(opt.headers); - _options.baseUrl = opt.baseUrl ?? _options.baseUrl; - _options.connectTimeout = opt.connectTimeout ?? _options.connectTimeout; - _options.receiveTimeout = opt.receiveTimeout ?? _options.receiveTimeout; - _options.responseType = opt.responseType ?? _options.responseType; - _options.extra = (new Map.from(_options.extra))..addAll(opt.extra); - _options.contentType = opt.contentType ?? _options.contentType; - _options.validateStatus = opt.validateStatus ?? _options.validateStatus; - _options.followRedirects = opt.followRedirects ?? _options.followRedirects; - } - - void _mergeNativeCookie(HttpConfig config) { - //åˆå¹¶native cookie - Map<String, dynamic> headers = _options.headers; - headers['Cookie'] = config.nativeCookie['Cookie']; - _options.headers = headers; - - print('cookie---------'); - print(_options.headers); - } - - /// print Http Log. - void _printHttpLog(Response response) { - if (!_isDebug) { - return; - } - try { - print("----------------Http Log----------------" + - "\n[statusCode]: " + - response.statusCode.toString() + - "\n[request ]: " + - _getOptionsStr(response.request)); - _printDataStr("reqdata ", response.request.data); - _printDataStr("response", response.data); - } catch (ex) { - print("Http Log" + " error......"); - } - } - - /// get Options Str. - String _getOptionsStr(Options request) { - return "method: " + request.method; - } - - /// print Data Str. - void _printDataStr(String tag, Object value) { - String da = value.toString(); - while (da.isNotEmpty) { - if (da.length > 512) { - print("[$tag ]: " + da.substring(0, 512)); - da = da.substring(512, da.length); - } else { - print("[$tag ]: " + da); - da = ""; - } - } - } - - /// get dio. - Dio getDio() { - return _dio; - } - - /// create new dio. - static Dio createNewDio([Options options]) { - Dio dio = new Dio(); - return dio; - } - - static String getBaseUrl() { -// if (inProduction) { -// //æ£å¼çŽ¯å¢ƒçš„ -// return APP_HOST_RELEASE; -// } else { -// return APP_HOST_DEBUG; -// } - return APP_HOST_DEBUG; - } - - /// get Def Options. - static BaseOptions getDefOptions() { - BaseOptions options = BaseOptions(); - options.connectTimeout = 10 * 1000; - options.receiveTimeout = 20 * 1000; -// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); - options.contentType = ContentType.json; - options.responseType = ResponseType.plain; - // options.baseUrl = 'https://earth.iyanzhi.com/'; -// options.baseUrl = 'http://earth.gmapp.env/'; - options.baseUrl = getBaseUrl() + "/"; - print("BASEURL!! ${getBaseUrl()}"); - Map<String, dynamic> headers = Map<String, dynamic>(); - headers['Accept'] = 'application/json'; - headers['version'] = '1.0.0'; - options.headers = headers; - return options; - } -} diff --git a/android/.gradle/4.10.2/fileChanges/last-build.bin b/android/.gradle/4.10.2/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/fileChanges/last-build.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/fileContent/fileContent.lock b/android/.gradle/4.10.2/fileContent/fileContent.lock deleted file mode 100644 index 1b82742eb2ccc3959ec431f71990c8abd8ada202..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/fileContent/fileContent.lock and /dev/null differ diff --git a/android/.gradle/4.10.2/fileHashes/fileHashes.bin b/android/.gradle/4.10.2/fileHashes/fileHashes.bin deleted file mode 100644 index 8e05ed3617093be926018af87088abad8966185d..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/fileHashes/fileHashes.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/fileHashes/fileHashes.lock b/android/.gradle/4.10.2/fileHashes/fileHashes.lock deleted file mode 100644 index 56ce4ca714477f276ee3c47b6cb9c40f38e1b15f..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/fileHashes/fileHashes.lock and /dev/null differ diff --git a/android/.gradle/4.10.2/fileHashes/resourceHashesCache.bin b/android/.gradle/4.10.2/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 60555e5f3d72a00606cb1c0c64f9d7cb99026a76..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/fileHashes/resourceHashesCache.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/gc.properties b/android/.gradle/4.10.2/gc.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/android/.gradle/4.10.2/javaCompile/classAnalysis.bin b/android/.gradle/4.10.2/javaCompile/classAnalysis.bin deleted file mode 100644 index 6b25a3ec5c7a5842d9337d31f7165296e72dfce8..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/javaCompile/classAnalysis.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/javaCompile/jarAnalysis.bin b/android/.gradle/4.10.2/javaCompile/jarAnalysis.bin deleted file mode 100644 index b8e5eaeb4f0bd5a52dcc4ee75c62891f55a49926..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/javaCompile/jarAnalysis.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/javaCompile/javaCompile.lock b/android/.gradle/4.10.2/javaCompile/javaCompile.lock deleted file mode 100644 index 42b9762591fb4a1b813217d555de6753cd019c73..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/javaCompile/javaCompile.lock and /dev/null differ diff --git a/android/.gradle/4.10.2/javaCompile/taskHistory.bin b/android/.gradle/4.10.2/javaCompile/taskHistory.bin deleted file mode 100644 index f830cd4af88b6d4217aedfca2a2a1cef3079326a..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/javaCompile/taskHistory.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/taskHistory/taskHistory.bin b/android/.gradle/4.10.2/taskHistory/taskHistory.bin deleted file mode 100644 index 0b674cc66bc0dd9eda0ef241a30fa60bff19a470..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/taskHistory/taskHistory.bin and /dev/null differ diff --git a/android/.gradle/4.10.2/taskHistory/taskHistory.lock b/android/.gradle/4.10.2/taskHistory/taskHistory.lock deleted file mode 100644 index d1780a3be194414c0b1f3ff097b9e4c55bd6337e..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.10.2/taskHistory/taskHistory.lock and /dev/null differ diff --git a/android/.gradle/4.6/fileChanges/last-build.bin b/android/.gradle/4.6/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/fileChanges/last-build.bin and /dev/null differ diff --git a/android/.gradle/4.6/fileContent/fileContent.lock b/android/.gradle/4.6/fileContent/fileContent.lock deleted file mode 100644 index 1273346de3750e9e76f8b39ff3c7f8a74a40a038..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/fileContent/fileContent.lock and /dev/null differ diff --git a/android/.gradle/4.6/fileHashes/fileHashes.bin b/android/.gradle/4.6/fileHashes/fileHashes.bin deleted file mode 100644 index de14232803069c78303aeb9fe89b7cf4aeb7b705..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/fileHashes/fileHashes.bin and /dev/null differ diff --git a/android/.gradle/4.6/fileHashes/fileHashes.lock b/android/.gradle/4.6/fileHashes/fileHashes.lock deleted file mode 100644 index 8be7889b47b38a69edfb10cc199b03ecf98cf497..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/fileHashes/fileHashes.lock and /dev/null differ diff --git a/android/.gradle/4.6/fileHashes/resourceHashesCache.bin b/android/.gradle/4.6/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 28ee14029125943614a201ec3ca7c80079a1aaba..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/fileHashes/resourceHashesCache.bin and /dev/null differ diff --git a/android/.gradle/4.6/javaCompile/classAnalysis.bin b/android/.gradle/4.6/javaCompile/classAnalysis.bin deleted file mode 100644 index b3262ed230be31e1a8354d1fff7c7f9e8ed9d963..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/javaCompile/classAnalysis.bin and /dev/null differ diff --git a/android/.gradle/4.6/javaCompile/jarAnalysis.bin b/android/.gradle/4.6/javaCompile/jarAnalysis.bin deleted file mode 100644 index 625708f1e3e3da4feefa08e739e6be4969795abc..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/javaCompile/jarAnalysis.bin and /dev/null differ diff --git a/android/.gradle/4.6/javaCompile/javaCompile.lock b/android/.gradle/4.6/javaCompile/javaCompile.lock deleted file mode 100644 index 55a5f2e7ece2527e94be18cd25866a29db0ddfc4..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/javaCompile/javaCompile.lock and /dev/null differ diff --git a/android/.gradle/4.6/javaCompile/taskHistory.bin b/android/.gradle/4.6/javaCompile/taskHistory.bin deleted file mode 100644 index 03bb20dab52f57a50646eb2340f534461cf7bb56..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/javaCompile/taskHistory.bin and /dev/null differ diff --git a/android/.gradle/4.6/javaCompile/taskJars.bin b/android/.gradle/4.6/javaCompile/taskJars.bin deleted file mode 100644 index e932d1709558e5e1fdf7babf0c4e8289cdea94a7..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/javaCompile/taskJars.bin and /dev/null differ diff --git a/android/.gradle/4.6/taskHistory/taskHistory.bin b/android/.gradle/4.6/taskHistory/taskHistory.bin deleted file mode 100644 index c6de4dfd58597378d70c5236cce2341939261b1a..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/taskHistory/taskHistory.bin and /dev/null differ diff --git a/android/.gradle/4.6/taskHistory/taskHistory.lock b/android/.gradle/4.6/taskHistory/taskHistory.lock deleted file mode 100644 index 29d3376f4e503b7474bc2e3bb868049209509864..0000000000000000000000000000000000000000 Binary files a/android/.gradle/4.6/taskHistory/taskHistory.lock and /dev/null differ diff --git a/android/.gradle/5.4.1/executionHistory/executionHistory.bin b/android/.gradle/5.4.1/executionHistory/executionHistory.bin index 84d202c73a553d22846afbbf38703301a7f7578e..c65dc238e992767e55826752af4e4cf2fc154b63 100644 Binary files a/android/.gradle/5.4.1/executionHistory/executionHistory.bin and b/android/.gradle/5.4.1/executionHistory/executionHistory.bin differ diff --git a/android/.gradle/5.4.1/executionHistory/executionHistory.lock b/android/.gradle/5.4.1/executionHistory/executionHistory.lock index 74ecefc2142092d6600ce93a597e15304ee2cc96..5a1b0dd8c05451d2e8fd6bc5559ae3bf9370554a 100644 Binary files a/android/.gradle/5.4.1/executionHistory/executionHistory.lock and b/android/.gradle/5.4.1/executionHistory/executionHistory.lock differ diff --git a/android/.gradle/5.4.1/fileHashes/fileHashes.bin b/android/.gradle/5.4.1/fileHashes/fileHashes.bin index 774d4e5c9e4cad2ff498e5d76cd8078359b2af0d..42daff83315ba63292abdaf66ee4f17faf3ac29d 100644 Binary files a/android/.gradle/5.4.1/fileHashes/fileHashes.bin and b/android/.gradle/5.4.1/fileHashes/fileHashes.bin differ diff --git a/android/.gradle/5.4.1/fileHashes/fileHashes.lock b/android/.gradle/5.4.1/fileHashes/fileHashes.lock index b0e60cd5e7cc956d3729f85db92018ece1833c7d..8eb01b37bdfbb8e343b924d58d5ebefb79309c51 100644 Binary files a/android/.gradle/5.4.1/fileHashes/fileHashes.lock and b/android/.gradle/5.4.1/fileHashes/fileHashes.lock differ diff --git a/android/.gradle/5.4.1/fileHashes/resourceHashesCache.bin b/android/.gradle/5.4.1/fileHashes/resourceHashesCache.bin index fc6abdd9e50a4756c1699cb9cef5026dc84963ba..ab1c363c674b4f87b69bd4aa66ba333a2669cf6a 100644 Binary files a/android/.gradle/5.4.1/fileHashes/resourceHashesCache.bin and b/android/.gradle/5.4.1/fileHashes/resourceHashesCache.bin differ diff --git a/android/.gradle/5.4.1/javaCompile/classAnalysis.bin b/android/.gradle/5.4.1/javaCompile/classAnalysis.bin index 04e2cfee45b766889118aed73e7609f98634f91e..e7437a344099ed07c828e10e154b8afa8212b8bd 100644 Binary files a/android/.gradle/5.4.1/javaCompile/classAnalysis.bin and b/android/.gradle/5.4.1/javaCompile/classAnalysis.bin differ diff --git a/android/.gradle/5.4.1/javaCompile/jarAnalysis.bin b/android/.gradle/5.4.1/javaCompile/jarAnalysis.bin index b09520f77a92d9e3a1c1a0eae710ad1286c64430..9c2f92116f7fffcd12f8cb884f2d2a4f845c2fbf 100644 Binary files a/android/.gradle/5.4.1/javaCompile/jarAnalysis.bin and b/android/.gradle/5.4.1/javaCompile/jarAnalysis.bin differ diff --git a/android/.gradle/5.4.1/javaCompile/javaCompile.lock b/android/.gradle/5.4.1/javaCompile/javaCompile.lock index 4f424ccec47c3e70dabccf7bc519ce7b17640e3b..a82055c5641c03508d70a6a0688274b0f35caf06 100644 Binary files a/android/.gradle/5.4.1/javaCompile/javaCompile.lock and b/android/.gradle/5.4.1/javaCompile/javaCompile.lock differ diff --git a/android/.gradle/5.4.1/javaCompile/taskHistory.bin b/android/.gradle/5.4.1/javaCompile/taskHistory.bin index 8ffaa47a9239d3652c0fa219b5b27a6ea53b4797..5e6d28bb3c2ca7adca4217caf3df7577721980d0 100644 Binary files a/android/.gradle/5.4.1/javaCompile/taskHistory.bin and b/android/.gradle/5.4.1/javaCompile/taskHistory.bin differ diff --git a/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock index aa79c4fdf642f0f5d76c77e54c6cae39f46c20a9..7a0b83ecf5758cc29ecbc36534f92d9151ec32e9 100644 Binary files a/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/android/.gradle/buildOutputCleanup/outputFiles.bin b/android/.gradle/buildOutputCleanup/outputFiles.bin index 801be88e99556704dc30c522a4cdd23e4008d024..dab1fddd94dca7c7e0668eed6c880414980f2cbd 100644 Binary files a/android/.gradle/buildOutputCleanup/outputFiles.bin and b/android/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/android/app/app.iml b/android/app/app.iml index e39cf0b5ca079816187226ca815191ea8a18f028..576ff4974933cb1b6f170a4d5a8d3972fd4efa7c 100644 --- a/android/app/app.iml +++ b/android/app/app.iml @@ -8,7 +8,7 @@ </compilerSettings> <compilerArguments> <option name="destination" value="$MODULE_DIR$/../../build/app/tmp/kotlin-classes/debug" /> - <option name="classpath" value="$USER_HOME$/Downloads/flutter/bin/cache/artifacts/engine/android-arm64/flutter.jar:/Users/apple/lsy/gmalpha_flutter/build/app/intermediates/flutter/debug/libs.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/d8dbc48720ab367d16710d1d4900d452/appcompat-v7-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/e645cd03456dfea8cf527eb38c52152a/support-fragment-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/9df4bf85fe8e809cc382807769af9038/animated-vector-drawable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/0fc6761e44e472fbfb8f0cfcb9305ed1/support-core-ui-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/0a01e704fb7fb58d49b64d0567188d80/support-core-utils-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/c0bcaa05958233de30ef6d0d14187f5b/support-vector-drawable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/286194e8db7b803b180001a7f1ec78ca/loader-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/4ee0d8adfd516cf69ff52fed474a8aea/viewpager-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/00fa33bf3e3b089f6168d10997305ea1/coordinatorlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/62951f13e1dff7b68e99737a25591852/drawerlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/955b3a5add435846ec514cdba546578d/slidingpanelayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/45698c5f24b94f4e033a70dfe4c87be0/customview-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/83b41701c0de3e28bd070ebc87303d81/swiperefreshlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/5fe9b608158ad92b2aed9ceb0430adf2/asynclayoutinflater-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/e1567367eeb68d692b5d7c70f20e9333/support-compat-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/828e60e57d3409736aa82b119e193a8e/versionedparcelable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/com.android.support/collections/28.0.0/c1bcdade4d3cc2836130424a3f3e4182c666a745/collections-28.0.0.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/aeafa3300619b9402ba4d50bb9b311bd/cursoradapter-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/23b7eb20ab37d51bdaa9a0bf604bf1aa/runtime-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/c89bf3676b7d5f0450149dae08319c82/documentfile-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/70db1d15e1e0a76418b2f55c3661d860/localbroadcastmanager-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/a1b8340475297cd2b36cb72be623f2e7/print-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/7bd8d86f321e4dc05b470aa2c289b34f/viewmodel-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/8b49361f4c8607c01288bb8996c15789/livedata-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/beece5856765effdb761a59c187fce7c/livedata-core-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.1.1/207a6efae6a3555e326de41f76bdadd9a239cbce/common-1.1.1.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/2e52cc67f3c95d1ff217164455a507ac/runtime-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.1.1/e55b70d1f5620db124b3e85a7f4bdc7bd48d9f95/common-1.1.1.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/9aee005a91c8299c09be70984d6d7b17/interpolator-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/28.0.0/ed73f5337a002d1fd24339d5fb08c2c9d9ca60d8/support-annotations-28.0.0.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.50/50ad05ea1c2595fb31b800e76db464d08d599af3/kotlin-stdlib-jdk7-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50/b529d1738c7e98bbfa36a4134039528f2ce78ebf/kotlin-stdlib-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.50/3d9cd3e1bc7b92e95f43d45be3bfbcf38e36ab87/kotlin-stdlib-common-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/Users/apple/Library/Android/sdk/platforms/android-28/android.jar:/Users/apple/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar" /> + <option name="classpath" value="$USER_HOME$/Downloads/flutter/bin/cache/artifacts/engine/android-arm64/flutter.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/d8dbc48720ab367d16710d1d4900d452/appcompat-v7-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/e645cd03456dfea8cf527eb38c52152a/support-fragment-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/9df4bf85fe8e809cc382807769af9038/animated-vector-drawable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/0fc6761e44e472fbfb8f0cfcb9305ed1/support-core-ui-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/0a01e704fb7fb58d49b64d0567188d80/support-core-utils-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/c0bcaa05958233de30ef6d0d14187f5b/support-vector-drawable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/286194e8db7b803b180001a7f1ec78ca/loader-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/4ee0d8adfd516cf69ff52fed474a8aea/viewpager-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/00fa33bf3e3b089f6168d10997305ea1/coordinatorlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/62951f13e1dff7b68e99737a25591852/drawerlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/955b3a5add435846ec514cdba546578d/slidingpanelayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/45698c5f24b94f4e033a70dfe4c87be0/customview-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/83b41701c0de3e28bd070ebc87303d81/swiperefreshlayout-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/5fe9b608158ad92b2aed9ceb0430adf2/asynclayoutinflater-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/e1567367eeb68d692b5d7c70f20e9333/support-compat-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/828e60e57d3409736aa82b119e193a8e/versionedparcelable-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/com.android.support/collections/28.0.0/c1bcdade4d3cc2836130424a3f3e4182c666a745/collections-28.0.0.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/aeafa3300619b9402ba4d50bb9b311bd/cursoradapter-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/23b7eb20ab37d51bdaa9a0bf604bf1aa/runtime-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/c89bf3676b7d5f0450149dae08319c82/documentfile-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/70db1d15e1e0a76418b2f55c3661d860/localbroadcastmanager-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/a1b8340475297cd2b36cb72be623f2e7/print-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/7bd8d86f321e4dc05b470aa2c289b34f/viewmodel-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/8b49361f4c8607c01288bb8996c15789/livedata-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/beece5856765effdb761a59c187fce7c/livedata-core-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.1.1/207a6efae6a3555e326de41f76bdadd9a239cbce/common-1.1.1.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/2e52cc67f3c95d1ff217164455a507ac/runtime-1.1.1/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.1.1/e55b70d1f5620db124b3e85a7f4bdc7bd48d9f95/common-1.1.1.jar:/Users/apple/.gradle/caches/transforms-2/files-2.1/9aee005a91c8299c09be70984d6d7b17/interpolator-28.0.0/jars/classes.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/28.0.0/ed73f5337a002d1fd24339d5fb08c2c9d9ca60d8/support-annotations-28.0.0.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.50/50ad05ea1c2595fb31b800e76db464d08d599af3/kotlin-stdlib-jdk7-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50/b529d1738c7e98bbfa36a4134039528f2ce78ebf/kotlin-stdlib-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.50/3d9cd3e1bc7b92e95f43d45be3bfbcf38e36ab87/kotlin-stdlib-common-1.3.50.jar:/Users/apple/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/Users/apple/Library/Android/sdk/platforms/android-28/android.jar:/Users/apple/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar" /> <option name="noStdlib" value="true" /> <option name="noReflect" value="true" /> <option name="moduleName" value="app_debug" /> @@ -192,6 +192,6 @@ <orderEntry type="module" module-name="flutter_boost-0.0.420-android-flutter_boost" /> <orderEntry type="module" module-name="sqflite" /> <orderEntry type="module" module-name="android-path_provider" /> - <orderEntry type="module" module-name="android-gengmei_flutter_plugin" /> + <orderEntry type="module" module-name="flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7-android-gengmei_flutter_plugin" /> </component> </module> \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8d80d9f3fa0aaecc3fa3f11848386513464d6e75..f92926281f9282ec143598170bcf5c1dba144780 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ package="com.example.gmalpha_flutter"> <application - android:name="io.flutter.app.FlutterApplication" + android:name=".App" android:icon="@mipmap/ic_launcher" android:label="gmalpha_flutter" android:theme="@style/AppTheme"> @@ -20,6 +20,8 @@ android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" /> </activity> + <activity android:name=".flutter.base.FlutterPageActivity" + android:screenOrientation="portrait"/> <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.gmalpha_flutter" diff --git a/android/app/src/main/assets/flutter_assets/AssetManifest.json b/android/app/src/main/assets/flutter_assets/AssetManifest.json deleted file mode 100644 index b5a79e99905385b482e04f653f521099a96ba2a6..0000000000000000000000000000000000000000 --- a/android/app/src/main/assets/flutter_assets/AssetManifest.json +++ /dev/null @@ -1 +0,0 @@ -{"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"],"images/arrow_right.png":["images/arrow_right.png"],"images/message_att.png":["images/message_att.png"],"images/message_like.png":["images/message_like.png"],"images/message_noti.png":["images/message_noti.png"],"images/nav_back.png":["images/nav_back.png"]} \ No newline at end of file diff --git a/android/app/src/main/assets/flutter_assets/FontManifest.json b/android/app/src/main/assets/flutter_assets/FontManifest.json deleted file mode 100644 index cebac74c921cd3717736f69139d033297d56b8b2..0000000000000000000000000000000000000000 --- a/android/app/src/main/assets/flutter_assets/FontManifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"fonts":[{"asset":"fonts/MaterialIcons-Regular.ttf"}],"family":"MaterialIcons"},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]},{"fonts":[{"asset":"fonts/MaterialIcons-Regular.ttf"}],"family":"MaterialIcons"}] \ No newline at end of file diff --git a/android/app/src/main/assets/flutter_assets/LICENSE b/android/app/src/main/assets/flutter_assets/LICENSE deleted file mode 100644 index 32d8c287edfbd83aada891ce96b7eb6b46225cea..0000000000000000000000000000000000000000 --- a/android/app/src/main/assets/flutter_assets/LICENSE +++ /dev/null @@ -1,14276 +0,0 @@ -StackWalker - -Copyright (c) 2005-2009, Jochen Kalmbach -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -Neither the name of Jochen Kalmbach nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -StackWalker - -Copyright (c) 2005-2013, Jochen Kalmbach -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -Neither the name of Jochen Kalmbach nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -analyzer -args -csslib -logging - -Copyright 2013, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -angle - -Copyright (c) 2007-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2008-2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2013-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2013-2017 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2013-2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright 2002 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2010 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2011 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2012 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2013 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2014 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2015 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle - -Copyright 2018 The ANGLE Project Authors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle -base - -Copyright 2016 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle -base - -Copyright 2017 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle -boringssl -engine -etc1 -observatory_pub_packages -skia -txt -vulkan -wuffs - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. --------------------------------------------------------------------------------- -angle -fuchsia_sdk -tonic - -Copyright 2019 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle -vulkan-validation-layers - -Copyright 2018 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -angle -xxhash - -Copyright 2019 The ANGLE Project Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their contributors may be used to endorse - or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -archive - - Copyright 2013 Brendan Duncan - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -Some code has been derived from the following projects: - -zlib/inflate: - JavaScript Zlib Library, https://github.com/imaya/zlib.js - The MIT License - Copyright (c) 2012 imaya - -zlib/deflate: - Java JZLib Library, http://www.jcraft.com/jzlib/ - Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -bzip2: - This program, "bzip2", the associated library "libbzip2", and all - documentation, are copyright (C) 1996-2010 Julian R Seward. All - rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, jseward@bzip.org - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - - --------------------------------------------------------------------------------- -async -collection -convert -crypto -mime -package_config -package_resolver -source_gen -stream_channel -typed_data - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -base - -Copyright 2013 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -base -fuchsia_sdk -skia - -Copyright 2018 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -base -icu - -Copyright 2014 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -base -zlib - -Copyright (c) 2011 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boolean_selector -build -build_runner -code_builder -front_end -kernel -meta -web_socket_channel - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 Kungliga Tekniska Högskolan -(Royal Institute of Technology, Stockholm, Sweden). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006,2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2010 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2012 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2013 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Intel Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2016, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2017, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2018, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2003 Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005 Nokia. All rights reserved. - -The portions of the attached software ("Contribution") is developed by -Nokia Corporation and is licensed pursuant to the OpenSSL open source -license. - -The Contribution, originally written by Mika Kousa and Pasi Eronen of -Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites -support (see RFC 4279) to OpenSSL. - -No patent licenses or other rights except those expressly stated in -the OpenSSL open source license shall be deemed granted or received -expressly, by implication, estoppel, or otherwise. - -No assurances are provided by Nokia that the Contribution does not -infringe the patent or other intellectual property rights of any third -party or that the license provides you with all the necessary rights -to make use of the Contribution. - -THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN -ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA -SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY -OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR -OTHERWISE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2007, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2008 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2012, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2014, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2015, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2016 Brian Smith. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -The MIT License (MIT) - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl -dart - -OpenSSL License - - ==================================================================== - Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - - 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - - 5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - - THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - OF THE POSSIBILITY OF SUCH DAMAGE. - ==================================================================== - - This product includes cryptographic software written by Eric Young - (eay@cryptsoft.com). This product includes software written by Tim - Hudson (tjh@cryptsoft.com). - -Original SSLeay License - -* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -* All rights reserved. - -* This package is an SSL implementation written -* by Eric Young (eay@cryptsoft.com). -* The implementation was written so as to conform with Netscapes SSL. - -* This library is free for commercial and non-commercial use as long as -* the following conditions are aheared to. The following conditions -* apply to all code found in this distribution, be it the RC4, RSA, -* lhash, DES, etc., code; not just the SSL code. The SSL documentation -* included with this distribution is covered by the same copyright terms -* except that the holder is Tim Hudson (tjh@cryptsoft.com). - -* Copyright remains Eric Young's, and as such any Copyright notices in -* the code are not to be removed. -* If this package is used in a product, Eric Young should be given attribution -* as the author of the parts of the library used. -* This can be in the form of a textual message at program startup or -* in documentation (online or textual) provided with the package. - -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. All advertising materials mentioning features or use of this software -* must display the following acknowledgement: -* "This product includes cryptographic software written by -* Eric Young (eay@cryptsoft.com)" -* The word 'cryptographic' can be left out if the rouines from the library -* being used are not cryptographic related :-). -* 4. If you include any Windows specific code (or a derivative thereof) from -* the apps directory (application code) you must include an acknowledgement: -* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. - -* The licence and distribution terms for any publically available version or -* derivative of this code cannot be changed. i.e. this code cannot simply be -* copied and put under another distribution licence -* [including the GNU Public Licence.] - -ISC license used for completely new code in BoringSSL: - -/* Copyright (c) 2015, Google Inc. - - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -The code in third_party/fiat carries the MIT license: - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Licenses for support code - -Parts of the TLS test suite are under the Go license. This code is not included -in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so -distributing code linked against BoringSSL does not trigger this license: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -build_config -graphs -io -json_annotation -pedantic -platform -stream_transform -term_glyph - -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -build_daemon - -Copyright 2019, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -build_resolvers -build_runner_core -pubspec_parse -test_api -timing - -Copyright 2018, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -built_collection -built_value -vector_math - -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -charcode -dart_style -fixnum -glob -http -http_multi_server -http_parser -matcher -path -pool -pub_semver -shelf -shelf_web_socket -source_span -stack_trace -string_scanner -watcher -yaml - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -colorama - -Copyright (c) 2010 Jonathan Hartley -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holders, nor those of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -compiler - -Copyright (C) 2012 Apple Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -cookie_jar -dio - -MIT License - -Copyright (c) 2018 wendux - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -cupertino_icons - - -The MIT License (MIT) - -Copyright (c) 2016 Drifty (http://drifty.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2012 Adam Singer (adam@solvr.io) -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF -THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -In addition, the following condition applies: - -All redistributions must retain an intact copy of this copyright notice -and disclaimer. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2010, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright 2009 The Go Authors. All rights reserved. -Use of this source code is governed by a BSD-style -license that can be found in the LICENSE file --------------------------------------------------------------------------------- -dart - -Copyright 2012, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2006-2008 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2010 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2012 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -engine -txt - -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright 2000, Clark Cooper -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002, 2003, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001-2008, 2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2004, 2011 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2014 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2015 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000, 2001, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2010, 2012-2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2001, 2002, 2012 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -The FreeType Project LICENSE - - 2006-Jan-27 - -Copyright 1996-2002, 2006 by -David Turner, Robert Wilhelm, and Werner Lemberg - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - Portions of this software are copyright © <year> The FreeType - Project (www.freetype.org). All rights reserved. - - Please replace <year> with the value from the FreeType version you - actually use. - -Legal Terms -=========== - -0. Definitions - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - https://www.freetype.org - ---- end of FTL.TXT --- --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2013 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2014 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk - -The majority of files in this project use the Apache 2.0 License. -There are a few exceptions and their license can be found in the source. -Any license deviations from Apache 2.0 are "more permissive" licenses. - -=========================================================================================== - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --------------------------------------------------------------------------------- -fuchsia_sdk - -musl as a whole is licensed under the following standard MIT license: - -Copyright © 2005-2014 Rich Felker, et al. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Authors/contributors include: - -Alex Dowad -Alexander Monakov -Anthony G. Basile -Arvid Picciani -Bobby Bingham -Boris Brezillon -Brent Cook -Chris Spiegel -Clément Vasseur -Daniel Micay -Denys Vlasenko -Emil Renner Berthing -Felix Fietkau -Felix Janda -Gianluca Anzolin -Hauke Mehrtens -Hiltjo Posthuma -Isaac Dunham -Jaydeep Patil -Jens Gustedt -Jeremy Huntwork -Jo-Philipp Wich -Joakim Sindholt -John Spencer -Josiah Worcester -Justin Cormack -Khem Raj -Kylie McClain -Luca Barbato -Luka Perkov -M Farkas-Dyck (Strake) -Mahesh Bodapati -Michael Forney -Natanael Copa -Nicholas J. Kain -orc -Pascal Cuoq -Petr Hosek -Pierre Carrier -Rich Felker -Richard Pennington -Shiz -sin -Solar Designer -Stefan Kristiansson -Szabolcs Nagy -Timo Teräs -Trutz Behn -Valentin Ochs -William Haddon - -Portions of this software are derived from third-party works licensed -under terms compatible with the above MIT license: - -Much of the math library code (third_party/math/* and -third_party/complex/*, and third_party/include/libm.h) is -Copyright © 1993,2004 Sun Microsystems or -Copyright © 2003-2011 David Schultz or -Copyright © 2003-2009 Steven G. Kargl or -Copyright © 2003-2009 Bruce D. Evans or -Copyright © 2008 Stephen L. Moshier -and labelled as such in comments in the individual source files. All -have been licensed under extremely permissive terms. - -The smoothsort implementation (third_party/smoothsort/qsort.c) is -Copyright © 2011 Valentin Ochs and is licensed under an MIT-style -license. - -The x86_64 files in third_party/arch were written by Nicholas J. Kain -and is licensed under the standard MIT terms. - -All other files which have no copyright comments are original works -produced specifically for use as part of this library, written either -by Rich Felker, the main author of the library, or by one or more -contibutors listed above. Details on authorship of individual files -can be found in the git version control history of the project. The -omission of copyright and license comments in each file is in the -interest of source tree size. - -In addition, permission is hereby granted for all public header files -(include/* and arch/*/bits/*) and crt files intended to be linked into -applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -the copyright notice and permission notice otherwise required by the -license, and to use these files without any requirement of -attribution. These files include substantial contributions from: - -Bobby Bingham -John Spencer -Nicholas J. Kain -Rich Felker -Richard Pennington -Stefan Kristiansson -Szabolcs Nagy - -all of whom have explicitly granted such permission. - -This file previously contained text expressing a belief that most of -the files covered by the above exception were sufficiently trivial not -to be subject to copyright, resulting in confusion over whether it -negated the permissions granted in the license. In the spirit of -permissive licensing, and of not having licensing issues being an -obstacle to adoption, that text has been removed. --------------------------------------------------------------------------------- -fuchsia_sdk -rapidjson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -fuchsia_sdk -skia - -Copyright 2019 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk -tonic - -Copyright 2015 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk -tonic - -Copyright 2016 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk -tonic - -Copyright 2017 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -fuchsia_sdk -tonic - -Copyright 2018 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -gengmei_flutter_plugin -xservice_kit - -TODO: Add your license here. - --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org> -Copyright (c) 2012 Torsten Walluhn <tw@mad-cad.net> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund <elmindreda@glfw.org> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund <elmindreda@glfw.org> -Copyright (c) 2012 Torsten Walluhn <tw@mad-cad.net> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2010-2016 Camilla Berglund <elmindreda@glfw.org> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014 Jonas Ã…dahl <jadahl@gmail.com> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014-2015 Brandon Schaefer <brandon.schaefer@canonical.com> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net> - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2006 Behdad Esfahbod -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007 Chris Wilson -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. -Copyright © 2019, Facebook Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Mozilla Foundation. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Mozilla Foundation. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Mozilla Foundation. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015-2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Khaled Hosny -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Igalia S.L. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Elie Roux <elie.roux@telecom-bretagne.eu> -Copyright © 2018 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Khaled Hosny - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Adobe Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. -For parts of HarfBuzz that are licensed under different licenses see individual -files names COPYING in subdirectories where applicable. - -Copyright © 2010,2011,2012,2013,2014,2015,2016,2017,2018,2019 Google, Inc. -Copyright © 2019 Facebook, Inc. -Copyright © 2012 Mozilla Foundation -Copyright © 2011 Codethink Limited -Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) -Copyright © 2009 Keith Stribley -Copyright © 2009 Martin Hosken and SIL International -Copyright © 2007 Chris Wilson -Copyright © 2006 Behdad Esfahbod -Copyright © 2005 David Turner -Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. -Copyright © 1998-2004 David Turner and Werner Lemberg - -For full copyright notices consult the individual files in the package. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -html - -Copyright (c) 2006-2012 The Authors - -Contributors: -James Graham - jg307@cam.ac.uk -Anne van Kesteren - annevankesteren@gmail.com -Lachlan Hunt - lachlan.hunt@lachy.id.au -Matt McDonald - kanashii@kanashii.ca -Sam Ruby - rubys@intertwingly.net -Ian Hickson (Google) - ian@hixie.ch -Thomas Broyer - t.broyer@ltgt.net -Jacques Distler - distler@golem.ph.utexas.edu -Henri Sivonen - hsivonen@iki.fi -Adam Barth - abarth@webkit.org -Eric Seidel - eric@webkit.org -The Mozilla Foundation (contributions from Henri Sivonen since 2008) -David Flanagan (Mozilla) - dflanagan@mozilla.com -Google Inc. (contributed the Dart port) - misc@dartlang.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- -icu - -Copyright (c) 1995-2016 International Business Machines Corporation and others -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, and/or sell copies of the Software, and to permit persons -to whom the Software is furnished to do so, provided that the above -copyright notice(s) and this permission notice appear in all copies of -the Software and that both the above copyright notice(s) and this -permission notice appear in supporting documentation. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY -SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, use -or other dealings in this Software without prior written authorization -of the copyright holder. - -All trademarks and registered trademarks mentioned herein are the -property of their respective owners. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Computer Systems and Communication Lab, - Institute of Information Science, Academia - * Sinica. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the Computer Systems and Communication Lab - nor the names of its contributors may be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 TaBE Project. -Copyright (c) 1999 Pai-Hsiang Hsiao. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the TaBE Project nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2002 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2013 International Business Machines Corporation -and others. All Rights Reserved. - -Project: http://code.google.com/p/lao-dictionary -Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt -License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt - (copied below) - - This file is derived from the above dictionary, with slight - modifications. - - Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, - are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. Redistributions in - binary form must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2014 International Business Machines Corporation -and others. All Rights Reserved. - -This list is part of a project hosted at: - github.com/kanyawtech/myanmar-karen-word-lists - -Copyright (c) 2013, LeRoy Benjamin Sharon -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: Redistributions of source code must retain the above -copyright notice, this list of conditions and the following -disclaimer. Redistributions in binary form must reproduce the -above copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided -with the distribution. - - Neither the name Myanmar Karen Word Lists, nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2010. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2011. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2012. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2014. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2016. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright 1996 Chih-Hao Tsai @ Beckman Institute, - University of Illinois -c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 --------------------------------------------------------------------------------- -icu - -Copyright 2000, 2001, 2002, 2003 Nara Institute of Science -and Technology. All Rights Reserved. - -Use, reproduction, and distribution of this software is permitted. -Any copy of this software, whether in its original form or modified, -must include both the above copyright notice and the following -paragraphs. - -Nara Institute of Science and Technology (NAIST), -the copyright holders, disclaims all warranties with regard to this -software, including all implied warranties of merchantability and -fitness, in no event shall NAIST be liable for -any special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether in an -action of contract, negligence or other tortuous action, arising out -of or in connection with the use or performance of this software. - -A large portion of the dictionary entries -originate from ICOT Free Software. The following conditions for ICOT -Free Software applies to the current dictionary as well. - -Each User may also freely distribute the Program, whether in its -original form or modified, to any third party or parties, PROVIDED -that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear -on, or be attached to, the Program, which is distributed substantially -in the same form as set out herein and that such intended -distribution, if actually made, will neither violate or otherwise -contravene any of the laws and regulations of the countries having -jurisdiction over the User or the intended distribution itself. - -NO WARRANTY - -The program was produced on an experimental basis in the course of the -research and development conducted during the project and is provided -to users as so produced on an experimental basis. Accordingly, the -program is provided without any warranty whatsoever, whether express, -implied, statutory or otherwise. The term "warranty" used herein -includes, but is not limited to, any warranty of the quality, -performance, merchantability and fitness for a particular purpose of -the program and the nonexistence of any infringement or violation of -any right of any third party. - -Each user of the program will agree and understand, and be deemed to -have agreed and understood, that there is no warranty whatsoever for -the program and, accordingly, the entire risk arising from or -otherwise connected with the program is assumed by the user. - -Therefore, neither ICOT, the copyright holder, or any other -organization that participated in or was otherwise related to the -development of the program and their respective officials, directors, -officers and other employees shall be held liable for any and all -damages, including, without limitation, general, special, incidental -and consequential damages, arising out of or otherwise in connection -with the use or inability to use the program or any product, material -or result produced or otherwise obtained by using the program, -regardless of whether they have been advised of, or otherwise had -knowledge of, the possibility of such damages at any time during the -project or thereafter. Each user will be deemed to have agreed to the -foregoing by his or her commencement of use of the program. The term -"use" as used herein includes, but is not limited to, the use, -modification, copying and distribution of the program and the -production of secondary products from the program. - -In the case where the program, whether in its original form or -modified, was distributed or delivered to or received by a user from -any person, organization or entity other than ICOT, unless it makes or -grants independently of ICOT any specific warranty to the user in -writing, such person, organization or entity, will also be exempted -from and not be held liable to the user for any such damages as noted -above as far as the program is concerned. --------------------------------------------------------------------------------- -icu - -Copyright 2006-2011, the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright © 1991-2018 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu - -The BSD License -http://opensource.org/licenses/bsd-license.php -Copyright (C) 2006-2008, Google Inc. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided with -the distribution. - Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Unicode® Terms of Use -For the general privacy policy governing access to this site, see the Unicode Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy. - -A. Unicode Copyright. -1. Copyright © 1991-2017 Unicode, Inc. All rights reserved. -2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. -3. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files solely for informational purposes and in the creation of products supporting the Unicode Standard, subject to the Terms and Conditions herein. -4. Further specifications of rights and restrictions pertaining to the use of the particular set of data files known as the "Unicode Character Database" can be found in the License. -5. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. -6. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. -7. Modification is not permitted with respect to this document. All copies of this document must be verbatim. -B. Restricted Rights Legend. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. -C. Warranties and Disclaimers. -1. This publication and/or website may include technical or typographical errors or other inaccuracies . Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. -2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. -3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. -D. Waiver of Damages. In no event shall Unicode or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. -E. Trademarks & Logos. -1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium†and “Unicode, Inc.†are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. -2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policyâ€) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. -3. All third party trademarks referenced herein are the property of their respective owners. -F. Miscellaneous. -1. Jurisdiction and Venue. This server is operated from a location in the State of California, United States of America. Unicode makes no representation that the materials are appropriate for use in other locations. If you access this server from other locations, you are responsible for compliance with local laws. This Agreement, all use of this site and any claims and damages resulting from use of this site are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this site shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. -2. Modification by Unicode Unicode shall have the right to modify this Agreement at any time by posting it to this site. The user may not assign any part of this Agreement without Unicode’s prior written consent. -3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. -4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. -5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. - -EXHIBIT 1 -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2015 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2016 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -image - - Copyright 2013 Brendan Duncan - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -Parts of the Image library were ported from the following sources: - -============================================================================== - - The JPEG encoder/decoder code is derived from the following: - https://github.com/notmasteryet/jpgjs - Copyright (C) 2011 notmasteryet - - Contributors: Yury Delendik <ydelendik@mozilla.com> - Brendan Dahl <bdahl@mozilla.com> - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -============================================================================== - -The WebP encoder/decoder code is derived from the following: - http://git.chromium.org/gitweb/?p=webm/libwebp.git - Copyright (c) 2010, Google Inc. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -============================================================================== - -The TIFF decoder code is derived from the following: - Apache Batik - http://svn.apache.org/repos/asf/xmlgraphics/batik/trunk - Copyright 1999-2007 The Apache Software Foundation - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -============================================================================== - -The OpenEXR decoder is derived in part from the OpenEXR library: - -Copyright (c) 2002-2011, Industrial Light & Magic, a division of -Lucasfilm Entertainment Company Ltd. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - -Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. -Neither the name of Industrial Light & Magic nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================== - -The PVRTC compression and decompression code is ported from Jeffrey Lim's -PvrTcCompressor: - -https://bitbucket.org/jthlim/pvrtccompressor - -Copyright © 2014, Jeffrey Lim. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -=============================================================================== - -The pvr container format decoder is derived from the QuickPVR project: -QuickPVR is Copyright (C) 2010 Limbic Software, Inc. -http://www.limbicsoftware.com/quickpvr.html - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Limbic Software, Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY LIMBIC SOFTWARE, INC. ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL LIMBIC SOFTWARE, INC. BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -js - -Copyright 2012, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2013-2014 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -libXNVCtrl - -Copyright (c) 2008 NVIDIA, Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -libXNVCtrl - -Copyright (c) 2010 NVIDIA, Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -University of Illinois/NCSA -Open Source License - -Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT - -All rights reserved. - -Developed by: - - LLVM Team - - University of Illinois at Urbana-Champaign - - http://llvm.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal with -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - - * Neither the names of the LLVM Team, University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -SOFTWARE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, 2014-2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka <siarhei.siamashka@nokia.com> -Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. -Author: Ragesh Radhakrishnan <ragesh.r@linaro.org> -Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. -Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka <siarhei.siamashka@nokia.com> -Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. -Copyright (C) 2014, Linaro Limited. All Rights Reserved. -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2014, Jay Foad. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2014 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009-2011, 2014-2015, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2010, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library - version 1.02 - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2011, 2014-2016, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2014, Linaro Limited. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2009, 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman <ossman@cendio.se> for Cendio AB -Copyright (C) 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project -to include only information relevant to libjpeg-turbo, to wordsmith certain -sections, and to remove impolitic language that existed in the libjpeg v8 -README. It is included only for reference. Please see README.md for -information specific to libjpeg-turbo. - -The Independent JPEG Group's JPEG software -========================================== - -This distribution contains a release of the Independent JPEG Group's free JPEG -software. You are welcome to redistribute this software and to use it for any -purpose, subject to the conditions under LEGAL ISSUES, below. - -This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, -Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, -Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, -and other members of the Independent JPEG Group. - -IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee -(also known as JPEG, together with ITU-T SG16). - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - usage.txt Usage instructions for cjpeg, djpeg, jpegtran, - rdjpgcom, and wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.txt). - wizard.txt Advanced usage instructions for JPEG wizards only. - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.txt How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.txt Overview of the JPEG library's internal structure. - coderules.txt Coding style rules --- please read if you contribute code. - -Please read at least usage.txt. Some information can also be found in the JPEG -FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find -out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - -OVERVIEW -======== - -This package contains C software to implement JPEG image encoding, decoding, -and transcoding. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and grayscale images. JPEG's strong suit is compressing -photographic images or other types of images that have smooth color and -brightness transitions between neighboring pixels. Images with sharp lines or -other abrupt features may not compress well with JPEG, and a higher JPEG -quality may have to be used to avoid visible compression artifacts with such -images. - -JPEG is lossy, meaning that the output pixels are not necessarily identical to -the input pixels. However, on photographic content and other "smooth" images, -very good compression ratios can be obtained with no visible compression -artifacts, and extremely high compression ratios are possible if you are -willing to sacrifice image quality (by reducing the "quality" setting in the -compressor.) - -This software implements JPEG baseline, extended-sequential, and progressive -compression processes. Provision is made for supporting all variants of these -processes, although some uncommon parameter settings aren't implemented yet. -We have made no provision for supporting the hierarchical or lossless -processes defined in the standard. - -We provide a set of library routines for reading and writing JPEG image files, -plus two sample applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. - -We have also included "jpegtran", a utility for lossless transcoding between -different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple -applications for inserting and extracting textual comments in JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) Rather, it is intended to -be reliable, portable, industrial-strength code. We do not claim to have -achieved that goal in every aspect of the software, but we strive for it. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltmain.sh). Another support script, install-sh, is copyright by X Consortium -but is also freely distributable. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent (now expired), GIF reading -support has been removed altogether, and the GIF writer has been simplified -to produce "uncompressed GIFs". This technique does not use the LZW -algorithm; the resulting GIF files are larger than usual, but are readable -by all standard GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - -REFERENCES -========== - -We recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PDF file containing a revised version of Wallace's article is -available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually -a preprint for an article that appeared in IEEE Trans. Consumer Electronics) -omits the sample images that appeared in CACM, but it includes corrections -and some added material. Note: the Wallace article is copyright ACM and IEEE, -and it may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by -M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides -good explanations and example C code for a multitude of compression methods -including JPEG. It is an excellent source if you are comfortable reading C -code but don't know much about data compression in general. The book's JPEG -sample code is far from industrial-strength, but when you are ready to look -at a full implementation, you've got one here... - -The best currently available description of JPEG is the textbook "JPEG Still -Image Data Compression Standard" by William B. Pennebaker and Joan L. -Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. -Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG -standards (DIS 10918-1 and draft DIS 10918-2). - -The original JPEG standard is divided into two parts, Part 1 being the actual -specification, while Part 2 covers compliance testing methods. Part 1 is -titled "Digital Compression and Coding of Continuous-tone Still Images, -Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS -10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of -Continuous-tone Still Images, Part 2: Compliance testing" and has document -numbers ISO/IEC IS 10918-2, ITU-T T.83. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report -and thus received a formal publication status. It is available as a free -download in PDF format from -http://www.ecma-international.org/publications/techreports/E-TR-098.htm. -A PostScript version of the JFIF document is available at -http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at -http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. - -The TIFF 6.0 file format specification can be obtained by FTP from -ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme -found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. -IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). -Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 -(Compression tag 7). Copies of this Note can be obtained from -http://www.ijg.org/files/. It is expected that the next revision -of the TIFF spec will replace the 6.0 JPEG design with the Note's design. -Although IJG's own code does not support TIFF/JPEG, the free libtiff library -uses our library to implement TIFF/JPEG per the Note. - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is www.ijg.org. -The most recent released version can always be found there in -directory "files". - -The JPEG FAQ (Frequently Asked Questions) article is a source of some -general information about JPEG. -It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq -and other news.answers archive sites, including the official news.answers -archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. -If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu -with body - send usenet/news.answers/jpeg-faq/part1 - send usenet/news.answers/jpeg-faq/part2 - -FILE FORMAT WARS -================ - -The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together -with ITU-T SG16) currently promotes different formats containing the name -"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does -not support these formats (see REFERENCES). Indeed, one of the original -reasons for developing this free software was to help force convergence on -common, interoperable format standards for JPEG files. -Don't use an incompatible file format! -(In any case, our decoder will remain capable of reading existing JPEG -image files indefinitely.) - -TO DO -===== - -Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. --------------------------------------------------------------------------------- -libsdl -skia - -Copyright 2016 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright (c) 2010, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2010 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2011 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2012 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2013 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2014 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2015 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2016 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2017 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, Michael Bostock and Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2013, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages -pkg - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -path_provider - -Copyright 2017, the Flutter project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -petitparser -xml - -The MIT License - -Copyright (c) 2006-2019 Lukas Renggli. -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -pull_to_refresh - -MIT License - -Copyright (c) 2018 Jpeng - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- -quiver - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --------------------------------------------------------------------------------- -rapidjson - -Copyright (c) 2006-2013 Alexander Chemeris - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the product nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License -Version 2.0 - -1. Definitions - -1.1. “Contributor†- -means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. - -1.2. “Contributor Version†- -means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution†- -means Covered Software of a particular Contributor. - -1.4. “Covered Software†- -means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. - -1.5. “Incompatible With Secondary Licenses†- -means - - a. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. - -1.6. “Executable Form†- -means any form of the work other than Source Code Form. - -1.7. “Larger Work†- -means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. - -1.8. “License†- -means this document. - -1.9. “Licensable†- -means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. - -1.10. “Modifications†- -means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims†of a Contributor - -means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. - -1.12. “Secondary License†- -means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form†- -means the form of the work preferred for making modifications. - -1.14. “You†(or “Yourâ€) - -means an individual or a legal entity exercising rights under this License. For legal entities, “You†includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control†means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its Contributions. - -This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is†basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses†Notice - - This Source Code Form is “Incompatible With Secondary Licensesâ€, as defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License Version 2.0 -================================== - -1. Definitions - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -* 6. Disclaimer of Warranty - -* Covered Software is provided under this License on an "as is" -* basis, without warranty of any kind, either expressed, implied, or -* statutory, including, without limitation, warranties that the -* Covered Software is free of defects, merchantable, fit for a -* particular purpose or non-infringing. The entire risk as to the -* quality and performance of the Covered Software is with You. -* Should any Covered Software prove defective in any respect, You -* (not any Contributor) assume the cost of any necessary servicing, -* repair, or correction. This disclaimer of warranty constitutes an -* essential part of this License. No use of any Covered Software is -* authorized under this License except under this disclaimer. - -* 7. Limitation of Liability - -* Under no circumstances and under no legal theory, whether tort -* (including negligence), contract, or otherwise, shall any -* Contributor, or anyone who distributes Covered Software as -* permitted above, be liable to You for any direct, indirect, -* special, incidental, or consequential damages of any character -* including, without limitation, damages for lost profits, loss of -* goodwill, work stoppage, computer failure or malfunction, or any -* and all other commercial damages or losses, even if such party -* shall have been informed of the possibility of such damages. This -* limitation of liability shall not apply to liability for death or -* personal injury resulting from such party's negligence to the -* extent applicable law prohibits such limitation. Some -* jurisdictions do not allow the exclusion or limitation of -* incidental or consequential damages, so this exclusion and -* limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -rxdart - -Licensed under the Apache License, Version 2.0 (the "License"); you -may not use this file except in compliance with the License. You may -obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied. See the License for the specific language governing permissions -and limitations under the License. --------------------------------------------------------------------------------- -skcms - -Copyright (c) 2018 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skcms -skia -vulkanmemoryallocator - -Copyright 2018 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2006 Apple Computer, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2014 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2011 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and/or associated documentation files (the "Materials"), -to deal in the Materials without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Materials, and to permit persons to whom the -Materials are furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Materials. --------------------------------------------------------------------------------- -skia - -Copyright 2005 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006-2012 The Android Open Source Project -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2007 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009-2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Intel Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google, LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google Inc. and Adobe Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google, LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -NEON optimized code (C) COPYRIGHT 2009 Motorola - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -smhasher - -All MurmurHash source files are placed in the public domain. - -The license below applies to all other code in SMHasher: - -Copyright (c) 2011 Google, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -sqflite - -Copyright (c) 2017, Alexandre Roux Tekartik. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- -synchronized - -Copyright (c) 2016, Alexandre Roux Tekartik. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the <organization> nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -systeminfo - -Copyright (C) 2009 Apple Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2003, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -trace_event - -Copyright (c) 2013 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -uuid - -Copyright (c) 2012 Yulian Kuncheff - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -vulkanmemoryallocator - -Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -wasmer - -MIT License - -Copyright (c) 2019 Wasmer, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -wuffs - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -xxhash - -Copyright (C) 2012-2016, Yann Collet - -BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -xxhash - -Copyright (C) 2012-2016, Yann Collet. - -BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2006, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2007 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2008, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2009 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly -detect_data_type() function provided freely by Cosmin Truta, 2006 - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications for Zip64 support -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications of Unzip for Zip64 -Copyright (C) 2007-2008 Even Rouault - -Modifications for Zip64 support on both zip and unzip -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation -Authors: - Arjan van de Ven <arjan@linux.intel.com> - Jim Kukunas <james.t.kukunas@linux.intel.com> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Author: - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Authors: - Wajdi Feghali <wajdi.k.feghali@intel.com> - Jim Guilford <james.guilford@intel.com> - Vinodh Gopal <vinodh.gopal@intel.com> - Erdinc Ozturk <erdinc.ozturk@intel.com> - Jim Kukunas <james.t.kukunas@linux.intel.com> - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2014 Intel Corporation - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (c) 2012 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -zlib.h -- interface of the 'zlib' general purpose compression library -version 1.2.4, March 14th, 2010 - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Jean-loup Gailly -Mark Adler diff --git a/android/app/src/main/assets/flutter_assets/fonts/MaterialIcons-Regular.ttf b/android/app/src/main/assets/flutter_assets/fonts/MaterialIcons-Regular.ttf deleted file mode 100644 index 9519e1d75e8e60fc461d42dceff7162076484747..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/fonts/MaterialIcons-Regular.ttf and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/images/arrow_right.png b/android/app/src/main/assets/flutter_assets/images/arrow_right.png deleted file mode 100644 index 07c2cdeb540264aeef912a0091bfdea81e95a327..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/images/arrow_right.png and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/images/message_att.png b/android/app/src/main/assets/flutter_assets/images/message_att.png deleted file mode 100644 index 30b3f5eb0a47ac2ee788cd464477af50f20462a2..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/images/message_att.png and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/images/message_like.png b/android/app/src/main/assets/flutter_assets/images/message_like.png deleted file mode 100644 index be3dc16e4807bd6a35f150ed4cab8bc8df2257b0..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/images/message_like.png and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/images/message_noti.png b/android/app/src/main/assets/flutter_assets/images/message_noti.png deleted file mode 100644 index 4ab774e31c373363c8ad5862f80daa3dc31013b1..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/images/message_noti.png and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/images/nav_back.png b/android/app/src/main/assets/flutter_assets/images/nav_back.png deleted file mode 100644 index 0a889b835e5eb2044325f301d51f58ecbb093a66..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/images/nav_back.png and /dev/null differ diff --git a/android/app/src/main/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/android/app/src/main/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf deleted file mode 100644 index bef51e15c308f20b3897de0d8799b0a9a7c97de6..0000000000000000000000000000000000000000 Binary files a/android/app/src/main/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf and /dev/null differ diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/App.kt b/android/app/src/main/kotlin/com/example/gmalpha_flutter/App.kt new file mode 100644 index 0000000000000000000000000000000000000000..cdc656d44c768380573428f7147380b25d2570c1 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/App.kt @@ -0,0 +1,55 @@ +package com.example.gmalpha_flutter + +import android.app.Activity +import android.app.Application +import android.content.Context +import com.example.gmalpha_flutter.flutter.PageRouter +import com.taobao.idlefish.flutterboost.FlutterBoostPlugin +import com.taobao.idlefish.flutterboost.interfaces.IPlatform +import io.flutter.BuildConfig +import io.flutter.Log +import io.flutter.view.FlutterMain +import java.util.HashMap + +/** + * @author lsy + * @date 2019-09-30 + */ +class App : Application() { + + override fun onCreate() { + super.onCreate() + FlutterMain.startInitialization(this) + FlutterBoostPlugin.init(object : IPlatform { + override fun getApplication(): Application { + return this@App + } + + /** + * get the main activity, this activity should always at the bottom of task stack. + */ + override fun getMainActivity(): Activity? { +// return null + return MainActivity.Companion.sRef!!.get(); + } + + override fun isDebug(): Boolean { + return BuildConfig.DEBUG + } + + /** + * start a new activity from flutter page, you may need a activity router. + */ + override fun startActivity(context: Context, url: String, requestCode: Int): Boolean { + Log.e("lsy", "$requestCode $url") + return true; + } + + override fun getSettings(): Map<*, *> { + val base = HashMap<String, String>() + base["BASE"] = "BASEVALUE" + return base + } + }) + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/MainActivity.kt b/android/app/src/main/kotlin/com/example/gmalpha_flutter/MainActivity.kt index fb2697e7a06925c302b76b0d7d4b36482e6d205b..db463999680c6b6ee070e9e92612788ceb6fc83d 100644 --- a/android/app/src/main/kotlin/com/example/gmalpha_flutter/MainActivity.kt +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/MainActivity.kt @@ -1,13 +1,74 @@ package com.example.gmalpha_flutter +import android.app.Activity +import android.content.Intent import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.util.Log +import android.view.View +import com.example.gmalpha_flutter.flutter.PageRouter +import com.taobao.idlefish.flutterboost.FlutterBoostPlugin +import com.taobao.idlefish.flutterboost.containers.BoostFlutterActivity import io.flutter.app.FlutterActivity +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.PluginRegistry import io.flutter.plugins.GeneratedPluginRegistrant +import java.lang.ref.WeakReference -class MainActivity: FlutterActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - GeneratedPluginRegistrant.registerWith(this) - } +class MainActivity : AppCompatActivity() { + +// override fun getContainerParams(): MutableMap<Any?, Any?>? { +// return null; +//// TODO("not implemented") //To change body of created functions use File | Settings | File Templates. +// } +// +// override fun onRegisterPlugins(registry: PluginRegistry?) { +// GeneratedPluginRegistrant.registerWith(registry) +//// TODO("not implemented") //To change body of created functions use File | Settings | File Templates. +// } +// +// override fun getContainerName(): String? { +// return "init"; +//// TODO("not implemented") //To change body of created functions use File | Settings | File Templates. +// } + + override fun onCreate(savedInstanceState: Bundle?) { + sRef = WeakReference(this) + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) +// FlutterBoostPlugin.containerManager().onContainerCreate(this) +// GeneratedPluginRegistrant.registerWith(this) +// val methodChannel = MethodChannel(flutterView, "gengmei_flutter_native_channel") +// methodChannel.setMethodCallHandler(object : MethodChannel.MethodCallHandler { +// override fun onMethodCall(p0: MethodCall, p1: MethodChannel.Result) { +// if (p0.method.equals("get_native_data")) { +// Log.e("lsy", "ARGS ${p0.arguments}") +// p1.success("!!!") +// } +// } +// }) + + findViewById<View>(R.id.hello).setOnClickListener { + val intent = Intent() + intent.putExtra("name","prestige") + PageRouter.openPageByUrl(this, PageRouter.FLUTTER_PAGE_URL, intent) + startActivity(intent) + + } + } + + + override fun onDestroy() { + super.onDestroy() + if (sRef != null) { + sRef!!.clear() + sRef = null + } + } + + companion object{ + var sRef: WeakReference<MainActivity>? = null + } } diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/PageRouter.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/PageRouter.java new file mode 100644 index 0000000000000000000000000000000000000000..b7d9fdc952d026f83a2f55053a232cc9869b78fa --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/PageRouter.java @@ -0,0 +1,50 @@ +package com.example.gmalpha_flutter.flutter; + +import android.content.Context; +import android.content.Intent; + +import com.example.gmalpha_flutter.flutter.base.FlutterFragmentPageActivity; +import com.example.gmalpha_flutter.flutter.base.FlutterPageActivity; +import com.example.gmalpha_flutter.flutter.base.NativePageActivity; + + +public class PageRouter { + + public static final String NATIVE_PAGE_URL = "gmlike://nativePage"; + public static final String FLUTTER_PAGE_URL = "gmlike://flutterPage"; + public static final String FLUTTER_FRAGMENT_PAGE_URL = "gmlike://flutterFragmentPage"; + + public static boolean openPageByUrl(Context context, String url) { + return openPageByUrl(context, url, 0); + } + public static boolean openPageByUrl(Context context, String url,Intent intent) { + return openPageByUrl(context, url, 0,intent); + } + + public static boolean openPageByUrl(Context context, String url, int requestCode,Intent intent) { + if (url.startsWith(FLUTTER_PAGE_URL)) { + intent.setClass(context, FlutterPageActivity.class); + context.startActivity(intent); + return true; + } + return false; + } + public static boolean openPageByUrl(Context context, String url, int requestCode) { + try { + if (url.startsWith(FLUTTER_PAGE_URL)) { + context.startActivity(new Intent(context, FlutterPageActivity.class)); + return true; + } else if (url.startsWith(FLUTTER_FRAGMENT_PAGE_URL)) { + context.startActivity(new Intent(context, FlutterFragmentPageActivity.class)); + return true; + } else if (url.startsWith(NATIVE_PAGE_URL)) { + context.startActivity(new Intent(context, NativePageActivity.class)); + return true; + } else { + return false; + } + } catch (Throwable t) { + return false; + } + } +} diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragment.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..9a708e60cbaf4160ea9de9b852fdad8a2917665b --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragment.java @@ -0,0 +1,58 @@ +package com.example.gmalpha_flutter.flutter.base; + +import android.os.Bundle; +import android.support.annotation.Nullable; + +import com.taobao.idlefish.flutterboost.containers.BoostFlutterFragment; + +import java.util.HashMap; +import java.util.Map; + +import io.flutter.plugin.common.PluginRegistry; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class FlutterFragment extends BoostFlutterFragment { + + @Override + public void setArguments(@Nullable Bundle args) { + if(args == null) { + args = new Bundle(); + args.putString("tag",""); + } + super.setArguments(args); + } + + public void setTabTag(String tag) { + Bundle args = new Bundle(); + args.putString("tag",tag); + super.setArguments(args); + } + + @Override + public void onRegisterPlugins(PluginRegistry registry) { + GeneratedPluginRegistrant.registerWith(registry); + } + + @Override + public String getContainerName() { + return "flutterFragment"; + } + + @Override + public Map getContainerParams() { + Map<String,String> params = new HashMap<>(); + params.put("tag",getArguments().getString("tag")); + return params; + } + + @Override + public void destroyContainer() { + + } + + public static FlutterFragment instance(String tag){ + FlutterFragment fragment = new FlutterFragment(); + fragment.setTabTag(tag); + return fragment; + } +} diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragmentPageActivity.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragmentPageActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..e3842fbfd16bf4e3b80c8e07d44e259e8d215a02 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterFragmentPageActivity.java @@ -0,0 +1,46 @@ +package com.example.gmalpha_flutter.flutter.base; + +import android.os.Build; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.Window; +import android.view.WindowManager; + + +import com.example.gmalpha_flutter.R; + +import org.jetbrains.annotations.Nullable; + +import io.flutter.plugin.platform.PlatformPlugin; + +public class FlutterFragmentPageActivity extends AppCompatActivity { + + private FlutterFragment mFragment; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + supportRequestWindowFeature(Window.FEATURE_NO_TITLE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(0x40000000); + window.getDecorView().setSystemUiVisibility(PlatformPlugin.DEFAULT_SYSTEM_UI); + } + super.onCreate(savedInstanceState); + + final ActionBar actionBar = getSupportActionBar(); + if(actionBar != null) { + actionBar.hide(); + } + + setContentView(R.layout.flutter_fragment_page); + + mFragment = FlutterFragment.instance("hello"); + + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragment_stub,mFragment) + .commit(); + } +} diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterPageActivity.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterPageActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..10dda93cd974c2cf371b65df521978599b2a461a --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/FlutterPageActivity.java @@ -0,0 +1,177 @@ +package com.example.gmalpha_flutter.flutter.base; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.content.ContextCompat; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import com.example.gmalpha_flutter.R; +import com.example.gmalpha_flutter.util.OSUtils; +import com.example.gmalpha_flutter.util.StatusBarUtil; +import com.taobao.idlefish.flutterboost.containers.BoostFlutterActivity; + +import java.util.HashMap; +import java.util.Map; + +import io.flutter.Log; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.PluginRegistry; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class FlutterPageActivity extends BoostFlutterActivity { + + String name; + + @Override + public void onRegisterPlugins(PluginRegistry registry) { + GeneratedPluginRegistrant.registerWith(registry); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + name = getIntent().getStringExtra("name"); + setStatusBar(); + if (OSUtils.isMiui()) { + setStatus(); + } + new MethodChannel(getFlutterView(), "flutter_bury_channel").setMethodCallHandler((call, result) -> { + if (call.method.equals("FLUTTER_BURIED")) { + Map<String, Object> map = new HashMap<>(); + map.put("ww", "ww"); + map.put("qq", 1); + result.success(map); + } + }); +// new MethodChannel(getFlutterView(), "flutter_bury_channel").setMethodCallHandler( +// (call, result) -> { +// Map<String, String> arguments = (Map<String, String>) call.arguments; +// if (call.method.equals("PAGE_START")) { +// String pageName = arguments.get("page_name"); +// String refererName = arguments.get("referrer"); +// } else if (call.method.equals("PAGE_END")) { +// Log.e("lsy"," PAGE_END"); +// String pageName = arguments.get("page_name"); +// String refererName = arguments.get("referrer"); +// } else if (call.method.equals("CLICK_EVENT")) { +// Log.e("lsy"," CLICK_EVENT"); +// +// String pageName = arguments.get("page_name"); +// String buttonName = arguments.get("button_name"); +// }else if(call.method.equals("FLUTTER_TO_H5")){ +// Log.e("lsy"," FLUTTER_TO_H5"); +//// String page_name = arguments.get("page_name"); +//// Intent intent=new Intent(this, TempAct.class); +//// startActivity(intent); +// //TODO +// }else if(call.method.equals("FLUTTER_TO_SEARCH")){ +//// Intent intent=new Intent(this, TempAct.class); +//// startActivity(intent); +// } +// else { +// result.notImplemented(); +// } +// }); + } + + public void setStatusBar() { + if (isImageViewStatusBar()) { + //è®¾ç½®çŠ¶æ€æ 逿˜Ž 为头部是 ImageView 的界é¢è®¾ç½®çŠ¶æ€æ 免逿˜Ž + StatusBarUtil.transparencyBar(this); + } else { + //è®¾ç½®çŠ¶æ€æ 纯色 ä¸åŠ åŠé€æ˜Žæ•ˆæžœ 普通界é¢è®¾ç½®çŠ¶æ€æ 纯白色 + StatusBarUtil.setColorNoTranslucent(this, ContextCompat.getColor(this, R.color.FFAA)); + } + //è®¾ç½®çŠ¶æ€æ 黑色å—ä½“å›¾æ ‡ï¼Œé€‚é…4.4以上版本MIUIVã€Flymeå’Œ6.0以上版本其他Android + StatusBarUtil.StatusBarLightMode(this, true, !isImageViewStatusBar()); + //éžå°ç±³ï¼Œéžé…æ—并且是5.0ç‰ˆæœ¬çš„é€‚é… + if (!StatusBarUtil.MIUISetStatusBarLightMode(getWindow(), true) && !StatusBarUtil.FlymeSetStatusBarLightMode(getWindow(), true) && (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1)) { + //è®¾ç½®çŠ¶æ€æ 纯色 ä¸åŠ åŠé€æ˜Žæ•ˆæžœ 普通界é¢è®¾ç½®çŠ¶æ€æ ç°è‰² + StatusBarUtil.setColorNoTranslucent(this, ContextCompat.getColor(this, R.color.FFAA), true); + } + } + + /** + * 设置MIUIçŠ¶æ€æ + */ + private void setStatus() { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + /** + * æ˜¯å¦æ˜¯å¤´éƒ¨æ˜¯ ImageView 的界é¢è®¾ç½®çŠ¶æ€æ + * + * @return + */ + public boolean isImageViewStatusBar() { + return false; + } + + /** + * 是å¦éœ€è¦è®¾ç½®StatusBar + */ + public boolean isSetUpStatusBar() { + return true; + } + + /** + * 该方法返回当å‰Activity在Flutter层对应的name, + * æ··åˆæ ˆå°†ä¼šåœ¨flutterå±‚æ ¹æ®è¿™ä¸ªåå—,在注册的Routeè¡¨ä¸æŸ¥æ‰¾å¯¹åº”çš„Widget + * <p> + * 在flutter层有注册函数: + * FlutterBoost.singleton.registerPageBuilders({ + * 'first': (pageName, params, _) => FirstRouteWidget(), + * 'second': (pageName, params, _) => SecondRouteWidget(), + * ... + * }); + * <p> + * 该方法ä¸è¿”回的就是注册的key:first , second + * + * @return + */ + @Override + public String getContainerName() { + return name; + } + + /** + * è¯¥æ–¹æ³•è¿”å›žçš„å‚æ•°å°†ä¼šä¼ 递给上层的flutter对应的Widget + * <p> + * 在flutter层有注册函数: + * FlutterBoost.singleton.registerPageBuilders({ + * 'first': (pageName, params, _) => FirstRouteWidget(), + * 'second': (pageName, params, _) => SecondRouteWidget(), + * ... + * }); + * <p> + * è¯¥æ–¹æ³•è¿”å›žçš„å‚æ•°å°±ä¼šå°è£…æˆä¸Šé¢çš„params + * + * @return + */ + @Override + public Map getContainerParams() { + + Map<String, Object> map = new HashMap<>(); +// map.put("cookie", "sessionid=9odo0sov71x66ke9dlphibnq9i9gduxj; _gtid=3fbe9b78d2cb11e98bc1525400e82fab5270; _gm_token=db88861568285036"); + map.put("cookie", "sessionid=i72bq75swus6okvk0k6aihbkb5s7g0hv; _gtid=51efc540de9411e9ac1f525400e82fab3414; _gm_token=1dd15b1569307596"); + map.put("userId", "12345"); + map.put("userName", "TTTTTTTTTT"); + map.put("buildConfig", "debug"); + + map.put("fromPage", "fromm"); + map.put("survey_record_id", "2"); + map.put("template_id", "1"); + + map.put("needCamera", "0"); + map.put("maxCount", "2"); + + + return map; + } +} diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/NativePageActivity.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/NativePageActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..bb6c1a065e53a8af58ccddd2d8f6c488957fd1d4 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/flutter/base/NativePageActivity.java @@ -0,0 +1,44 @@ +package com.example.gmalpha_flutter.flutter.base; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.TextView; + +import com.example.gmalpha_flutter.R; +import com.example.gmalpha_flutter.flutter.PageRouter; + + +public class NativePageActivity extends AppCompatActivity implements View.OnClickListener { + + private TextView mOpenNative; + private TextView mOpenFlutter; + private TextView mOpenFlutterFragment; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.native_page); + + mOpenNative = findViewById(R.id.open_native); + mOpenFlutter = findViewById(R.id.open_flutter); + mOpenFlutterFragment = findViewById(R.id.open_flutter_fragment); + + mOpenNative.setOnClickListener(this); + mOpenFlutter.setOnClickListener(this); + mOpenFlutterFragment.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + if (v == mOpenNative) { + PageRouter.openPageByUrl(this, PageRouter.NATIVE_PAGE_URL); + } else if (v == mOpenFlutter) { + PageRouter.openPageByUrl(this, PageRouter.FLUTTER_PAGE_URL); + } else if (v == mOpenFlutterFragment) { + PageRouter.openPageByUrl(this, PageRouter.FLUTTER_FRAGMENT_PAGE_URL); + } + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/OSUtils.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/OSUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..8e8b803852a7673c4831a344cccb22b8cb30f049 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/OSUtils.java @@ -0,0 +1,122 @@ +package com.example.gmalpha_flutter.util; + +import android.os.Build; +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author apple + * @date 2019-09-19 + */ +public class OSUtils { + public static final String ROM_MIUI = "MIUI"; + public static final String ROM_EMUI = "EMUI"; + public static final String ROM_FLYME = "FLYME"; + public static final String ROM_OPPO = "OPPO"; + public static final String ROM_SMARTISAN = "SMARTISAN"; + public static final String ROM_VIVO = "VIVO"; + public static final String ROM_QIKU = "QIKU"; + + private static final String KEY_VERSION_MIUI = "ro.miui.ui.version.name"; + private static final String KEY_VERSION_EMUI = "ro.build.version.emui"; + private static final String KEY_VERSION_OPPO = "ro.build.version.opporom"; + private static final String KEY_VERSION_SMARTISAN = "ro.smartisan.version"; + private static final String KEY_VERSION_VIVO = "ro.vivo.os.version"; + + private static String sName; + private static String sVersion; + + public static boolean isEmui() { + return check(ROM_EMUI); + } + + public static boolean isMiui() { + return check(ROM_MIUI); + } + + public static boolean isVivo() { + return check(ROM_VIVO); + } + + public static boolean isOppo() { + return check(ROM_OPPO); + } + + public static boolean isFlyme() { + return check(ROM_FLYME); + } + + public static boolean is360() { + return check(ROM_QIKU) || check("360"); + } + + public static boolean isSmartisan() { + return check(ROM_SMARTISAN); + } + + public static String getName() { + if (sName == null) { + check(""); + } + return sName; + } + + public static String getVersion() { + if (sVersion == null) { + check(""); + } + return sVersion; + } + + public static boolean check(String rom) { + if (sName != null) { + return sName.equals(rom); + } + + if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_MIUI))) { + sName = ROM_MIUI; + } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_EMUI))) { + sName = ROM_EMUI; + } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_OPPO))) { + sName = ROM_OPPO; + } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_VIVO))) { + sName = ROM_VIVO; + } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_SMARTISAN))) { + sName = ROM_SMARTISAN; + } else { + sVersion = Build.DISPLAY; + if (sVersion.toUpperCase().contains(ROM_FLYME)) { + sName = ROM_FLYME; + } else { + sVersion = Build.UNKNOWN; + sName = Build.MANUFACTURER.toUpperCase(); + } + } + return sName.equals(rom); + } + + public static String getProp(String name) { + String line = null; + BufferedReader input = null; + try { + Process p = Runtime.getRuntime().exec("getprop " + name); + input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024); + line = input.readLine(); + input.close(); + } catch (IOException ex) { + return null; + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return line; + } +} diff --git a/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/StatusBarUtil.java b/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/StatusBarUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..aae82e40519cc911f2506b29db1964617f74735b --- /dev/null +++ b/android/app/src/main/kotlin/com/example/gmalpha_flutter/util/StatusBarUtil.java @@ -0,0 +1,867 @@ +package com.example.gmalpha_flutter.util; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.os.Build; +import android.support.annotation.ColorInt; +import android.support.annotation.IntRange; +import android.support.v4.content.ContextCompat; +import android.support.v4.widget.DrawerLayout; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * @author apple + * @date 2019-09-19 + */ +public class StatusBarUtil { + public static final int DEFAULT_STATUS_BAR_ALPHA = 112; + private static final int FAKE_STATUS_BAR_VIEW_ID = Resources.getSystem().getIdentifier("statusbarutil_fake_status_bar_view", "id", "android"); + private static final int FAKE_TRANSLUCENT_VIEW_ID = Resources.getSystem().getIdentifier("statusbarutil_translucent_view", "id", "android"); + private static final int TAG_KEY_HAVE_SET_OFFSET = -123; + + /** + * ä¿®æ”¹çŠ¶æ€æ ä¸ºå…¨é€æ˜Ž + * + * @param activity + */ + public static void transparencyBar(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = activity.getWindow(); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + Window window = activity.getWindow(); + window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, + WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + setRootView(activity, false); + } + + /** + * è®¾ç½®çŠ¶æ€æ 黑色å—ä½“å›¾æ ‡ï¼Œ + * 适é…4.4以上版本MIUIVã€Flymeå’Œ6.0以上版本其他Android + * + * @param activity + * @param dark æ˜¯å¦æŠŠçŠ¶æ€æ å—体åŠå›¾æ ‡é¢œè‰²è®¾ç½®ä¸ºæ·±è‰² + * @return 1:MIUUI 2:Flyme 3:android6.0 + */ + public static int StatusBarLightMode(Activity activity, boolean dark, boolean fitsSystemWindows) { + int result = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (MIUISetStatusBarLightMode(activity.getWindow(), dark)) { + result = 1; + } else if (FlymeSetStatusBarLightMode(activity.getWindow(), dark)) { + result = 2; + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + result = 3; + } + } + setRootView(activity, fitsSystemWindows); + return result; + } + + /** + * è®¾ç½®çŠ¶æ€æ å›¾æ ‡ä¸ºæ·±è‰²å’Œé…æ—特定的文å—é£Žæ ¼ + * å¯ä»¥ç”¨æ¥åˆ¤æ–是å¦ä¸ºFlyme用户 + * + * @param window 需è¦è®¾ç½®çš„çª—å£ + * @param dark æ˜¯å¦æŠŠçŠ¶æ€æ å—体åŠå›¾æ ‡é¢œè‰²è®¾ç½®ä¸ºæ·±è‰² + * @return boolean æˆåŠŸæ‰§è¡Œè¿”å›žtrue + */ + public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) { + boolean result = false; + if (window != null) { + try { + WindowManager.LayoutParams lp = window.getAttributes(); + Field darkFlag = WindowManager.LayoutParams.class + .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON"); + Field meizuFlags = WindowManager.LayoutParams.class + .getDeclaredField("meizuFlags"); + darkFlag.setAccessible(true); + meizuFlags.setAccessible(true); + int bit = darkFlag.getInt(null); + int value = meizuFlags.getInt(lp); + if (dark) { + value |= bit; + } else { + value &= ~bit; + } + meizuFlags.setInt(lp, value); + window.setAttributes(lp); + result = true; + } catch (Exception e) { + + } + } + return result; + } + + /** + * è®¾ç½®çŠ¶æ€æ å—ä½“å›¾æ ‡ä¸ºæ·±è‰²ï¼Œéœ€è¦MIUIV6以上 + * + * @param window 需è¦è®¾ç½®çš„çª—å£ + * @param dark æ˜¯å¦æŠŠçŠ¶æ€æ å—体åŠå›¾æ ‡é¢œè‰²è®¾ç½®ä¸ºæ·±è‰² + * @return boolean æˆåŠŸæ‰§è¡Œè¿”å›žtrue + */ + public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) { + boolean result = false; + if (window != null) { + Class clazz = window.getClass(); + try { + int darkModeFlag = 0; + Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); + Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); + darkModeFlag = field.getInt(layoutParams); + Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); + if (dark) { + extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//çŠ¶æ€æ 逿˜Žä¸”黑色å—体 + } else { + extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色å—体 + } + result = true; + } catch (Exception e) { + + } + } + return result; + } + + /** + * å·²çŸ¥ç³»ç»Ÿç±»åž‹æ—¶ï¼Œè®¾ç½®çŠ¶æ€æ 黑色å—ä½“å›¾æ ‡ã€‚ + * 适é…4.4以上版本MIUIVã€Flymeå’Œ6.0以上版本其他Android + * + * @param activity + * @param type 1:MIUUI 2:Flyme 3:android6.0 + */ + public static void StatusBarLightMode(Activity activity, int type) { + if (type == 1) { + MIUISetStatusBarLightMode(activity.getWindow(), true); + } else if (type == 2) { + FlymeSetStatusBarLightMode(activity.getWindow(), true); + } else if (type == 3) { + activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + } + + /** + * 清除MIUI或flyme或6.0ä»¥ä¸Šç‰ˆæœ¬çŠ¶æ€æ 黑色å—体,å³ç™½è‰²å—体 + */ + public static void StatusBarDarkMode(Activity activity, int type) { + if (type == 1) { + MIUISetStatusBarLightMode(activity.getWindow(), false); + } else if (type == 2) { + FlymeSetStatusBarLightMode(activity.getWindow(), false); + } else if (type == 3) { + activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } + + } + + /** + * è®¾ç½®çŠ¶æ€æ 颜色 + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param color çŠ¶æ€æ 颜色值 + */ + public static void setColor(Activity activity, @ColorInt int color) { + setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA, false); + } + + /** + * è®¾ç½®çŠ¶æ€æ 颜色 + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param color çŠ¶æ€æ 颜色值 + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + */ + + public static void setColor(Activity activity, @ColorInt int color, @IntRange(from = 0, to = 255) int statusBarAlpha, boolean fitsSystemWindows) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha)); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + if (fakeStatusBarView.getVisibility() == View.GONE) { + fakeStatusBarView.setVisibility(View.VISIBLE); + } + fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha)); + } else { + decorView.addView(createStatusBarView(activity, color, statusBarAlpha)); + } + setRootView(activity, fitsSystemWindows); + } + } + + @SuppressLint("ResourceType") + public static void setColor(Activity activity) { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); +// activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); +// activity.getWindow().setStatusBarColor(calculateStatusColor(ContextCompat.getColor(mContext, R.color.transparent), 0)); +// } else + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + if (fakeStatusBarView.getVisibility() == View.GONE) { + fakeStatusBarView.setVisibility(View.VISIBLE); + } + fakeStatusBarView.setBackgroundColor(calculateStatusColor(ContextCompat.getColor(activity, Color.parseColor("#00000000")), 0)); + } else { + decorView.addView(createStatusBarView(activity, ContextCompat.getColor(activity, Color.parseColor("#00000000")), 0)); + } + } + } + + /** + * 为滑动返回界é¢è®¾ç½®çŠ¶æ€æ 颜色 + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param color çŠ¶æ€æ 颜色值 + */ +// public static void setColorForSwipeBack(Activity activity, int color) { +// setColorForSwipeBack(activity, color, DEFAULT_STATUS_BAR_ALPHA); +// } +// +// /** +// * 为滑动返回界é¢è®¾ç½®çŠ¶æ€æ 颜色 +// * +// * @param activity 需è¦è®¾ç½®çš„activity +// * @param color çŠ¶æ€æ 颜色值 +// * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ +// */ +// public static void setColorForSwipeBack(Activity activity, @ColorInt int color, +// @IntRange(from = 0, to = 255) int statusBarAlpha) { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { +// +// ViewGroup contentView = ((ViewGroup) activity.findViewById(android.R.id.content)); +// View rootView = contentView.getChildAt(0); +// int statusBarHeight = getStatusBarHeight(activity); +// if (rootView != null && rootView instanceof CoordinatorLayout) { +// final CoordinatorLayout coordinatorLayout = (CoordinatorLayout) rootView; +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { +// coordinatorLayout.setFitsSystemWindows(false); +// contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha)); +// boolean isNeedRequestLayout = contentView.getPaddingTop() < statusBarHeight; +// if (isNeedRequestLayout) { +// contentView.setPadding(0, statusBarHeight, 0, 0); +// coordinatorLayout.post(new Runnable() { +// @Override +// public void run() { +// coordinatorLayout.requestLayout(); +// } +// }); +// } +// } else { +// coordinatorLayout.setStatusBarBackgroundColor(calculateStatusColor(color, statusBarAlpha)); +// } +// } else { +// contentView.setPadding(0, statusBarHeight, 0, 0); +// contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha)); +// } +// setTransparentForWindow(activity); +// } +// } + + /** + * è®¾ç½®çŠ¶æ€æ 纯色 ä¸åŠ åŠé€æ˜Žæ•ˆæžœ + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param color çŠ¶æ€æ 颜色值 + */ + public static void setColorNoTranslucent(Activity activity, @ColorInt int color) { + setColor(activity, color, 0, false); + } + + /** + * è®¾ç½®çŠ¶æ€æ 纯色 ä¸åŠ åŠé€æ˜Žæ•ˆæžœ + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param color çŠ¶æ€æ 颜色值 + */ + public static void setColorNoTranslucent(Activity activity, @ColorInt int color, boolean fitsSystemWindows) { + setColor(activity, color, 0, fitsSystemWindows); + } + + /** + * è®¾ç½®çŠ¶æ€æ 纯色 ä¸åŠ åŠé€æ˜Žæ•ˆæžœ + * + * @param activity 需è¦è®¾ç½®çš„ activity + */ + public static void setTransparentColor(Activity activity) { + setColor(activity); + } + + /** + * è®¾ç½®çŠ¶æ€æ 颜色(5.0ä»¥ä¸‹æ— åŠé€æ˜Žæ•ˆæžœ,ä¸å»ºè®®ä½¿ç”¨) + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param color çŠ¶æ€æ 颜色值 + */ + @Deprecated + public static void setColorDiff(Activity activity, @ColorInt int color) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + transparentStatusBar(activity); + ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); + // 移除åŠé€æ˜ŽçŸ©å½¢,以å…å åŠ + View fakeStatusBarView = contentView.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + if (fakeStatusBarView.getVisibility() == View.GONE) { + fakeStatusBarView.setVisibility(View.VISIBLE); + } + fakeStatusBarView.setBackgroundColor(color); + } else { + contentView.addView(createStatusBarView(activity, color)); + } + setRootView(activity); + } + + /** + * ä½¿çŠ¶æ€æ åŠé€æ˜Ž + * <p> + * 适用于图片作为背景的界é¢,æ¤æ—¶éœ€è¦å›¾ç‰‡å¡«å……åˆ°çŠ¶æ€æ + * + * @param activity 需è¦è®¾ç½®çš„activity + */ + public static void setTranslucent(Activity activity) { + setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * ä½¿çŠ¶æ€æ åŠé€æ˜Ž + * <p> + * 适用于图片作为背景的界é¢,æ¤æ—¶éœ€è¦å›¾ç‰‡å¡«å……åˆ°çŠ¶æ€æ + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + */ + public static void setTranslucent(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + setTransparent(activity); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * é’ˆå¯¹æ ¹å¸ƒå±€æ˜¯ CoordinatorLayout, ä½¿çŠ¶æ€æ åŠé€æ˜Ž + * <p> + * 适用于图片作为背景的界é¢,æ¤æ—¶éœ€è¦å›¾ç‰‡å¡«å……åˆ°çŠ¶æ€æ + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + */ + public static void setTranslucentForCoordinatorLayout(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + transparentStatusBar(activity); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * è®¾ç½®çŠ¶æ€æ 免逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + */ + public static void setTransparent(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + transparentStatusBar(activity); + setRootView(activity); + } + + /** + * ä½¿çŠ¶æ€æ 逿˜Ž(5.0以上åŠé€æ˜Žæ•ˆæžœ,ä¸å»ºè®®ä½¿ç”¨) + * <p> + * 适用于图片作为背景的界é¢,æ¤æ—¶éœ€è¦å›¾ç‰‡å¡«å……åˆ°çŠ¶æ€æ + * + * @param activity 需è¦è®¾ç½®çš„activity + */ + @Deprecated + public static void setTranslucentDiff(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // è®¾ç½®çŠ¶æ€æ 逿˜Ž + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + setRootView(activity); + } + } + + /** + * 为DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ å˜è‰² + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + * @param color çŠ¶æ€æ 颜色值 + */ + public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) { + setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 为DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ 颜色,纯色 + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + * @param color çŠ¶æ€æ 颜色值 + */ + public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) { + setColorForDrawerLayout(activity, drawerLayout, color, 0); + } + + /** + * 为DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ å˜è‰² + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + * @param color çŠ¶æ€æ 颜色值 + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + */ + public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color, + @IntRange(from = 0, to = 255) int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + // 生æˆä¸€ä¸ªçŠ¶æ€æ 大å°çš„矩形 + // æ·»åŠ statusBarView åˆ°å¸ƒå±€ä¸ + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + if (fakeStatusBarView.getVisibility() == View.GONE) { + fakeStatusBarView.setVisibility(View.VISIBLE); + } + fakeStatusBarView.setBackgroundColor(color); + } else { + contentLayout.addView(createStatusBarView(activity, color), 0); + } + // å†…å®¹å¸ƒå±€ä¸æ˜¯ LinearLayout æ—¶,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1) + .setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(), + contentLayout.getPaddingRight(), contentLayout.getPaddingBottom()); + } + // 设置属性 + setDrawerLayoutProperty(drawerLayout, contentLayout); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * 设置 DrawerLayout 属性 + * + * @param drawerLayout DrawerLayout + * @param drawerLayoutContentLayout DrawerLayout 的内容布局 + */ + private static void setDrawerLayoutProperty(DrawerLayout drawerLayout, ViewGroup drawerLayoutContentLayout) { + ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1); + drawerLayout.setFitsSystemWindows(false); + drawerLayoutContentLayout.setFitsSystemWindows(false); + drawerLayoutContentLayout.setClipToPadding(true); + drawer.setFitsSystemWindows(false); + } + + /** + * 为DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ å˜è‰²(5.0ä»¥ä¸‹æ— åŠé€æ˜Žæ•ˆæžœ,ä¸å»ºè®®ä½¿ç”¨) + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + * @param color çŠ¶æ€æ 颜色值 + */ + @Deprecated + public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 生æˆä¸€ä¸ªçŠ¶æ€æ 大å°çš„矩形 + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + if (fakeStatusBarView.getVisibility() == View.GONE) { + fakeStatusBarView.setVisibility(View.VISIBLE); + } + fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA)); + } else { + // æ·»åŠ statusBarView åˆ°å¸ƒå±€ä¸ + contentLayout.addView(createStatusBarView(activity, color), 0); + } + // å†…å®¹å¸ƒå±€ä¸æ˜¯ LinearLayout æ—¶,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0); + } + // 设置属性 + setDrawerLayoutProperty(drawerLayout, contentLayout); + } + } + + /** + * 为 DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + */ + public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) { + setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 为 DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + */ + public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, + @IntRange(from = 0, to = 255) int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + setTransparentForDrawerLayout(activity, drawerLayout); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * 为 DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + */ + public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + // å†…å®¹å¸ƒå±€ä¸æ˜¯ LinearLayout æ—¶,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0); + } + + // 设置属性 + setDrawerLayoutProperty(drawerLayout, contentLayout); + } + + /** + * 为 DrawerLayout å¸ƒå±€è®¾ç½®çŠ¶æ€æ 逿˜Ž(5.0以上åŠé€æ˜Žæ•ˆæžœ,ä¸å»ºè®®ä½¿ç”¨) + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param drawerLayout DrawerLayout + */ + @Deprecated + public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // è®¾ç½®çŠ¶æ€æ 逿˜Ž + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 设置内容布局属性 + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + contentLayout.setFitsSystemWindows(true); + contentLayout.setClipToPadding(true); + // 设置抽屉布局属性 + ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1); + vg.setFitsSystemWindows(false); + // 设置 DrawerLayout 属性 + drawerLayout.setFitsSystemWindows(false); + } + } + + /** + * 为头部是 ImageView 的界é¢è®¾ç½®çŠ¶æ€æ 免逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTransparentForImageView(Activity activity, View needOffsetView) { + setTranslucentForImageView(activity, 0, needOffsetView); + } + + /** + * 为头部是 ImageView 的界é¢è®¾ç½®çŠ¶æ€æ 逿˜Ž(ä½¿ç”¨é»˜è®¤é€æ˜Žåº¦) + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTranslucentForImageView(Activity activity, View needOffsetView) { + setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView); + } + + /** + * 为头部是 ImageView 的界é¢è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTranslucentForImageView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha, + View needOffsetView) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + setTransparentForWindow(activity); + addTranslucentView(activity, statusBarAlpha); + if (needOffsetView != null) { + Object haveSetOffset = needOffsetView.getTag(TAG_KEY_HAVE_SET_OFFSET); + if (haveSetOffset != null && (Boolean) haveSetOffset) { + return; + } + ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams(); + layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin + getStatusBarHeight(activity), + layoutParams.rightMargin, layoutParams.bottomMargin); + needOffsetView.setTag(TAG_KEY_HAVE_SET_OFFSET, true); + } + } + + /** + * 为 fragment 头部是 ImageView çš„è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity fragment 对应的 activity + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) { + setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView); + } + + /** + * 为 fragment 头部是 ImageView çš„è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity fragment 对应的 activity + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) { + setTranslucentForImageViewInFragment(activity, 0, needOffsetView); + } + + /** + * 为 fragment 头部是 ImageView çš„è®¾ç½®çŠ¶æ€æ 逿˜Ž + * + * @param activity fragment 对应的 activity + * @param statusBarAlpha çŠ¶æ€æ 逿˜Žåº¦ + * @param needOffsetView 需è¦å‘下å移的 View + */ + public static void setTranslucentForImageViewInFragment(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha, + View needOffsetView) { + setTranslucentForImageView(activity, statusBarAlpha, needOffsetView); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + clearPreviousSetting(activity); + } + } + + /** + * éšè—ä¼ªçŠ¶æ€æ View + * + * @param activity 调用的 Activity + */ + public static void hideFakeStatusBarView(Activity activity) { + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + fakeStatusBarView.setVisibility(View.GONE); + } + View fakeTranslucentView = decorView.findViewById(FAKE_TRANSLUCENT_VIEW_ID); + if (fakeTranslucentView != null) { + fakeTranslucentView.setVisibility(View.GONE); + } + } + + /////////////////////////////////////////////////////////////////////////////////// + + @TargetApi(Build.VERSION_CODES.KITKAT) + private static void clearPreviousSetting(Activity activity) { + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID); + if (fakeStatusBarView != null) { + decorView.removeView(fakeStatusBarView); + ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); + rootView.setPadding(0, 0, 0, 0); + } + } + + /** + * æ·»åŠ åŠé€æ˜ŽçŸ©å½¢æ¡ + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param statusBarAlpha 逿˜Žå€¼ + */ + private static void addTranslucentView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) { + ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); + View fakeTranslucentView = contentView.findViewById(FAKE_TRANSLUCENT_VIEW_ID); + if (fakeTranslucentView != null) { + if (fakeTranslucentView.getVisibility() == View.GONE) { + fakeTranslucentView.setVisibility(View.VISIBLE); + } + fakeTranslucentView.setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0)); + } else { + contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha)); + } + } + + /** + * 生æˆä¸€ä¸ªå’ŒçŠ¶æ€æ 大å°ç›¸åŒçš„å½©è‰²çŸ©å½¢æ¡ + * + * @param activity 需è¦è®¾ç½®çš„ activity + * @param color çŠ¶æ€æ 颜色值 + * @return çŠ¶æ€æ çŸ©å½¢æ¡ + */ + private static View createStatusBarView(Activity activity, @ColorInt int color) { + return createStatusBarView(activity, color, 0); + } + + /** + * 生æˆä¸€ä¸ªå’ŒçŠ¶æ€æ 大å°ç›¸åŒçš„åŠé€æ˜ŽçŸ©å½¢æ¡ + * + * @param activity 需è¦è®¾ç½®çš„activity + * @param color çŠ¶æ€æ 颜色值 + * @param alpha 逿˜Žå€¼ + * @return çŠ¶æ€æ çŸ©å½¢æ¡ + */ + private static View createStatusBarView(Activity activity, @ColorInt int color, int alpha) { + // ç»˜åˆ¶ä¸€ä¸ªå’ŒçŠ¶æ€æ ä¸€æ ·é«˜çš„çŸ©å½¢ + View statusBarView = new View(activity); + LinearLayout.LayoutParams params = + new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); + statusBarView.setLayoutParams(params); + statusBarView.setBackgroundColor(calculateStatusColor(color, alpha)); + statusBarView.setId(FAKE_STATUS_BAR_VIEW_ID); + return statusBarView; + } + + /** + * è®¾ç½®æ ¹å¸ƒå±€å‚æ•° + */ + private static void setRootView(Activity activity) { + ViewGroup parent = (ViewGroup) activity.findViewById(android.R.id.content); + for (int i = 0, count = parent.getChildCount(); i < count; i++) { + View childView = parent.getChildAt(i); + if (childView instanceof ViewGroup) { + childView.setFitsSystemWindows(false); + ((ViewGroup) childView).setClipToPadding(false); + } + } + } + + /** + * è®¾ç½®æ ¹å¸ƒå±€å‚æ•° + */ + private static void setRootView(Activity activity, boolean fitsSystemWindows) { + ViewGroup parent = (ViewGroup) activity.findViewById(android.R.id.content); + for (int i = 0, count = parent.getChildCount(); i < count; i++) { + View childView = parent.getChildAt(i); + if (childView instanceof ViewGroup) { + childView.setFitsSystemWindows(fitsSystemWindows); + ((ViewGroup) childView).setClipToPadding(fitsSystemWindows); + } + } + } + + /** + * è®¾ç½®é€æ˜Ž + */ + private static void setTransparentForWindow(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + activity.getWindow() + .getDecorView() + .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow() + .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + } + + /** + * ä½¿çŠ¶æ€æ 逿˜Ž + */ + @TargetApi(Build.VERSION_CODES.KITKAT) + private static void transparentStatusBar(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + } + + /** + * 创建åŠé€æ˜ŽçŸ©å½¢ View + * + * @param alpha 逿˜Žå€¼ + * @return åŠé€æ˜Ž View + */ + private static View createTranslucentStatusBarView(Activity activity, int alpha) { + // ç»˜åˆ¶ä¸€ä¸ªå’ŒçŠ¶æ€æ ä¸€æ ·é«˜çš„çŸ©å½¢ + View statusBarView = new View(activity); + LinearLayout.LayoutParams params = + new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); + statusBarView.setLayoutParams(params); + statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0)); + statusBarView.setId(FAKE_TRANSLUCENT_VIEW_ID); + return statusBarView; + } + + /** + * 获å–çŠ¶æ€æ 高度 + * + * @param context context + * @return çŠ¶æ€æ 高度 + */ + public static int getStatusBarHeight(Context context) { + // èŽ·å¾—çŠ¶æ€æ 高度 + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + return context.getResources().getDimensionPixelSize(resourceId); + } + + /** + * è®¡ç®—çŠ¶æ€æ 颜色 + * + * @param color color值 + * @param alpha alpha值 + * @return æœ€ç»ˆçš„çŠ¶æ€æ 颜色 + */ + private static int calculateStatusColor(@ColorInt int color, int alpha) { + if (alpha == 0) { + return color; + } + float a = 1 - alpha / 255f; + int red = color >> 16 & 0xff; + int green = color >> 8 & 0xff; + int blue = color & 0xff; + red = (int) (red * a + 0.5); + green = (int) (green * a + 0.5); + blue = (int) (blue * a + 0.5); + return 0xff << 24 | red << 16 | green << 8 | blue; + } +} diff --git a/android/app/src/main/res/layout/activity_cent.xml b/android/app/src/main/res/layout/activity_cent.xml new file mode 100644 index 0000000000000000000000000000000000000000..2a838f3ce1c3081fad00796f976eac5afa9de5f0 --- /dev/null +++ b/android/app/src/main/res/layout/activity_cent.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/home" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + > + +</android.support.constraint.ConstraintLayout> \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..216dff98d308682e287eb10a6ac6192f35337b9a --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + > + + <TextView + android:id="@+id/hello" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Hello World!!!!!!!EDEDEDEDED!" + android:layout_gravity="center" + /> + +</FrameLayout> \ No newline at end of file diff --git a/android/app/src/main/res/layout/flutter_fragment_page.xml b/android/app/src/main/res/layout/flutter_fragment_page.xml new file mode 100644 index 0000000000000000000000000000000000000000..b34432efb2cd53e5eae5eee51ac0e3e16e00169b --- /dev/null +++ b/android/app/src/main/res/layout/flutter_fragment_page.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:background="@android:color/white"> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:id="@+id/fragment_stub"/> + +</LinearLayout> diff --git a/android/app/src/main/res/layout/native_page.xml b/android/app/src/main/res/layout/native_page.xml new file mode 100644 index 0000000000000000000000000000000000000000..5a2e1d84a9e61d7c6b07abd665c022d6581affff --- /dev/null +++ b/android/app/src/main/res/layout/native_page.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="left" + android:background="@android:color/white"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="80dp" + android:id="@+id/info" + android:text="native_info" + android:textColor="@android:color/holo_blue_dark" + android:textSize="28sp" + android:layout_gravity="center_horizontal"/> + + <View android:layout_width="1dp" + android:layout_height="0dp" + android:layout_weight="1"/> + + <TextView + android:background="@android:color/holo_orange_dark" + android:layout_margin="8.0dp" + android:padding="8.0dp" + android:textColor="@android:color/black" + android:id="@+id/open_native" + android:textAllCaps="false" + android:textSize="16sp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="open_native" /> + + <TextView + android:background="@android:color/holo_orange_dark" + android:layout_margin="8.0dp" + android:padding="8.0dp" + android:textColor="@android:color/black" + android:id="@+id/open_flutter" + android:textAllCaps="false" + android:textSize="16sp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="open_flutter" /> + + <TextView + android:background="@android:color/holo_orange_dark" + android:layout_marginLeft="8.0dp" + android:layout_marginTop="8.0dp" + android:layout_marginRight="8.0dp" + android:layout_marginBottom="80.0dp" + android:padding="8.0dp" + android:textColor="@android:color/black" + android:id="@+id/open_flutter_fragment" + android:textAllCaps="false" + android:textSize="16sp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="open_flutter_fragment" /> + +</LinearLayout> diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000000000000000000000000000000000000..f2bc8742b375334d7df382056c9378955ad51545 --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="FFAA">#CCFFFFFF</color> +</resources> diff --git a/android/packflutter/flutter/assets/release/app.dill b/android/packflutter/flutter/assets/release/app.dill index cbe674e67983d12c9d039b5bf467d043effa3a34..5302d789ef4757f54585af89b2e57f4424a0b24c 100644 Binary files a/android/packflutter/flutter/assets/release/app.dill and b/android/packflutter/flutter/assets/release/app.dill differ diff --git a/android/packflutter/flutter/assets/release/flutter_assets/LICENSE b/android/packflutter/flutter/assets/release/flutter_assets/LICENSE index 57f4d979636bd3c97e77d52c12495460f8e19d7f..7e4f6bf35eb62ad715bcba191358974accff7c65 100644 --- a/android/packflutter/flutter/assets/release/flutter_assets/LICENSE +++ b/android/packflutter/flutter/assets/release/flutter_assets/LICENSE @@ -2,6 +2,7 @@ analyzer args csslib logging +protobuf Copyright 2013, the Dart project authors. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -35,6 +36,7 @@ async collection convert crypto +http2 mime package_config package_resolver @@ -3266,6 +3268,7 @@ charcode dart_style fixnum glob +googleapis_auth http http_multi_server http_parser @@ -6284,6 +6287,186 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- +grpc + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +-------------------------------------------------------------------------------- harfbuzz Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net> diff --git a/android/packflutter/flutter/assets/release/isolate_snapshot_data b/android/packflutter/flutter/assets/release/isolate_snapshot_data index 08000e5f5f5f243e03bb63f2c4a47acf1e3baac0..6de0dd839123eaee01bf6b35344a012de3935769 100644 Binary files a/android/packflutter/flutter/assets/release/isolate_snapshot_data and b/android/packflutter/flutter/assets/release/isolate_snapshot_data differ diff --git a/android/packflutter/flutter/assets/release/isolate_snapshot_instr b/android/packflutter/flutter/assets/release/isolate_snapshot_instr index 6330736258ec66b385c20cd18cfd659f9c725068..89cf4b9a9087828409fe0fbdc14fb9a0172e9c58 100644 Binary files a/android/packflutter/flutter/assets/release/isolate_snapshot_instr and b/android/packflutter/flutter/assets/release/isolate_snapshot_instr differ diff --git a/android/packflutter/flutter/assets/release/kernel_compile.d b/android/packflutter/flutter/assets/release/kernel_compile.d index c1e3a569a33efaf3be9da6a9c3b34896d64663c9..ec119ce082a3db3e457f6e3fd3b6c3cbae860ac4 100644 --- a/android/packflutter/flutter/assets/release/kernel_compile.d +++ b/android/packflutter/flutter/assets/release/kernel_compile.d @@ -1 +1 @@ -build/flutteroutput/aot/app.dill: /Users/apple/lsy/gmalpha_flutter/lib/main.dart /Users/apple/Downloads/flutter/packages/flutter/lib/material.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/flutter_boost.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.mark.dart /Users/apple/lsy/gmalpha_flutter/lib/Error_Page.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/base/Temp.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Api.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_home.dart /Users/apple/lsy/gmalpha_flutter/lib/comment_suggest.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/about.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/arc.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/back_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_navigation_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/circle_avatar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/color_scheme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table_source.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/date_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/divider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dropdown.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expand_icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_panel.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/feedback.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flat_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flexible_space_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_location.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flutter_logo.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icon_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_highlight.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_ripple.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_splash.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_well.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_decorator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_state.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/mergeable_material.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/outline_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page_transitions_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/paginated_data_table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/popup_menu.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/progress_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/raised_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/range_slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/refresh_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/reorderable_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/search.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/shadows.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/stepper.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tabs.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_form_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/toggleable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tooltip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/typography.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/user_accounts_drawer_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/widgets.dart /Users/apple/Downloads/flutter/packages/flutter/lib/services.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationService.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/boost_container.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_manager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/page_result_mediator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/router.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/loader/ServiceLoader.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_coordinator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/observers_holders.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterBaser.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/rxdart.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/dio.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/DioUtil.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_notification_item.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/message.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_item.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/pull_to_refresh.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/list_item.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALColors.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALDevice.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/toast/toast.dart /Users/apple/Downloads/flutter/packages/flutter/lib/foundation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/scheduler.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/add_event.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/arrow_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/close_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/ellipsis_search.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/event_add.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/home_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/list_view.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_arrow.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_close.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_home.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/pause_play.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/play_pause.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/search_ellipsis.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/view_list.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/cupertino.dart /Users/apple/Downloads/flutter/packages/flutter/lib/rendering.dart /Users/apple/Downloads/flutter/packages/flutter/lib/animation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/painting.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/vector_math_64.dart /Users/apple/Downloads/flutter/packages/flutter/lib/gestures.dart /Users/apple/Downloads/flutter/packages/flutter/lib/semantics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/actions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_cross_fade.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_switcher.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/annotated_region.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/async.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/automatic_keep_alive.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/banner.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/basic.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/bottom_navigation_bar_item.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/container.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/dismissible.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/drag_target.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/editable_text.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/fade_in_image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_manager.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_scope.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_traversal.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/form.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/framework.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/gesture_detector.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/grid_paper.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/heroes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image_icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/implicit_animations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_model.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/layout_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/media_query.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/modal_barrier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigation_toolbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/nested_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/notification_listener.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/orientation_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overscroll_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_storage.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/pages.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/performance_overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/placeholder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/platform_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/preferred_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/primary_scroll_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/routes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/safe_area.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_activity.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_configuration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_context.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_metrics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_notification.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_physics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position_with_single_context.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/semantics_debugger.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/shortcuts.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/single_child_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_persistent_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_prototype_extent_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/spacer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/status_transitions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/texture.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/ticker_provider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/title.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/transitions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/unique_widget.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/value_listenable_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/visibility.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_inspector.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/will_pop_scope.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/asset_bundle.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binary_messenger.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/clipboard.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/font_loader.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/haptic_feedback.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_key.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codec.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codecs.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_channel.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_messages.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_views.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_android.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_fuchsia.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_linux.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_macos.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_channels.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_chrome.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_navigator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_sound.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_editing.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_formatter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_input.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/foundation_ext.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceTemplate.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceGateway.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/boost_page_route.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/support/logger.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/navigator_observer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/message_proxy.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationServiceRegister.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/native_page_container_event_handler.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsPage.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/Router.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumPage.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportPage.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPage.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/RouterCenter.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/base/RouterBuildItem.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/futures.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/connectable_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/replay_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/value_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/streams.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/subjects.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/transformers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/composite_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/form_data.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptor.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/options.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/cancel_token.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/upload_file_info.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/log.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/cookie_mgr.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/adapter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_http_headers.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/replied_content.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/smart_refresher.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/classic_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/waterdrop_header.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/custom_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_physics.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/indicator_wrap.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/link_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/material_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/bezier_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/twolevel_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_localizations.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.6/lib/meta.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/annotations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/assertions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/basic_types.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/bitfield.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/change_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/collections.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/consolidate_response.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/diagnostics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/isolates.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/key.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/licenses.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/node.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/observer_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/platform.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/print.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/profile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/serialization.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/synchronous_future.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/unicode.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/priority.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/ticker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/action_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/activity_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/bottom_tab_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/date_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/dialog.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/nav_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/page_scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/refresh.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/route.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/segmented_control.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/switch.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/thumb_painter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/animated_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_layout.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_paint.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/editable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/error.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flex.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flow.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/layer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_body.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_wheel_viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/object.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/paragraph.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/performance_overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/platform_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/proxy_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/rotated_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/shifted_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fill.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fixed_extent_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_grid.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_padding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_persistent_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/stack.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/texture.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/tweens.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport_offset.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/wrap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/curves.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/listener_helpers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween_sequence.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/alignment.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/basic_types.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/beveled_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/border_radius.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/borders.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_fit.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_shadow.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/circle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/clip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/continuous_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration_image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/edge_insets.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/flutter_logo.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/fractional_offset.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/geometry.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/gradient.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_cache.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_decoder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_provider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_resolution.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_stream.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/inline_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/matrix_utils.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/notched_shapes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/paint_utilities.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/placeholder_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/rounded_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shader_warm_up.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shape_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/stadium_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/strut_style.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_painter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/hash.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/utilities.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/colors.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/constants.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/error_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/frustum.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/intersection_result.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix4.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/obb3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/opengl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/plane.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quad.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quaternion.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/ray.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/sphere.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/third_party/noise.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/triangle.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector4.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/arena.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/converter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag_details.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/eager.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/events.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/force_press.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/hit_test.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/long_press.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/lsq_solver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/monodrag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/mouse_tracking.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multidrag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multitap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_router.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/recognizer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/scale.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/tap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/team.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/velocity_tracker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_service.dart /Users/apple/Downloads/flutter/packages/flutter/lib/physics.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/collection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_maps.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/type_converter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceCallHandler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_onNativePageResult.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didShowPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willShowPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDisappearPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didDisappearPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didInitPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDeallocPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_canPop.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsModel.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/entity/PrestigeEntity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/cached_network_image.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/ScanImagePlugn.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/bean/DirBean.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumModel.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_screenutil-0.5.3/lib/flutter_screenutil.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportModel.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Responce/SimpleResponce.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPageModel.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/TestUserEntity.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/UserEntity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/as_observable_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_max_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_min_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/wrapped_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/combine_latest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat_eager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/defer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/fork_join.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/merge.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/never.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/race.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/range.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/repeat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry_when.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/sequence_equal.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/switch_latest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/timer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/behavior_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/publish_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/replay_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/default_if_empty.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/delay.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/dematerialize.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/distinct_unique.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/do.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/exhaust_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/flat_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/group_by.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/ignore_elements.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/interval.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/map_to.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/materialize.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/of_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/on_error_resume.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/scan.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/skip_until.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with_many.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_if_empty.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/take_until.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/time_interval.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/timestamp.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/where_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/with_latest_from.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/notification.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/type_token.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/buffer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/debounce.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/pairwise.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/sample.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/throttle.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/window.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/slivers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_bitfield_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_isolates_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_platform_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_buffers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/_network_image_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_event.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/clamped_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/friction_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/gravity_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/spring_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/tolerance.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/algorithms.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/canonicalized_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_iterable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_list.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/comparators.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/functions.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/iterable_zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/priority_queue.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/queue_list.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set_controller.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/unmodifiable_wrappers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/wrappers.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/PrestigeRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/BaseModel.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/LiveData.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_image_widget.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/gengmei_flutter_plugin.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/repository/AlbumRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/ActivityReportRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/UserRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/User.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/UserCenter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/json_annotation.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/backpressure.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/default_cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/persist_cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/serializable_cookie.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/empty_unmodifiable_set.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/local/PresitigeLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/PrestigeRemote.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/flutter_cache_manager.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/SharedPlugin.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/local/ActivityReportLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/ActivityReportRemote.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/local/UserLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/UserRemote.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/allowed_keys_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/checked_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_converter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_key.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_literal.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_value.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/wrapper_helpers.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/api/PrestigeApi.serv.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_manager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_fetcher.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_info.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/api/ActivityReportApi.serv.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/api/UserLoginApi.serv.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.g.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_object.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_store.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/web_helper.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/path.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/lib/path_provider.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/http.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqflite.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/context.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid_util.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/crypto.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/convert.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/byte_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/compat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/constant.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sqflite_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/utils/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqlite_api.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sql.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/characters.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/internal_style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/parsed_path.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/posix.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/url.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/windows.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/local_platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/testing/fake_platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hmac.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/md5.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha1.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha256.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/byte_accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/identity_codec.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/string_accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/io_client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/http_parser.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/boundary_characters.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/open_options.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/services_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/collection_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sql_builder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512_fastsinks.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_data.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/async.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/authentication_challenge.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/case_insensitive_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/http_date.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/media_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/synchronized.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/ascii.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_cache.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_memoizer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/byte_collector.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/cancelable_operation.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/event_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_consumer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/future_group.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/lazy_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/null_stream_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/restartable_timer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/result.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/value.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/single_subscription_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_completer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_group.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_queue.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_completer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_splitter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_subscription_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/subscription_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed_stream_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/string_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/scan.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/batch.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/transaction.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/basic_lock.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/reentrant_lock.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed/stream_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/handler_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/stream_transformer_wrapper.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/typed.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/line_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/string_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/source_span.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/eager_span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/relative_span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/charcode.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/file.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_with_context.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/html_entity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/term_glyph.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/highlighter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/top_level.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/ascii_glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/unicode_glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/colors.dart +build/flutteroutput/aot/app.dill: /Users/apple/lsy/gmalpha_flutter/lib/main.dart /Users/apple/Downloads/flutter/packages/flutter/lib/material.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/flutter_boost.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.mark.dart /Users/apple/lsy/gmalpha_flutter/lib/Error_Page.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/app_module.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/base/Temp.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/cache/CacheManager.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Api.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_home.dart /Users/apple/lsy/gmalpha_flutter/lib/comment_suggest.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/about.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/arc.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/back_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_navigation_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/circle_avatar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/color_scheme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table_source.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/date_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/divider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dropdown.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expand_icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_panel.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/feedback.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flat_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flexible_space_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_location.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flutter_logo.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icon_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_highlight.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_ripple.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_splash.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_well.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_decorator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_state.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/mergeable_material.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/outline_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page_transitions_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/paginated_data_table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/popup_menu.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/progress_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/raised_button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/range_slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/refresh_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/reorderable_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/search.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/shadows.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/stepper.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch_list_tile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_bar_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tabs.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_form_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/toggleable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tooltip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/typography.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/user_accounts_drawer_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/widgets.dart /Users/apple/Downloads/flutter/packages/flutter/lib/services.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationService.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/boost_container.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_manager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/page_result_mediator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/router.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/loader/ServiceLoader.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_coordinator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/observers_holders.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/BuriedImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/BuriedRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouterImpl.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouter.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterBaser.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/mmkv/MmkvUtil.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/rxdart.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/cache/MemoryCache.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/dio.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/DioUtil.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_notification_item.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/message.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_item.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/pull_to_refresh.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/list_item.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALColors.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALDevice.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/toast/toast.dart /Users/apple/Downloads/flutter/packages/flutter/lib/foundation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/scheduler.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/add_event.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/arrow_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/close_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/ellipsis_search.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/event_add.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/home_menu.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/list_view.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_arrow.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_close.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_home.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/pause_play.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/play_pause.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/search_ellipsis.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/view_list.g.dart /Users/apple/Downloads/flutter/packages/flutter/lib/cupertino.dart /Users/apple/Downloads/flutter/packages/flutter/lib/rendering.dart /Users/apple/Downloads/flutter/packages/flutter/lib/animation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/painting.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/vector_math_64.dart /Users/apple/Downloads/flutter/packages/flutter/lib/gestures.dart /Users/apple/Downloads/flutter/packages/flutter/lib/semantics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/actions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_cross_fade.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_switcher.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/annotated_region.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/async.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/automatic_keep_alive.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/banner.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/basic.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/bottom_navigation_bar_item.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/container.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/dismissible.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/drag_target.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/editable_text.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/fade_in_image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_manager.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_scope.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_traversal.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/form.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/framework.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/gesture_detector.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/grid_paper.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/heroes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme_data.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image_icon.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/implicit_animations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_model.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/layout_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/media_query.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/modal_barrier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigation_toolbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/nested_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/notification_listener.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/orientation_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overscroll_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_storage.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/pages.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/performance_overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/placeholder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/platform_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/preferred_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/primary_scroll_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/routes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/safe_area.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_activity.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_configuration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_context.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_metrics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_notification.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_physics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position_with_single_context.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/semantics_debugger.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/shortcuts.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/single_child_scroll_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_persistent_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_prototype_extent_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/spacer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/status_transitions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/texture.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/ticker_provider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/title.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/transitions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/unique_widget.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/value_listenable_builder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/visibility.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_inspector.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/will_pop_scope.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/asset_bundle.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binary_messenger.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/clipboard.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/font_loader.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/haptic_feedback.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_key.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codec.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codecs.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_channel.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_messages.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_views.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_android.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_fuchsia.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_linux.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_macos.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_channels.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_chrome.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_navigator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_sound.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_editing.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_formatter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_input.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/foundation_ext.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceTemplate.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceGateway.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/boost_page_route.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/support/logger.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/navigator_observer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/message_proxy.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationServiceRegister.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/native_page_container_event_handler.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsPage.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/Router.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/BuriedCenter.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumPage.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportPage.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPage.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/RouterCenter.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/base/RouterBuildItem.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/futures.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/connectable_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/replay_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/value_observable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/streams.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/subjects.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/transformers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/composite_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/form_data.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptor.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/options.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/cancel_token.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/upload_file_info.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/log.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/cookie_mgr.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/adapter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_http_headers.dart /Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/replied_content.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/smart_refresher.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/classic_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/waterdrop_header.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/custom_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_physics.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/indicator_wrap.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/link_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/material_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/bezier_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/twolevel_indicator.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_localizations.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.6/lib/meta.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/annotations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/assertions.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/basic_types.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/bitfield.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/change_notifier.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/collections.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/consolidate_response.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/diagnostics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/isolates.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/key.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/licenses.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/node.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/observer_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/platform.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/print.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/profile.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/serialization.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/synchronous_future.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/unicode.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/priority.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/ticker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/action_sheet.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/activity_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/app.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/bottom_tab_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/button.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/date_picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/dialog.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/icons.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/localizations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/nav_bar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/page_scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/picker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/refresh.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/route.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/scrollbar.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/segmented_control.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/slider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/switch.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_scaffold.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_field.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_selection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/theme.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/thumb_painter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/animated_size.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_layout.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_paint.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/editable.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/error.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flex.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flow.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/layer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_body.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_wheel_viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/object.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/paragraph.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/performance_overlay.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/platform_view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/proxy_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/rotated_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/shifted_box.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fill.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fixed_extent_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_grid.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_list.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_padding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_persistent_header.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/stack.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/texture.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/tweens.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/view.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport_offset.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/wrap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation_controller.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animations.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/curves.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/listener_helpers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween_sequence.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/alignment.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/basic_types.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/beveled_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/border_radius.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/borders.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_fit.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_shadow.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/circle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/clip.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/colors.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/continuous_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration_image.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/edge_insets.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/flutter_logo.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/fractional_offset.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/geometry.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/gradient.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_cache.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_decoder.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_provider.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_resolution.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_stream.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/inline_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/matrix_utils.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/notched_shapes.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/paint_utilities.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/placeholder_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/rounded_rectangle_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shader_warm_up.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shape_decoration.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/stadium_border.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/strut_style.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_painter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_span.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/hash.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/utilities.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/colors.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/constants.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/error_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/frustum.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/intersection_result.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix4.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/obb3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/opengl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/plane.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quad.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quaternion.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/ray.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/sphere.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/third_party/noise.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/triangle.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector2.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector3.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector4.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/arena.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/constants.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/converter.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag_details.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/eager.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/events.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/force_press.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/hit_test.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/long_press.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/lsq_solver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/monodrag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/mouse_tracking.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multidrag.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multitap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_router.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/recognizer.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/scale.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/tap.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/team.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/velocity_tracker.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/binding.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/debug.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_service.dart /Users/apple/Downloads/flutter/packages/flutter/lib/physics.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/collection.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_maps.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/type_converter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceCallHandler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_onNativePageResult.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didShowPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willShowPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDisappearPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didDisappearPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didInitPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDeallocPageContainer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_canPop.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsModel.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/entity/PrestigeEntity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/cached_network_image.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/SendTask.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/constant/Constant.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/proto/burying.pbgrpc.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/ScanImagePlugn.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/bean/DirBean.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumModel.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_screenutil-0.5.3/lib/flutter_screenutil.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportModel.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Responce/SimpleResponce.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPageModel.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/TestUserEntity.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/UserEntity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/as_observable_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_max_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_min_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/wrapped_future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/combine_latest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat_eager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/defer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/fork_join.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/merge.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/never.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/race.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/range.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/repeat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry_when.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/sequence_equal.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/switch_latest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/timer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/behavior_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/publish_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/replay_subject.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/default_if_empty.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/delay.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/dematerialize.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/distinct_unique.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/do.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/exhaust_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/flat_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/group_by.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/ignore_elements.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/interval.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/map_to.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/materialize.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/of_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/on_error_resume.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/scan.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/skip_until.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with_many.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_if_empty.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/take_until.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/time_interval.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/timestamp.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/where_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/with_latest_from.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/notification.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/type_token.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/buffer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/debounce.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/pairwise.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/sample.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/throttle.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/window.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/slivers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_bitfield_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_isolates_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_platform_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_buffers.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/_network_image_io.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_event.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/clamped_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/friction_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/gravity_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/spring_simulation.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/tolerance.dart /Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/algorithms.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/canonicalized_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_iterable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_list.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/comparators.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/functions.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/iterable_zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/priority_queue.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/queue_list.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set_controller.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/unmodifiable_wrappers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/wrappers.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/PrestigeRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/BaseModel.dart /Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/LiveData.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_image_widget.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/grpc.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/service_api.dart /Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/proto/burying.pb.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/gengmei_flutter_plugin.dart /Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/repository/AlbumRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/ActivityReportRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/UserRepository.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/User.dart /Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/UserCenter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/json_annotation.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/backpressure.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/default_cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/persist_cookie_jar.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/serializable_cookie.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/empty_unmodifiable_set.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/local/PresitigeLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/PrestigeRemote.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/flutter_cache_manager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/auth.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/auth_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/call.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/common.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/connection.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/http2_channel.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/method.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/options.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/http2_credentials.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/call.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/interceptor.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/server.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/service.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/message.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/security.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/status.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/streams.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/timeout.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/channel.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/protobuf.dart /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/SharedPlugin.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/local/ActivityReportLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/ActivityReportRemote.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/local/UserLocal.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/UserRemote.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/allowed_keys_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/checked_helpers.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_converter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_key.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_literal.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_value.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/wrapper_helpers.dart /Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/api/PrestigeApi.serv.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_manager.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_fetcher.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_info.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/auth.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/http.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/rsa.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/auth_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/transport.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/async.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/http2_connection.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/transport.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/handler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/fixnum.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/json_parsing_context.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/type_registry.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer_reader.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer_writer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/builder_info.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/event_plugin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/exceptions.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension_field_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension_registry.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_info.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/generated_message.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/generated_service.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/json.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/pb_list.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/pb_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/protobuf_enum.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/proto3_json.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/readonly_message.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/rpc_client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/unknown_field_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/unpack.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/wire_format.dart /Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/api/ActivityReportApi.serv.dart /Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/api/UserLoginApi.serv.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.g.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_object.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_store.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/web_helper.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/path.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/lib/path_provider.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/auth_http_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/pem.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/rsa.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/http_client_base.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/byte_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_request.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_response.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/crypto.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/auth_code.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/jwt.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/metadata_server.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/typedefs.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_cache.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_memoizer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/byte_collector.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/cancelable_operation.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/event_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_consumer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/future_group.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/lazy_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/null_stream_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/restartable_timer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/result.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/error.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/future.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/value.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/single_subscription_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_completer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_group.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_queue.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_completer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_splitter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_subscription_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_zip.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/subscription_stream.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed_stream_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/http2_transport.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/connection.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/hpack.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/intx.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/int32.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/int64.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqflite.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/context.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid_util.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/convert.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/asn1.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/io_client.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/http_parser.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file_io.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/boundary_characters.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hmac.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/md5.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha1.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha256.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/rsa_sign.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed/stream_subscription.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/handler_transformer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/stream_transformer_wrapper.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/typed.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/connection_preface.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/connection_queues.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/queue_messages.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/window.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/window_handler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_defragmenter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frames.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/ping/ping_handler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/settings/settings.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/streams/stream_handler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/sync_errors.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/byte_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/huffman.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/huffman_table.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/compat.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/constant.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sqflite_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/utils/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqlite_api.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sql.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/characters.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/internal_style.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/parsed_path.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/posix.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/url.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/windows.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/local_platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/testing/fake_platform.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/byte_accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/identity_codec.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/string_accumulator_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/authentication_challenge.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/case_insensitive_map.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/http_date.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/media_type.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash_sink.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512_fastsinks.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/error_handler.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/stream_queues.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/async_utils/async_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_types.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_reader.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_writer.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/open_options.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/services_impl.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/collection_utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sql_builder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_data.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/string_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/scan.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/encoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/decoder.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/synchronized.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/ascii.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/line_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/string_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/source_span.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/batch.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/transaction.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/basic_lock.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/reentrant_lock.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/eager_span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/relative_span_scanner.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/charcode.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/file.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_exception.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_mixin.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_with_context.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/html_entity.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/term_glyph.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/highlighter.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/utils.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/top_level.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/ascii_glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/unicode_glyph_set.dart /Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/colors.dart diff --git a/android/packflutter/flutter/assets/release/kernel_compile.d.fingerprint b/android/packflutter/flutter/assets/release/kernel_compile.d.fingerprint index 9ea402e26d8bbd106a567c09fa8ccd89f306ed1d..c117e7de4fae8a38abddfeac331cf196fa172975 100644 --- a/android/packflutter/flutter/assets/release/kernel_compile.d.fingerprint +++ b/android/packflutter/flutter/assets/release/kernel_compile.d.fingerprint @@ -1 +1 @@ -{"version":"20e59316b8b8474554b38493b8ca888794b0234a","properties":{"entryPoint":"/Users/apple/lsy/gmalpha_flutter/lib/main.dart","trackWidgetCreation":"false","linkPlatformKernelIn":"true","engineHash":"fee001c93f25a1e7258e762781a7361f122d29f5","buildersUsed":"false"},"files":{"/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/ScanImagePlugn.dart":"3600697f2edebfc20dc871c3cded9b87","/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/SharedPlugin.dart":"f4e09ab9cc4175296b460ddc561c7094","/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/lib/gengmei_flutter_plugin.dart":"af0d83d10ed34d8b81e14ad64b6c8aa7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/async.dart":"2dbac28f1d3ebc42a756c147d86215e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_cache.dart":"8aa37e27f8c5ea926a4002642a4bce44","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_memoizer.dart":"4f3ef5192878622b364129997affab43","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/byte_collector.dart":"1c702804e15eb566e759c642be2d8cde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/cancelable_operation.dart":"7a49eede758199c8a506d7a5d446fd80","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/event_sink.dart":"524cadeeed2de1f0a327c9302ce0bd72","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/future.dart":"f775cfa3ced4ac63e8e33e8a0e118222","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/sink.dart":"68ef65917b7d67120d64bd3b84816d9f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream.dart":"381c5b353d382ac196b76dc6d0ea9cde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_consumer.dart":"a6db60c8c2c0ccef79ac745625e0d512","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_sink.dart":"b896c9a8e80f66a72c27b296995889b2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_subscription.dart":"6c296b440fe228011267f955563a084e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/future_group.dart":"f72393069c6816d25c1ba404df0c4b4b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/lazy_stream.dart":"ddbe5e30035e7b46c4a0a65b2a46d9f0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/null_stream_sink.dart":"60469307679736882c330c9ef686dc79","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/restartable_timer.dart":"c157246c6746b95486172dd3b819065c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_sink.dart":"6013fbcbdf18569c3e312fc32304bba4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_transformer.dart":"95a7523c9b56392cc59bd3e2f4edcabd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/error.dart":"e87d282f3c3ec3a5857fe11fac09383c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/future.dart":"e64cadb9309c99dd6da92de702be09a3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_sink.dart":"3fbfc597e4dbf734a1ebf75f9f9df11c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_transformer.dart":"4eb139917cd3aa71c11db80ee77fb906","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/result.dart":"635c1675cd8fae0583320f68954030ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/value.dart":"2895f074cefb939aded79ba163f13cd5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/single_subscription_transformer.dart":"4df1ec9d597a7e1c95a8772b05fdf566","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_completer.dart":"fdde02ca45ad4b35ba0fa470db4d1824","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_group.dart":"9025de047f16d023f170549c302c1855","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_queue.dart":"3d60290b9fbb971d90c6d045b41b6682","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_completer.dart":"91f75cc77f82a3073b8f7b938cbb3d9d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer.dart":"07fdfbbc49aebfe0dd20712a8f4275a3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/handler_transformer.dart":"52bbf0f501c67f7b0566f38e4245c334","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/stream_transformer_wrapper.dart":"a867f44fc7faf292605617755131533b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/typed.dart":"5345e84fc427967c14cfd573e2b03ffb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_splitter.dart":"b5e8d212e3e0892204e5bdb3bc07e823","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_subscription_transformer.dart":"fb92bad60ed759a56d27469c7bccb252","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_zip.dart":"a444b26f08c0ff4f96cfeeb2f7ba3a78","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/subscription_stream.dart":"56d586543414dd5deb79b43ce1caa9b7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed/stream_subscription.dart":"c0ad4265f563c91959c013811b31abdb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed_stream_transformer.dart":"755acf813f42abc3f98c86749fee007f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/utils.dart":"c79d5bbbfea0781202244dd9d4e48ce2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/cached_network_image.dart":"85f4a95a416058b8045bee42bd581368","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_image_widget.dart":"e3a4e5d84a773e08d9a3b137c4031ac9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart":"0e3cf9e712c31412ba1efc780953abb2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/ascii.dart":"271bf3dd563b659c61d6eca340b33304","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/charcode.dart":"9cb5ad026b874de99c63dfc2f62025ab","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/html_entity.dart":"ce3f4aed44d86cf98419895d10bc32a9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/collection.dart":"2f8109a8faf44e85899d338bd207783e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/algorithms.dart":"cf24d286aede10b2bd58120712516f7f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/canonicalized_map.dart":"eed869aa9b574a6f57b44430899c3479","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_iterable.dart":"8a565e909f52453cf6be8076bf8fad7b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_list.dart":"c96801c7bcce7b1973226992d857fe11","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_map.dart":"b96cb7f4dd8b918f4e76f68c5df3df30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/comparators.dart":"f675d722bdaeb326e980dc3cf11a20ee","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/empty_unmodifiable_set.dart":"6155717d19959066d859a2f86adba256","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality.dart":"6a06e909eb3ca98272bdf32acf4ceac0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_map.dart":"be36f7fa7a508e1f07b8af2104c19e6a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_set.dart":"c7441336d9cb2dccd512d2d50021f644","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/functions.dart":"e22b39d6908a517bfc69579cbccce384","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/iterable_zip.dart":"4179dfead1b2235568dcaf19da4fe4d6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/priority_queue.dart":"21b3082cb9e51ee9b7e5cbfd6cd25218","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/queue_list.dart":"2bb6fbaf59b527320f7da4c220f6f8fa","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set.dart":"a2a56457b7aa80360ff6d1282b3fd229","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set_controller.dart":"09b5390fecd60faef5525706add8e4e3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/unmodifiable_wrappers.dart":"152ce0ab2957a68f1d599241bc91a39c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/utils.dart":"f3acc8afd91ce3e9d6ef5502fc828911","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/wrappers.dart":"c9e04f6a3aeb949f4a104b856777f6cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/convert.dart":"448f58ecbcf99bde88011e35ce6d64de","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/accumulator_sink.dart":"f8d7cb5863c0c838ca30358a197ff5e7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/byte_accumulator_sink.dart":"f3fa0fad2b5124625922a93b7aefc3e3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex.dart":"1eaf2f6041cfc8e0b0724e46b12153cc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/decoder.dart":"f8f701bbaf5dd8acfda8f0a51538c510","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/encoder.dart":"2a4007566bec9b6bbd97b20ce57c2d16","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/identity_codec.dart":"5de82deaa06571a19a5d7aa023bcd249","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent.dart":"f91ee57550a40ada794abd698999842b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/decoder.dart":"6d103e2d441caeb53cea9245750531a2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/encoder.dart":"635e4a01dbfb472635d0717e134db6d9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/string_accumulator_sink.dart":"b63cd3581c2d6b02511b6ca7eb281eb7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/utils.dart":"0d1123ee7f35766c9e21c6dc72aa77e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/cookie_jar.dart":"a925dfe5a9e37926b4194c84ff3a5b74","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/cookie_jar.dart":"eaf15b37ca608bdd6826ec3b83331511","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/default_cookie_jar.dart":"503f38ea0b2927be7eb00f2d1386374b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/persist_cookie_jar.dart":"25bbecc7763198801dbc1c57bcba57cc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/serializable_cookie.dart":"d6f4e39293d06a537eb7e527d6a9623a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/crypto.dart":"3b0b3a91aa8c0be99a4bb314280a8f9b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest.dart":"fa73ebf9c9301bc31c41e27023e11e18","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest_sink.dart":"cb951cf55c867048b8819d642a04cfeb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash.dart":"29719495d8d720b0a4a1e3b1228ec142","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash_sink.dart":"9e271be599fe62bedbd1f7159fae3e19","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hmac.dart":"3b18c0e32a1f0df8afad0f18499fc6ff","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/md5.dart":"cb88b599d88e0eaab731c74c6e6e4f4d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha1.dart":"19edfc089868d07313e54c2a66146530","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha256.dart":"bda3362310595c3bbfd2b24b97e417f7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512.dart":"98dad8d8d55204e0d953a4792a462d5e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512_fastsinks.dart":"bff7f6192bfc9db4827aedda7dd7e214","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/utils.dart":"05778db9e882b22da2f13083c9f28e0d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/dio.dart":"c82c5c1b1af300a254466fcbbcb1da27","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/adapter.dart":"b89ae3ef19df708a687d77aed9ad4f3b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/cancel_token.dart":"75565c79f70f73053cd64db77f9348cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio.dart":"ac1e582ab692e558d4f198cdfabf25a5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_error.dart":"84ebda7f3545014ed3f06a37a214110f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_http_headers.dart":"ce2195f17ee8f7f788807d2d767dad1a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/form_data.dart":"2d9370f50548e83d08a5b11e5584f655","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptor.dart":"7eac621142883cb2f134af2489c23eb3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/cookie_mgr.dart":"73f3285c140ce3c557a2328ff58ef406","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/log.dart":"cd661e597244d3ac98467f05bb97da33","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/options.dart":"ded3622919bbdad69f3eafc10d406a7e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/response.dart":"d8d70794e2983e8f1f26ee35e7f21532","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/transformer.dart":"462dee9ffc8aac0154052f5b3a73bc53","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/upload_file_info.dart":"db498d163b6c1b99eb9c70d4c5a7800a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_canPop.dart":"3fcb199b71e2772cc018557a844ce46c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didDisappearPageContainer.dart":"532d6dd1b8909beec0dada9ca7cbd400","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didInitPageContainer.dart":"50f8e9955bff8430b9b9a2d354e067e0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didShowPageContainer.dart":"fa0535d0fd2cfef5dc24741c7dc671b3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_onNativePageResult.dart":"e5147c2b3a0d0d19e3c9c258977de9d4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDeallocPageContainer.dart":"45e1058efb95a16f6faa798e2bc90aa5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDisappearPageContainer.dart":"66a15d42fc3db2989562aae01cf1ba5b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willShowPageContainer.dart":"2e345fb22c30506a689fb287dd477834","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationService.dart":"3a00ed103124190507c79101b2440973","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationServiceRegister.dart":"7e5f6fef95493cb116c2ee70fba03977","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/loader/ServiceLoader.dart":"c5a78ea46902c741ccab1ddeacb4d8ef","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/boost_container.dart":"ee67828e1d5b8e72c5ef4ded7af1400a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_coordinator.dart":"09e0d88b674103c899e8cfbf157443bd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_manager.dart":"602a5af9652d3d1e5a9fbc7817276752","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/navigator_observer.dart":"b861721e2a0b00e0408d662aaf5ad615","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/flutter_boost.dart":"1e89233e44dc9a4bd9a50c5681194967","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/message_proxy.dart":"a5a0469d69c8459a56e1be305a852b62","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/native_page_container_event_handler.dart":"db6fee8076c0bf5ee462b84cc0122b8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/page_result_mediator.dart":"bbe236c0889a6fde0d9118f99075415f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/observers_holders.dart":"29b18dc245f5fa5c8192a34456663577","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/boost_page_route.dart":"77a2c56830ba336aa6b75df9ce763430","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/router.dart":"9e33540a510a6e9d54b854b7d2f8cf5a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/support/logger.dart":"87d5caca7deea42c2c8c0b573fdbcc5a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/flutter_cache_manager.dart":"dbe76f09e608d1ef7908724148578fd6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_manager.dart":"1040e83dd7d6a62636aecdbb5ef32f3f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_object.dart":"ea89be9a132ec7d592f788a3bec3fe3d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_store.dart":"b8db7a3b2521495d4f283b2c37431027","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_fetcher.dart":"5f524a018bbee10b8871dbae4055e7f6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_info.dart":"7d3099a3e964cc9d48a9f69ca3c5f23d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/web_helper.dart":"59fd4043d1bf707302786ef12d2a6ac4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_screenutil-0.5.3/lib/flutter_screenutil.dart":"5c8c7bf7ae0a11e8c9cea872865795b1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/http.dart":"08828d9c933d834becb6a7e21bbfff08","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_client.dart":"3a77af8769598c6d2ffb70ae51b53510","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_request.dart":"0d6f22dd09103beb8c699e9fe64fd21b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_response.dart":"2361058277135eb85e3e801bc234cc7b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/boundary_characters.dart":"402f9ac94be7dcf37d174f6479f95cab","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/byte_stream.dart":"ec0fc214ffe2c453f041f29a518ce202","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/client.dart":"8d932e6f8f662fccf2b18b4fd42aed82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/exception.dart":"3a586cb9dcc071948d59c9c72c98f530","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/io_client.dart":"e5ce8b1e5dd8778e87125175b38221cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file.dart":"2df06920e85c10188ad4fa1d5f0c1d30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file_io.dart":"78e50ea491d00eaa108fccc6d35917b9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_request.dart":"5b42e5536f34f2d69e104652bfeb2b95","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/request.dart":"7665a8c93f178bc59ba6957043bb7d7e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/response.dart":"27e4125210900683fc648d1d80511f64","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_request.dart":"1775199d960cf536196d15d8bf32c537","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_response.dart":"fc64433b8ad10c70f2020dc5afdf149b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/utils.dart":"df131f9089e1606b924153c74f849b83","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/http_parser.dart":"b76ebf453c4f7a78139f5c52af57fda3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/authentication_challenge.dart":"702f3351921a89aa538130c3988813db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/case_insensitive_map.dart":"9f470db3ce6d2de00032575b391cca97","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding.dart":"ec8126497cf52be10f8cc7e567499da6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/decoder.dart":"1e094096f205898f9dc237104e32ed82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/encoder.dart":"c3cd27c6aff4ffc343af41e55d1b3d68","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/http_date.dart":"54ae62a912ab3e80b07758985fa39fba","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/media_type.dart":"a876062b5fc391c87ea9f013de36af5d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/scan.dart":"b4b360021d726b7bc1692299112ad1ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/utils.dart":"629ee5c89b645316176463b16c74c366","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/json_annotation.dart":"81bf66efd6fa78bd86a272b19c5bc3ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/allowed_keys_helpers.dart":"d3db043cd4f2391df6e2768a64446e75","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/checked_helpers.dart":"00d207c7310a4b4abbfe453b272535d9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_converter.dart":"6017bdd295c351a6c2f2ee44fcf25b9a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_key.dart":"91fb5500b87502a27f806ab1d939e451","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_literal.dart":"5684d2fab2b99fcf58419f8dd3f44fe7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.dart":"7a2715e43711ed70b1fb16b31ea0f543","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.g.dart":"beaa6c0dc7f7aee60e0a301abcd4fd9c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_value.dart":"002be4c072c0cc5c5e72b5ff6d0c490b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/wrapper_helpers.dart":"2f2bca0c3499c7f452a003e040f62037","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.6/lib/meta.dart":"ed48a025ad4b9acf550855e0da05b12c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/path.dart":"82b71946ba2db9f11dd0fe4c6f1aaa29","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/characters.dart":"9d1fbf1ae3a66027af5a992b4ee38e67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/context.dart":"0dc65b8a2147c30d2af2e141a2fa6d55","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/internal_style.dart":"17e30268d46dbaebac5cc879df3ffcd0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/parsed_path.dart":"7cad643e8e465dbf5f0c819ba5777677","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_exception.dart":"3fbd1d82832a62b2aefd28211b66370a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_map.dart":"3664285d1b4f7cc9a7f0472af0df3ddb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_set.dart":"21fa4fc19b54b0badd2eeff778f4a705","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style.dart":"4332db9affdcaa3ab7386a3e1c928f54","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/posix.dart":"7b278d768ad3548048732f852242aedf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/url.dart":"d7119e9a6da5639c40604264ee6dc23a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/windows.dart":"c212a4deca4a451f0fa46ea109692c8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/utils.dart":"be3c26a0efba22e08a005fed53988f37","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/lib/path_provider.dart":"7ccd97a5031f2544acd509e877182cd5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/platform.dart":"7776cb84483a65e3498638a8beff3cbd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/local_platform.dart":"c0ed810ef04e6adf32f4dd718d2ad324","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/platform.dart":"c0024728832f255bfde0917c9c5bb332","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/testing/fake_platform.dart":"06f329d16d196b559a6a0b7aee6b15bd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/pull_to_refresh.dart":"0daf213510c618a7deaa71ec738df0ae","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/bezier_indicator.dart":"843d75eaf40b922c5eb2f46b69f4d767","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/classic_indicator.dart":"6172cca0e0550abe4e0cf0a5a32bd3fe","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/custom_indicator.dart":"d091d9270fee11d3c7a0efd7b7146676","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/link_indicator.dart":"6ea25281aab4b18b6da638f04f1ee333","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/material_indicator.dart":"d2aad4805802639fdfe54ef4267d68dd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/twolevel_indicator.dart":"4f167b114c2db7234753a043fb8600b8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/waterdrop_header.dart":"c37dcca93ad80f6983eba50e639a2199","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/indicator_wrap.dart":"9ede710d899f7c3ff54ddc2eeb69383b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_localizations.dart":"244c38ae343537c3d07e32b079d2b790","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_physics.dart":"17f858016b6fb09146b00b25a4c6046b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/slivers.dart":"7bdb9aadd52a49922e2c433aa101ffad","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/smart_refresher.dart":"66abd3fbb2d49a0acb15b1235515ded8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/futures.dart":"cc18971df94873707a2fd864521b58f6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/rxdart.dart":"0f2d658b698f817f1f3ac8e957b0d7c4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/as_observable_future.dart":"0433da855b3cba920b8e13c3d4316a27","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_max_future.dart":"0efb2ecf1492ca3168eb3fc52b4cb4d1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_min_future.dart":"d4be741efbb381c7699883e66c769a46","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/wrapped_future.dart":"d4be9018c0c4965bc5a0c5c650511f6b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/connectable_observable.dart":"b811677a4596a5db219a09d66c9c6095","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/observable.dart":"51180418b292055064d5a28055168d53","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/replay_observable.dart":"8e3b4d834f1a8c61d5e1cf1dd2078d10","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/value_observable.dart":"221d4683f5bda925ab0f139495753bc1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/combine_latest.dart":"f9f2685cb196365327fc6d6a6f1eb8f2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat.dart":"2e8dda877bd7a8fa9959550231747744","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat_eager.dart":"8ab935f815ba539883e5fe05c567ea20","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/defer.dart":"abf0875a888ea57f5d109f69e507b08b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/error.dart":"8ca315ef482205d14c9f3a4b0b111757","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/fork_join.dart":"2afde2d422a41ef63aacb59ed000dbbb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/merge.dart":"ce244d76edca8979e9d6d954b83ef642","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/never.dart":"f16dd2b78ea208fa0a1a36a35dc6a9ef","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/race.dart":"5197c4fc58707e862112d76b5f33593e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/range.dart":"822b0894334ab90934f0afa1e324d1c9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/repeat.dart":"cbc015dcd1195fc58951fe026f61504b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry.dart":"dcd3d7f57efb46a2ecf4524e9000a782","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry_when.dart":"a47e03a920402ab407b239d7ebb276e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/sequence_equal.dart":"59fe71da76b9feb0121e69e9fd40c22d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/switch_latest.dart":"41778d4a2ffe0d1f35cc8338b3c7ee32","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/timer.dart":"752aac2872b1fc648390e43a3ed90a08","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/utils.dart":"a9f86585c73212e84e92c7a516fc4b8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/zip.dart":"61910e330cca46cee090ad024f650cc9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/behavior_subject.dart":"f85e556a5f6f09cf25d7e208ef0ddc3f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/publish_subject.dart":"8f4f04b4567af1a7e8070ad04c01006b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/replay_subject.dart":"6e2dba6280c0133983b7b2ae74e4135a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/subject.dart":"005c8f65b3fe6c90d18da2ac1f08dd1e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/backpressure.dart":"dc67bf56fa8de6b1453923345b0dfb79","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/buffer.dart":"07b651d33428b23aacb564827a9cf474","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/debounce.dart":"adb3871a8829fa7994ff45e29c06b780","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/pairwise.dart":"c4cccf3d2bd7ae168070fd424ec4c98f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/sample.dart":"26b0362575a2f0c54255956d2ad64235","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/throttle.dart":"64a9d853cb0c2db8ef02ca6f5c5f6ad9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/window.dart":"b2ab10ebc58c1583481b98d63db27dd1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/default_if_empty.dart":"9b0da83847303b32db246dd50cf7483d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/delay.dart":"9c473040e0f7ebf2ce864eb384793007","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/dematerialize.dart":"91934f7bcf6fef4ebcc24d4d2cc3373b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/distinct_unique.dart":"655f9708ca8a5f08865ec483f3e4d053","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/do.dart":"a5d6eef94a2b117a67400b0fdaf5c6c8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/exhaust_map.dart":"37432a4f18d4ab56289fc0a638b5167b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/flat_map.dart":"5e022e352f67833661611cc515f6f067","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/group_by.dart":"36dc4fd0f163e14d9a567f41e64de613","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/ignore_elements.dart":"25bb19d2f4a7714b48da15291fe54eda","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/interval.dart":"d9818ef16b4273ee3eff4d843d486d1d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/map_to.dart":"76a3e328077e888b43fb90765f999daf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/materialize.dart":"a2e07fb05bafe548120fae1e9cc0965a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/of_type.dart":"ced8090140e9f90b638ca0acc99c0cd8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/on_error_resume.dart":"39c9b420cbecaa7fe35a6c96638c0ee3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/scan.dart":"ee64c00fc03cea17c658b7f5883fc6e5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/skip_until.dart":"3b029d00a5d8c72d87e1934fe7780cc2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with.dart":"4f142c6b8e4766d23384e9d1ad90bd30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with_many.dart":"a3d6cff89977f3ad8cfdeae207a043b0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_if_empty.dart":"0d13cc686082539af839c228429cbcb7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_map.dart":"ecfd0ea2215687f2f84b562c0222383b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/take_until.dart":"ace409ee3e50de058c0014d8f2dc0f4a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/time_interval.dart":"6061a162a5c489336abbf70bb8a977da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/timestamp.dart":"c9f8c1ff06a443ac74b175486450f93c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/where_type.dart":"f20cfd18b20005af5148ca867f924a90","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/with_latest_from.dart":"f86f168ca62543432454a20fb53db64d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/composite_subscription.dart":"1f6d6d24ac3e3be4a0297ee68408b3da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/notification.dart":"d3d5c747ca69eca070e354dedf47ef87","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/type_token.dart":"14e5868b459e53be885da5cd7e1d2168","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/streams.dart":"870c3ccb3c16797ea70cb7f206e48f1c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/subjects.dart":"42213311c93ad5e873994ad8ed1df5d8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/transformers.dart":"bc1d04c61803f31d1307acf7bbb6842f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/source_span.dart":"e546fdff5ab35f57770465e0deaba7c3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/colors.dart":"0175d6fa11d3f102c181b318cc63f138","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/file.dart":"3ce60056e8acfbb64808bde65b763799","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/highlighter.dart":"d64d12be4a087188792be5ae801fd8f1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location.dart":"b518dfd28840572f752274846c97a3db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location_mixin.dart":"84d31ef3d408ddfc3eff750089323b9e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span.dart":"9fa0a048220a0db4fd66ddf26f4f1a67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_exception.dart":"0e17409d785100a55346b8b4949b9910","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_mixin.dart":"07ded389eaf6243b51adf415ade3f11f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_with_context.dart":"e4e1e3cba0b58270397ac627fc30814b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/utils.dart":"d78bedf47b1a88dffea15b1ceda71b84","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqflite.dart":"158cd2fd75e6b1b03753dae213c7ec66","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sql.dart":"597e7b293e2531edc3ef788375e11c67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqlite_api.dart":"3b19a23d7f610dfdcb9700ab0012e9e6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/batch.dart":"1d91fb04448b0b432755055fbb26d353","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/collection_utils.dart":"4b9941712c48eaacda8bb7296940793d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/compat.dart":"68516cddf459f1dabe669872d737a30b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/constant.dart":"37c9f67c38589ee6e06ed29c6e7e0069","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database.dart":"b9850e68d87b41a63bdc5e037ab7a77b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database_mixin.dart":"c154c7511c3fe7b21a3b8f21ec6ffa83","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception.dart":"55fa74b453f2fd882f277c6633885929","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception_impl.dart":"dd1b45adfbb237981dfefd1681584499","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory.dart":"9dbc14404a9aeb70e56c47e28052b892","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_impl.dart":"a79a2762e388e479195e9a7d9521ef6e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_mixin.dart":"aa71454c08878ae3ecab3dff53bb9a75","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/open_options.dart":"71913d9e1d81c784ad3cbc4756ae71cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/services_impl.dart":"a6d82f072fbaf76b1276861d20c1b788","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sqflite_impl.dart":"20505b8a71050c48e93ff8044f5dfdaf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sql_builder.dart":"81564be8dc7ecfd23e5707594f6071fb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/transaction.dart":"0061063b769ca615770ae000cd9eb411","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/utils.dart":"ba7ff21d8d1880f06277bf165eac6745","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/utils/utils.dart":"fd3919e4e5c21f551bd35963d5dfe18b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/eager_span_scanner.dart":"24020be1d4eba32ba2d48bbef193ebde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/exception.dart":"f727057210b85530d797daf7ab98cb6c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/line_scanner.dart":"9e57ea3295e35b794c96dfea25633f82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/relative_span_scanner.dart":"b1ba2a25e065487321553e1dc3e13fb1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/span_scanner.dart":"3925a178c6c80956bf0db281ca033f90","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/string_scanner.dart":"e181627f573da10ad5bb9a457fb28a2b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/utils.dart":"78005726c5aeff4b28c45368286677f1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/string_scanner.dart":"07758299bbd2261712f35210ee2f645b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/basic_lock.dart":"507d7804036cf999cce208bb57945e05","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/reentrant_lock.dart":"49e67255f2490e8ec13e2c23d054a486","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/utils.dart":"96a4c664c4f2f818aa948ba0ebe1458e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/synchronized.dart":"962872d6d055404bd700e01e66cfd983","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/ascii_glyph_set.dart":"113d4695aec3f71b7fd7f0c9fc0a4820","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/glyph_set.dart":"545aafdb410bb267337d97db379fc438","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/top_level.dart":"ae96335260cfb5b68745bb2abcc8c0ea","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/unicode_glyph_set.dart":"e7fe52faa11e81181226c1a871a963c9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/term_glyph.dart":"822f29a79c60c23f33d21da8e145bbe2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_buffers.dart":"45523835db054bc346194ae8b13174ed","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_data.dart":"11fe0bf8394c600c041f721767d78860","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid.dart":"3abd3bbffadfe07acfc39e50ed007b8d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid_util.dart":"d8fdf542727f18e7d695faa25853d01a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/hash.dart":"5669a322d55b8659da51630d439f61db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb2.dart":"c7c11c4a8cdcf1c9ce7c5ececb4da32a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb3.dart":"2a4d8bbcbcbd4e6d622a1a741c41e637","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/colors.dart":"d0ac7f8914507b5da846ea4a6d3b9839","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/constants.dart":"aa4b5c0cdb6a66685350611b29ca9d38","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/error_helpers.dart":"5f97841af6f076a8ac30e01b0c9c82e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/frustum.dart":"54a6cf4b13fb29ebbb4a753b94bc1238","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/intersection_result.dart":"36fe23eaad91a81d518828d8fdca3029","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix2.dart":"666ffc3a732218eb3cc4d8dd65e794c6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix3.dart":"df715198d30faa2ca31e07cf713ab008","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix4.dart":"4c0a52cc47e209f9b917275dd7e8bb3d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/obb3.dart":"6a223b730df3ec8f08410bcdcae70e23","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/opengl.dart":"e3326e6957f09de8de582af56c913f01","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/plane.dart":"0fe82c6597e3208601e4ed5bc85257da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quad.dart":"4b32704fe24547b94799085ec7ba8f7a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quaternion.dart":"9934f154a4ab3274c98b100953060670","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/ray.dart":"0f6ab21b86be15896fd59c65d29b4f6b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/sphere.dart":"9bc9c1251953846c87acd44d6182c45f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/third_party/noise.dart":"88f7de706d3509b57bf7b201a469a7ea","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/triangle.dart":"5e9b16f549c0323f6a28c34ecd3a962e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/utilities.dart":"0a44a67010e3aefd7d6a0d4ae0da90d2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector.dart":"ba9b5f704c79827e423e92ba5bd56d8e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector2.dart":"8a5765afbe8068cb85a96a75374af0f5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector3.dart":"cc529ce185a568093dd95f6ef3cec942","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector4.dart":"a9108fc69ef9bce3615324070508f68b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/vector_math_64.dart":"730e6f48300bc64e5e2e1aaa5c29a986","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceCallHandler.dart":"47d14527c39eadbdb5012bf04fa6970b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceGateway.dart":"27b8a24278191608c1b2c8be3a309600","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceTemplate.dart":"a8b70e90aa1a71156b56f438a65e604c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/foundation_ext.dart":"1cceb67882323824143f18e07e25b3ce","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/type_converter.dart":"c03a6b0ed0714b0f6dd5b27a7947ee48","/Users/apple/Downloads/flutter/packages/flutter/lib/animation.dart":"f6ceee4e6e3204a8342d14ed98ed277c","/Users/apple/Downloads/flutter/packages/flutter/lib/cupertino.dart":"7b71148e3cc23d9d095a663289c92d3e","/Users/apple/Downloads/flutter/packages/flutter/lib/foundation.dart":"5d298fa64b44598adbaf45c67dc24de8","/Users/apple/Downloads/flutter/packages/flutter/lib/gestures.dart":"d15b11bf5c6675dcfc016fd9d80f5831","/Users/apple/Downloads/flutter/packages/flutter/lib/material.dart":"317c527c7b05dd1df67a064b0f3ea889","/Users/apple/Downloads/flutter/packages/flutter/lib/painting.dart":"a634ee062a6b7d4603bb42e4cfceff17","/Users/apple/Downloads/flutter/packages/flutter/lib/physics.dart":"b9d1a27e50a8f3cd04d9aaab2ae991af","/Users/apple/Downloads/flutter/packages/flutter/lib/rendering.dart":"df1c74d89a66775eb00310e985bafcef","/Users/apple/Downloads/flutter/packages/flutter/lib/scheduler.dart":"e23183ba6dcc925fe4a689fa4ed11e65","/Users/apple/Downloads/flutter/packages/flutter/lib/semantics.dart":"6fb345cae9c2d174431469e9a51298ef","/Users/apple/Downloads/flutter/packages/flutter/lib/services.dart":"b0ccb1f2b5dcc4768ae4757396996878","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation.dart":"8123fdebe4c67d7036a876057fe9672b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation_controller.dart":"c725d45f5b815cc013b379208b9dea84","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animations.dart":"a6c1546c40ca9fcffe7ca56e1a0de78b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/curves.dart":"81d0b9581d8ff512ced3e10f79508960","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/listener_helpers.dart":"0176b9c6394269d0f9247d52a07e3f19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween.dart":"440093b75adbf4e99e7aa71bfd2a7ff5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween_sequence.dart":"03fd3a5ecbeacf2eef5307c0563c7f4d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/action_sheet.dart":"49e59a6967192b5d9740218f1e91701b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/activity_indicator.dart":"c14395142676148716c7216f69b7f115","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/app.dart":"a78ede78f7ae5f6172e5b413a71ab66d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/bottom_tab_bar.dart":"f43b9cb905e533aae1d880a010d80ad0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/button.dart":"ca3e1aa71626dec769f0e4b768a31b63","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/colors.dart":"66373bd38ddf7caeafb30d31ac47ad53","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/date_picker.dart":"ba71009b7a9b5cb82ba9b25f368ee5cc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/dialog.dart":"079779013291480ea6f87d20bf126d49","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/icons.dart":"e6324e97cea61b340defced07acfa45d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/localizations.dart":"43e5780d6d46c911465996d2b7ac5b51","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/nav_bar.dart":"a49566fd166a9ba5d5121c7ac7b4be4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/page_scaffold.dart":"df3f2b34ab41da5f29d6a4c749ae043c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/picker.dart":"bbd6655f4d537021d396e90eaa755b98","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/refresh.dart":"9cb53000913fb84c992aebd00d7fa0ec","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/route.dart":"c58bd169399eba815cc820b9ad582a08","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/scrollbar.dart":"d652015e2102f1a0badc12680a13de70","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/segmented_control.dart":"26d046bbd8b16682a871be8f3d384db0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/slider.dart":"c2b86c966adb2811f8c51ab588b9243e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/switch.dart":"95a40c548c195504a38b8b06aa6725b4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_scaffold.dart":"da4f68e00e026e83499796230ea78443","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_view.dart":"c34f2eace7d735912c198d2b8af1bbcb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_field.dart":"a605b1945603d4c5cc94ae4e136da761","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_selection.dart":"8918d5e7f0baefe02cb1654979ba9593","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_theme.dart":"d85ea612da40695539cb8b0f44938d0c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/theme.dart":"9ff9a12aade499c996a7621a7f3fb0ba","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/thumb_painter.dart":"62c34111b0486fc19a4b23c4ef44edf5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_bitfield_io.dart":"3ecbe08eddf4767147cdeef626968ed8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_isolates_io.dart":"324d15d1ec7d64f353d5a559aefc7da2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_platform_io.dart":"c0faed34294ea620354e660441a638ac","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/annotations.dart":"fa1139e32c3d6a8d79f100fedae44783","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/assertions.dart":"b6e84d49baf8e7f067876aeefba4b690","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/basic_types.dart":"38ee5db8b0b0cec2769b1383bca2385e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/binding.dart":"2e1ddca7e352c6717de7f987463de282","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/bitfield.dart":"69b44e7076610d11ede65ba54dc771e1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/change_notifier.dart":"e8ad204f7b2d7770c19ece4950babaa7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/collections.dart":"2a6c741e9437b8dde28fe60604909e5f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/consolidate_response.dart":"a8c8c614cf6eb3271a7dc3edc2803d19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/constants.dart":"390750299f1c0149b24211ecadec1d90","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/debug.dart":"ba52f91f9699d3fb03b222f53f28b102","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/diagnostics.dart":"6671082cc867ac0b443e1b389ae93387","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/isolates.dart":"95a7fcf70af0383d946a1df454ef18ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/key.dart":"585ee78a67104963366dae47747bfa6d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/licenses.dart":"78cc0b4b0777916e921b5910d0092096","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/node.dart":"0154912a4f4a5509cddfbe6e9eb58fa8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/observer_list.dart":"868c223c5dafe3d64271a5024f104c8e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/platform.dart":"767f003e29f29ae86b5e683756eb7b1d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/print.dart":"8284783dcc724655f5f315a7c2afe767","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/profile.dart":"72f6c5d768fb27932680066def5e4b68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/serialization.dart":"ca3a842951686f2e7a84c00ebd884286","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/synchronous_future.dart":"024cd4bfcdf5c7f428ef937b9fea02dd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/unicode.dart":"e0becc933af9785010df94cd1d9cc8e5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/arena.dart":"701da0b0b65af7f1cf427f1fb82fd98d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/binding.dart":"f6ce20bd64911b8eaaab0885e7e5b436","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/constants.dart":"23d47a96bebd797fb4ea9da98562447e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/converter.dart":"2e7c53c09361dedc38c941d7fd72ff55","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/debug.dart":"35810e6bd3ee04cd1ebb41599f04a62c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag.dart":"410daa5e6778a9a4d9b96ff6c8d85f36","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag_details.dart":"6517a8603b6c9259dcb39aaf8624058d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/eager.dart":"cde0a34c9fc259e0310f3a4881ecea74","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/events.dart":"4e6d93f90c9beaf1430d1b072597113a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/force_press.dart":"9358d684aba69441e0ff8ee23f55b8b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/hit_test.dart":"12892dd8961127b580acaeec967d2c82","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/long_press.dart":"890152bde8e40295749b197d4b8354ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/lsq_solver.dart":"0ef08d35976d21d9ac7af17addccf854","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/monodrag.dart":"4bab2c9c66802a052a2c3b2d7144a623","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/mouse_tracking.dart":"75d021c47684d8c8981e78385b144a93","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multidrag.dart":"be929efd7cf509483f08bec7e43e3ae8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multitap.dart":"13330525a0fb55aef50cf611cc1d5b3a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_router.dart":"18f06e2b1ddef7c7f5e5c276e9622822","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart":"e08cc6faa1f6426ff66b88ab5b04564f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/recognizer.dart":"077266acea9855e159198861cfa06864","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/scale.dart":"43af8a07743dfa5726fe1b6d3769794f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/tap.dart":"bae1e3483bccfac08498e7fe6ae67e71","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/team.dart":"ced89cd13e1e16931c0b6cdc65b1157c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/velocity_tracker.dart":"c8d5dea3b7a7e7916a061fe559f16ffe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/about.dart":"b174eb72f650beddb93ed77dd0733a59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons.dart":"7c1da9481c7121bc7c87ec2548bece9d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons.dart":"f106aa53ae09d78b65b4ac03135e9aa0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart":"168ca64adb8c6cdf60e45bde043ba5ff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/add_event.g.dart":"20af16542571e8a810cd186395b91bd5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/arrow_menu.g.dart":"f94f50e8698119d21a93176fc4c44b8f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/close_menu.g.dart":"62c6002acc31810ae2543be0d2e08636","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/ellipsis_search.g.dart":"51bfd41938b8b348752abcabdb047597","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/event_add.g.dart":"2cebaf609156dc490fa7194d964d83c1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/home_menu.g.dart":"b901b05b406dca4321a72877c931f2df","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/list_view.g.dart":"2d296647363abf39f172bc3b7173916c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_arrow.g.dart":"67d12756a0891915d1ab09fb66a0e63f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_close.g.dart":"032c199083400aa925c3b97db2c933eb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_home.g.dart":"15bd4282f9266acfb9f2db110025ff92","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/pause_play.g.dart":"d1b00952895ca63e03d009b3c17479ac","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/play_pause.g.dart":"d08959a6fba34a3265bf407fbd880d56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/search_ellipsis.g.dart":"12e73d616f876e4c889ce687e9e6db40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/view_list.g.dart":"8912944af54411551b01dd066fd5d930","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app.dart":"35c6f30289bdcd63e2de2924fc489b74","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar.dart":"69a98946100ea0f00eade05bbbd09001","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar_theme.dart":"0840a73663c52c3d4d194bc1c852e7cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/arc.dart":"b71c56e72657cdc05bdac19f5f79da49","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/back_button.dart":"81ee0c21931ab305a68cc59482ef8b6d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar.dart":"316c70c2424e59296cb9cc651b0ac6ca","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar_theme.dart":"1853cd41f2de771ddbe1bdd26d509e13","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_navigation_bar.dart":"12d8bd7ca19f774c9777c16e2d4d65c5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet.dart":"0e6aca0141b1297835d946a8f1445fe0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet_theme.dart":"cc53d2dbebb2e25887819068e7941ae8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button.dart":"da4c3ed5074f8a41b57c4b22f2275660","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_bar.dart":"bd1af0509cddd4659775001a5d0cc23a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_theme.dart":"eec24daeb56834c1fe9cb5483b17b4c4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card.dart":"4e9128e2549388636aaad9f998aff175","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card_theme.dart":"c3f7d012c6d9d17d6a3234a6851a8388","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox.dart":"1efadb58bfbf06fec026d343cc8bdb78","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox_list_tile.dart":"c43b9ea9d6145a3d5bde04df1ac97b4b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip.dart":"db13dfee941604498bae60b77f4396f0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip_theme.dart":"c778d3bdc67ad335a393456701af66c7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/circle_avatar.dart":"83891cab4e96df58d5c8bcaebd6d29fd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/color_scheme.dart":"47ac3cfbc7521ee751523802ce99fa43","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/colors.dart":"e43a46a1ece4e1630c383dc1d7a27a40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/constants.dart":"7f1ca36c86dd09809a5310b5a4cf9a9a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table.dart":"f1d4e4383a3abe1b7ca0efff35371baf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table_source.dart":"fa899e206cac0aa7e2ea1c3b66bfe876","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/date_picker.dart":"809ef4cd7ae93634bc09cb3375affb43","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/debug.dart":"7de48070d048d3fa0981a747114f83ed","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog.dart":"1dc82fbb1ec1b2ec4c49f355442cc658","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog_theme.dart":"bb4ad9ef5dac2faf78f4c5ae0c17301a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/divider.dart":"fcfab4e0f8eada5cfff32ab29812dbd8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer.dart":"5b978e3deb9ce9845633164365ac83f6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer_header.dart":"255e10d04d61b6b245bd45a7f57b7dd8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dropdown.dart":"566ed4f4c46e25261abe8f2dbcb25edf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expand_icon.dart":"1e3f2f41dae2d4bd4db13cc8c19f5496","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_panel.dart":"5aa96843f69fd7046759d1322c091771","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_tile.dart":"86cb755170f8b54df949ff476188ec59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/feedback.dart":"27f34fba51d19772861f094e9e29d092","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flat_button.dart":"1cec046418c705c85935461307f78b15","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flexible_space_bar.dart":"428ea3a1eba3e13a6436de94830e9d65","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button.dart":"f255d871e8a5a51740abcc8471d8faa4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_location.dart":"59300a70f65f7135a0aaca42fb2e74e4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_theme.dart":"f16b5328528bc74b1d6d2d24c62c4991","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flutter_logo.dart":"4722c217333ab91e3c86df19748894d2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile.dart":"3e59c09968f2e5212787162f69a0e5d6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile_bar.dart":"0ef4b1f90e6b2ab3c1c66f13488ce2e4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icon_button.dart":"513159261e9a7e970ed81160f3cae5c7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icons.dart":"e03ae161f4269f5333b8fbf2e8292986","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_decoration.dart":"ef9910564588789a38b66c9e5f8c175c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_highlight.dart":"027936a46dea31028cb0b813c4b804ec","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_ripple.dart":"be834b3f9d11baa1d42c46ac0c52fafd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_splash.dart":"bff9e62efb8aab4c45ff89c72bb6a280","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_well.dart":"3d2868b2042b52aad4f24e2e904279f7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_border.dart":"7fb8426e8fa943f19620d1c68e2b30f9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_decorator.dart":"1f949e26d8d1b2893a8ad7b3a231c589","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/list_tile.dart":"329ac8b16233aeca514eba27b1d88d50","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material.dart":"533c476c6a87abb53c18678d1049e881","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_button.dart":"9f974d8014ae47611656f26ae2773aa8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_localizations.dart":"433fb3eb927f0d649d3077c32e321cbd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_state.dart":"62bd37ba8876f944db31d02edee0d5b9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/mergeable_material.dart":"095f7bb61d5237dffb4eb3dffdc8ea98","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/outline_button.dart":"fc7cce41d399c94b7fc0b68c63044404","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page.dart":"e0adaa4fd3cc7a2a873f0ff73d678b53","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page_transitions_theme.dart":"956c0c1ea3dcc5bec48fef7f896327d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/paginated_data_table.dart":"a84ab8388faeb41175a33352ae1b63d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/popup_menu.dart":"7d7e11d5c98ffe2c8dbb745d6188d868","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/progress_indicator.dart":"c4a9e9ac3a218409d8cc491a6eb802ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio.dart":"a5bee26922ea9c8843878c485e27d532","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio_list_tile.dart":"8b103dd62e4431515b47c1f55bfbfffc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/raised_button.dart":"dcc99bee0b9aa8bcc65c2098390feb6b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/range_slider.dart":"cd7d582fdf07f8593f415e5136d29c3b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/refresh_indicator.dart":"a5c08ffa1e612448ab0c03d4896e2230","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/reorderable_list.dart":"32fd26ca0802d8f186f34ff7b54ffc56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scaffold.dart":"07a33e96fb71b3c723e1d11b9fc4ae9d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scrollbar.dart":"69a2935de82feeeb3097c7993985508e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/search.dart":"45dbd45ab725f7a63be585c697f76df0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/shadows.dart":"9f3591b8be6811722b31e0283994d76c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider.dart":"6ea3dfd9668282ba4d5b69809deb742f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider_theme.dart":"18da5f280eab3b0cf7a54782d886495d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar.dart":"009dd993087bfa149de3902d2e2200b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar_theme.dart":"5f57bf3d79524f5d54bc23193caa2183","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/stepper.dart":"1f940b1b4931cfac3b6a64a1a34346a8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch.dart":"8967f11d5c8efaa7413b4d820975dae1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch_list_tile.dart":"411e9fd65000a4d8a98c20effa37d3ff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_bar_theme.dart":"9569ad43a6a84900059ed04daeeb325d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_controller.dart":"a1e278812beda7d841aa9cdf77e59ac1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_indicator.dart":"f5fd5945aebed13954aa5cfc347c506b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tabs.dart":"c4d9df5d3d17421d149572c6aa6247b6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_field.dart":"5ae2ef6d3fb9fe4153221af9eebcf003","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_form_field.dart":"b27197fecde166b330a6e70903708473","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_selection.dart":"19062ed9674a38e7f0bcade591d1dc40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_theme.dart":"142d3d227c76e1405eba3ae2cd7d2a2e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme.dart":"3b18a2b8534b65d52dd4d056a8443e0f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme_data.dart":"e4130b0cd67c8ef389c6c9a662145dad","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time.dart":"8fab712e2ac883f5b07107e7da074d37","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time_picker.dart":"49b57d1fcb9b950707b082f17f2d3204","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/toggleable.dart":"761af7b3c4c0f0ae5dcf5494f495971c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tooltip.dart":"1df996eb6bbc87c7b8722b31f656d48d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/typography.dart":"0b6757dfe762361d9654b99396032349","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/user_accounts_drawer_header.dart":"5941a9a7eb2d632992491ce75e7360c0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/_network_image_io.dart":"5fc436e396572b1b3bec9033eae7f5a0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/alignment.dart":"03894e79fef0a9f25626e54f8c24fcd9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/basic_types.dart":"8d0e1dcbc1ad02a2d9b042959abcc6d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/beveled_rectangle_border.dart":"1c06150622d7d48fe265ff7c4d4e91fe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/binding.dart":"73fb5d5a4274b0cac515af75487b45bd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/border_radius.dart":"91ce8f75cb4eb84876e9a26b3cae1199","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/borders.dart":"058aa10640fe7277d46de5ecd7b6da56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_border.dart":"4b01d3a5ceb9a294c4a092e5d2ee1848","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_decoration.dart":"6e3056e055a0d476cba1958a01cbf50b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_fit.dart":"8233b9bc0b1afc37a7cf63823ee08378","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_shadow.dart":"d816aca7a2db776090fc24638fc4d31a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/circle_border.dart":"da7d70d4d3bf019e152b97e06ad7fc0b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/clip.dart":"9fee90ebb62b235347e72e81eb608e2c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/colors.dart":"24f786a3a740c7da0e0abc43e66ab3bc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/continuous_rectangle_border.dart":"372f48cbab5babd191c53a34fe6e78b0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/debug.dart":"b4d743f676a33691c2a5c066350e1c67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration.dart":"a968930b8cd407feeb504bdd5a5ce94b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration_image.dart":"6d594be9695b2ccc03932fac80af6801","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/edge_insets.dart":"b827266014c1c8ab32d4c5f5870251a8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/flutter_logo.dart":"4c86c3e7b8250b4c77589a099ae1eb56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/fractional_offset.dart":"5fba5b4485cd0883de26f46159a45cc1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/geometry.dart":"c1483762b3606b2cf20cf2e530f801d8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/gradient.dart":"f20835e708302454a0695021fa6406cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_cache.dart":"39f73ea095a5f4cd6e9015ccaa971168","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_decoder.dart":"d3752d7b3bf30cf27b7d86c1370e1592","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_provider.dart":"1e378ec9e17f668cc7634151d8029b4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_resolution.dart":"224ed714443b3235c931d4e55e1273f8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_stream.dart":"25a283d52b197694fcc1289ef10a7f0a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/inline_span.dart":"b9af5e1a0d235166d4bd71388f01e165","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/matrix_utils.dart":"ad1cdedb6dac18acdde9d8c69ac49754","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/notched_shapes.dart":"a121fd8a12d7b86bfb6965c0daa5d44b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/paint_utilities.dart":"a0610eadee7d9ab8d516c356ad5b9e4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/placeholder_span.dart":"e7041a3df513f8d6540dd60de7f159d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/rounded_rectangle_border.dart":"6310c4bd1ca006cd6490afa98c433ff7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shader_warm_up.dart":"6d15d7df241befab684e560346506f68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shape_decoration.dart":"45c87a8ad4c4fc570322a0760fd4b5b7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/stadium_border.dart":"dbf0e2842ca32c18c0c31d836f8a4bbe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/strut_style.dart":"b4fde007f857d973a808aa9734511efd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_painter.dart":"4bdf5db7a7fac48931287328610ea5e6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_span.dart":"a8268adc2c80dad0136177f4be0f96b2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_style.dart":"a92e70de90921db613d30c7a47c8d32b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/clamped_simulation.dart":"f01d8f65756ffe9fafc2b2e0c5fcf651","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/friction_simulation.dart":"b7ec6635d5b92c66139bc8c7a4ff8af2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/gravity_simulation.dart":"b7dc056fb8f819ee525e4f5fa13d4f66","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/simulation.dart":"246b6e6ae3335e3bd0bdb89cb9756d9b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/spring_simulation.dart":"fabe487da9fbb91fd2a4c89f7b275a4e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/tolerance.dart":"5c3aecd6492a17886933c32fc079310e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/utils.dart":"db2280dc621eea9bc31ad6e4347b6580","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/animated_size.dart":"9057547881c9096114fb4071e6c660f2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/binding.dart":"02562bee395bcf1d500d3b0e03f3f8f0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/box.dart":"5c73a75b607af2f41d8a3055a59a2aa2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_layout.dart":"e1cff6964a5916bec3b85de107d92412","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_paint.dart":"078d57ee0ce1119e711e9a1d2bbb7046","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug.dart":"a3a050dd4095ca54837ace64a7961301","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart":"135d966dc7d9570760573cb7d951ff84","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/editable.dart":"73c8bf432d4bc18171d56bec1a4ee265","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/error.dart":"f03846627b7a8d9d17013b0a872588fc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flex.dart":"a9073bae838b471a9e9af9ad89a24c85","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flow.dart":"87001752ff35e24787615e93d35ceb2e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/image.dart":"88e3c1835a75cbd330b9e28770cfa957","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/layer.dart":"ace84b2dac059b8006166c2ae325cca0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_body.dart":"339c1d653e99ccf25943e2ed99310c19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_wheel_viewport.dart":"b8f52368f185a2e410ff35e4ba6b670d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/object.dart":"5a10733ad76e8d8dea5af8415d0bb56a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/paragraph.dart":"0cd44721b0b7be4c16159ceafd401600","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/performance_overlay.dart":"87e190ad0c19aff7f308f71d47449948","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/platform_view.dart":"3a51a23f0504f5b9b70654d65d63d91f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/proxy_box.dart":"3c1a20d7c17076196b5f3c843137679d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/rotated_box.dart":"0e0836cd4d900c71bc98af8737a6e0cc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/shifted_box.dart":"e015788b06744e8071fa22bccef2fb68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver.dart":"6debb4d5465f522a2aa61e198428cbb6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fill.dart":"57241a3eef41ce29e63512374aba7ec0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fixed_extent_list.dart":"dc92b52b9cf8b21c26ea8bcdc4195ebb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_grid.dart":"76dec0627ea266e8f7bf2cb0756755cb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_list.dart":"aa956c6020b0e8acb0f922cde757e76b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart":"d20ae34d9b0cbbffe91e3e4d638da0ce","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_padding.dart":"b4d6c26f72e6e2d5ccfc79b52ae31742","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_persistent_header.dart":"8ff094124b85c543ebaf4193a89752fe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/stack.dart":"948f89be3dbcdcaf75477f808b346f4f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table.dart":"bb86e67f3a263ecf7bc1ec4d4e977532","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table_border.dart":"6ff729a68a5179b1ec24dbf6fbcf893f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/texture.dart":"e05ded80881aed2dc2cd09b427ce56b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/tweens.dart":"0df8b7d464c9acb7d8db6d1fcafc50a2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/view.dart":"f26dfaabe89eaea6a8156e257ceca6cb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport.dart":"f22e3abf5b073b4712b6609800fe6d7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport_offset.dart":"2ee1bd1ac4cb5069f9f0874bec2f2646","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/wrap.dart":"5d8451cca314dc8cd9618aba5f550fe2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/binding.dart":"c5cf1299cc1b0b75fa2741f3be8446cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/debug.dart":"ebf21c275c54dd4807bb5de73a11b1db","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/priority.dart":"567f3b7a2b393047c9c4eaff3ebd8204","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/ticker.dart":"7898b2caabb1fc604ffc4c6eac4a0fff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/binding.dart":"97516f191a11e9dead089f1934319e55","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/debug.dart":"f9281640bdab18ef26bb28422002a1d1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics.dart":"b5a22c3fda7885cc5dac1c6134fbece1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_event.dart":"f7b6bf6a77e68e5ee8e23b534d8f5d97","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_service.dart":"dc1aac8e63078348d4daa7f202f23880","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/asset_bundle.dart":"27ec303c08479305b763eb18c5fafe7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binary_messenger.dart":"76aedf29cc3a753561ad23749ee0ba82","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binding.dart":"899ae3bea93172ae980a078597d94c5a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/clipboard.dart":"ee417ab33bb4cde85726cb45e0b9dff0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/font_loader.dart":"130fa0b09606b933f28d2016038c9b2d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/haptic_feedback.dart":"23b04c8264683f9960751dfd559e6a1c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_key.dart":"2f1c7193550014e8d72a4e69590cef8d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_maps.dart":"d6beb638c227973aef31509118e7ed67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codec.dart":"1e45c4e05a1bff0c4051a1928021b7fc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codecs.dart":"564afa6ead81b897d2edb22a0eca1dd6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_channel.dart":"1879335cd3ee180b8a4f086033d5314e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_messages.dart":"7fe68c75b7b5ead8dc2b9cf6bbe2dfb8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_views.dart":"0e40ff4dfdc22b55f96a7d85d5ffe2dd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard.dart":"f0dba1965f654db43e823e88ca89bad2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_android.dart":"f55accb5f3ee67c98e6d29048a129cf6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_fuchsia.dart":"494efd1f44e4b975303d8033a55cdf32","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_linux.dart":"b36fbc49a08e321330d1f01a0e4a2acf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_macos.dart":"e965d49e21907d260728ac041ba37354","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_channels.dart":"474f73d821054f4e6277a6121c0d37ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_chrome.dart":"916c3bc524fdb78dfa40cb446e9f408a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_navigator.dart":"41a6d6721b3bde81341aeb025f395228","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_sound.dart":"a3870423819eb66c48982ab5d37e1fb9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_editing.dart":"d6adb784845395a2c218bf6bce7ff4ea","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_formatter.dart":"0a9e2d453c841ef912f708acf40c865e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_input.dart":"27ded8d6a001630946d2e6f0ca46f15f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/actions.dart":"c8d04a98169f7f62fe56df3d9a255931","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_cross_fade.dart":"04ba0c7ec193c36dcee5e1c01270bf09","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_list.dart":"b0edf592005aaabde36e33c0dab5f377","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_size.dart":"71ee8969393727646eac7e7621455942","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_switcher.dart":"2793dcc7bbc7adaa980ea5ccebdd28e1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/annotated_region.dart":"d326bfa8d8139966e80bf4449483cadc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/app.dart":"c61ea7284bb659d5b3ccb9a405ed69b2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/async.dart":"1b398f0d527af532d007740d88d08d10","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/automatic_keep_alive.dart":"77f164655bc7d7d3f2ee8d265b71ae1a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/banner.dart":"2fd9d96175fc3081aeb62ae5546e1b8c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/basic.dart":"b52dd1d04fadfc8e0b6fe40942c3610a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/binding.dart":"a95f242d65568a71b851a182b26e02f6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/bottom_navigation_bar_item.dart":"44538312200383fab04ac420d113d202","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/container.dart":"edbde2b72d3cec816abc7c639ea0d298","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/debug.dart":"c3b4c36e7070604c187d533ea74c220a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/dismissible.dart":"94b3cc034358d5c0703182d79accdbbe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/drag_target.dart":"f8c4fc034560221d72e511c77d4c2448","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart":"3ae5d07c77fb7e9f1d3eaf1fcd8af774","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/editable_text.dart":"3e00e3f3e0afa9b1ddf152f07fe86f45","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/fade_in_image.dart":"100edca998e4642f79ab0deda9ea8b4f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_manager.dart":"7ea85bc5bfc345b3b336488cfbf78130","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_scope.dart":"2c8d194e5bce606050f47ac3de35dc56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_traversal.dart":"d6e67b64898be3855a72ecb9b0db98f4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/form.dart":"5d579e17460f7097cf6bd528089e31ce","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/framework.dart":"c5b0a71c2ec3c18656a4df9120f7bdfa","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/gesture_detector.dart":"324add70fba0691e08f5ee5dfadd69df","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/grid_paper.dart":"938e9d9903371d71f63c987dde913229","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/heroes.dart":"ead0d2296f3bde59367deaf91b800bd2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon.dart":"dd568787956a3bf0c1413863ce53764e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_data.dart":"b6e8eb19cb54c1910d3ca3f49ce6f1e8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme.dart":"19cd8722ba544e92dd31345cd6a32559","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme_data.dart":"2ddbce2c566c758634bd291bba246ac5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image.dart":"569f084838c22a83ef707b36780b346c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image_icon.dart":"5708731bb3e68c27d4121e9c45336eb9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/implicit_animations.dart":"a397b93ebb1efd68877d91d657813e9f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_model.dart":"9dd2e158a30b68f13703cf3932e16883","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_notifier.dart":"771eaa00bfe798ab2b62ab030659113a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/layout_builder.dart":"c8c45e9198b26810925ddf6ead72d3ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart":"ac323615f238c5709849e884fe9f5f67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/localizations.dart":"e5feaa3a9881826687bd927f9959d878","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/media_query.dart":"b7c3e100bcf629c370c0ddd938d1841c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/modal_barrier.dart":"4148b1d69b2f2d363def9038515ee192","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigation_toolbar.dart":"e0e71805490e49f0d3887fe3ce0f78a1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigator.dart":"f0cd4b235e1beb768132b92ac5266a7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/nested_scroll_view.dart":"968b93d71c22adc561716cf421221ab4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/notification_listener.dart":"e011b91fa2ac1d8baee03bfd35e3c0e5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/orientation_builder.dart":"7a31bc9d0306a86efddbefb432d82a88","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overlay.dart":"3740adfbb898276effc7f16301125a66","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overscroll_indicator.dart":"3a9dd60c9ba7397b2c04fc03ed8fb29e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_storage.dart":"dc83ac4cdd460d5d6bc24b6f940d90b8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_view.dart":"b66f6b35c7b700f9b4d06e85ccca19f5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/pages.dart":"c29e8317afd015cf20cacb3c62900286","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/performance_overlay.dart":"8de697d160c94b93b60ce8c812f1f5db","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/placeholder.dart":"49e7dd8c481982986f2833461e7d3aae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/platform_view.dart":"95a019256fa8b950815d749968043b5b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/preferred_size.dart":"b8b88537f15990cc694e594a590b9154","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/primary_scroll_controller.dart":"6b120e2e88c589e86d2bdfc6e7b94203","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart":"c55f705e03dc7e663d96af0252d882c6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/routes.dart":"ee016e34cfa3dba34c710e00641420e8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/safe_area.dart":"9232afa5264f123cead11f35a86648f9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_activity.dart":"95f5f396516fc430684684e620b2fcfd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_configuration.dart":"e3f16c31c9690652225688cf3e4a2085","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_context.dart":"e8986149c22d8b7baa70c10dd89e0287","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_controller.dart":"8d581b0f7fa2a2fcd54058b7e2309bcf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_metrics.dart":"23f096e7434299277e1d74a4309eb3d8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_notification.dart":"0f15e5c02aed2efb346430db5d250902","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_physics.dart":"f68de5eafa560c67f1ff19e165b1e302","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position.dart":"dbdc1ea5fbf87734832e4aadb9667b7e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position_with_single_context.dart":"70446d572bfdbf39511496f805452500","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_simulation.dart":"558a397f9ef9fe0cb7d13d1df149b604","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_view.dart":"2c8654c5fcd1d46e4e983a0b98600405","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollable.dart":"9faae20dc2d13072f20c201a19bcc61d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollbar.dart":"845669fe7cd96415f6f7bae2f0644223","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/semantics_debugger.dart":"990a4ad7adcb216a133d540ba6df9b4b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/shortcuts.dart":"a72eed7f46581c65c8aeab380affd665","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/single_child_scroll_view.dart":"201de2fa268b25b09968ffc1ddd41876","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart":"886bbb3e55158733c5015ffced1ad5b8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver.dart":"e0bb4876927ef1f89bcce117ea7a11b7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_persistent_header.dart":"4285651407ada24192f6c56278cc904e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_prototype_extent_list.dart":"bca05ca8225dff0dae8b72ace97cfb1f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/spacer.dart":"24da21561a961bb2886b7573df3901bc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/status_transitions.dart":"55244a8b1f3d6c32cdc0c698570ce392","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/table.dart":"9d34d209059c9fe36f5284b406696a8c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text.dart":"9562b12c85e3ae4f39a675b450a1a3bd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text_selection.dart":"e65070b9d2e55cb4927f66af33e72c3c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/texture.dart":"b88734d65ec182433d94c5d7a0df76e2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/ticker_provider.dart":"486884b6944c98e53db078634d0b3aa2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/title.dart":"7cc855203b8fb69e6913cd6a068ecb59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/transitions.dart":"73a384a041d65e145a5152880c0d9e20","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/unique_widget.dart":"29c950640aad59b2e7ed27b7fbb55799","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/value_listenable_builder.dart":"e0a035f9d4fe7040fe6c8b33c97a9ad9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/viewport.dart":"9507097275919ac9c52f6a8ccbef418e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/visibility.dart":"22d749241590cbe5c0294e5c70d60679","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_inspector.dart":"3c0e8cedee6e1144d04075dd6a2811ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_span.dart":"33e31d4e51a5c2e66433c45381da41a5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/will_pop_scope.dart":"0e5d8c8839f17a64eacd1a7a3b9afdb9","/Users/apple/Downloads/flutter/packages/flutter/lib/widgets.dart":"2e185d738b6d7b4f972aa541c9271556","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouter.dart":"8c0d515101b8cb14fa5c99ab4dbc4e0e","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouterImpl.dart":"a42651eb9ea4696088dafac730531b5a","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportModel.dart":"680a357ebfa1d84d8b07cf378af7b874","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportPage.dart":"1436cb8b86f51d310aa7674560df2546","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/ActivityReportRepository.dart":"b810ba03bf12551120a9beb902b3a976","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/local/ActivityReportLocal.dart":"972ced6979a92b9032be46b81279cc83","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/ActivityReportRemote.dart":"4453f3cd68d545c4d70f6895345622e9","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/api/ActivityReportApi.serv.dart":"78ba76436df7a7a6a7e200eb823b8283","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart":"feef4f75338e3051106352cbf4a7dc2a","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouter.dart":"1bcec3d7ddf5bf93fe652ee8791750f2","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouterImpl.dart":"d22ec4e245d39a67b8be9a182aa9f4ee","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/bean/DirBean.dart":"15be231069b95086dcd7d37384a6ff3d","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumModel.dart":"5d3b2a1d6e6d6a540501cf7360fc3448","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumPage.dart":"152903fc6d3198bd94fd35e514b1409a","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/repository/AlbumRepository.dart":"f9a938c19807c0c9235e8a7dec3d2b8e","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterBaser.dart":"0bfa365e3c72aa0c078ee0647bdc8eb1","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.dart":"763cb6666de7f9fae851ab48d77170e8","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.mark.dart":"7c7fc5d45f65913fcbb8ac45ce4c74eb","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/Router.dart":"7ad48b160fae87279736a0403b13e4c5","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/RouterCenter.dart":"252f45ae25b4d66229124d4f04eb5006","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/User.dart":"1bbccb46be0d476614bc7139f65211cf","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/UserCenter.dart":"4ab78f08120142e65e71aac9b4adbd65","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/base/RouterBuildItem.dart":"f7fe83f4ae640eaf2319b144270d0aaa","/Users/apple/lsy/gmalpha_flutter/lib/Error_Page.dart":"9d41bdcd6ebc9be71e9546a26f1a6248","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeImpl.dart":"0292e3faa17865b8c6cf743a9b0741e1","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeRouter.dart":"6022fd83bfc1fa5e269315b02920bbb3","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsModel.dart":"020c955795291623b975288e74e691f6","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsPage.dart":"2ab22d773d94aa3e5485953e81a2205c","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/PrestigeRepository.dart":"b0aa8c7806c416a8ec4d66fa3c1832a6","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/local/PresitigeLocal.dart":"0d0489299f9fc546eeee4a2e8fed74a8","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/PrestigeRemote.dart":"b5392033dfa3740abe6d6f5adc548ef9","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/api/PrestigeApi.serv.dart":"870a2a771ffc5a93742080d4ba4b53d1","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/entity/PrestigeEntity.dart":"98c2d29c68ff999bd715fe5110577e8e","/Users/apple/lsy/gmalpha_flutter/lib/comment_suggest.dart":"ad23ea084fd4d4a7970b014bdf9e1db9","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/base/Temp.dart":"fc52968af84838490aefc98a77c12af8","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/list_item.dart":"d1e669bee2716b905748e4a5509d4310","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/BaseModel.dart":"47cf4cd80028e1c52872e2acf226090d","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/LiveData.dart":"59cae64366e36d259daacbda85c56695","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Api.dart":"11b224a9df1c918bffd65a1d92ec6767","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/DioUtil.dart":"86567c4aa32579285c9409fd28b23898","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Responce/SimpleResponce.dart":"d7cc29e2636806e9bf7e0f34e29602d6","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/toast/toast.dart":"a806ade95cd903cb22e7082cdba5252a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALColors.dart":"3d3d7f6792f8c649a53597163005f55a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALDevice.dart":"99c881b0f039a1b20b196e715be35328","/Users/apple/lsy/gmalpha_flutter/lib/main.dart":"ea712771c43fb0b35094a2c607315b6c","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouter.dart":"674eaca9b6ceb20eb2405df799feb130","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouterImpl.dart":"66f58e702fdd53061f85ccc3c6877c3d","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_home.dart":"9c7d129b2c078de70bf53275b1f768f2","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_item.dart":"dbe293bb70546e382926d1aa4b368546","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_notification_item.dart":"c83c4c140aa1f4c25ad01b9f75068e33","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/message.dart":"c401d6b4aa6bab3ad6b5c86a7c577c67","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/replied_content.dart":"e4f4693abaecf02682a408c39d066791","/Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouter.dart":"82888e971db8427d4e06d2aee445e018","/Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouterImpl.dart":"13bf44c368231f9a767a39999fde0ae0","/Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPage.dart":"a2ac4cb070f4a2a4fb2fd302ea89f9e5","/Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPageModel.dart":"0681055bd59f1f27429020c9e0c1911f","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/UserRepository.dart":"03e5f698eb112f81b6bed6620bf4f284","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/local/UserLocal.dart":"156bfe1f12f35bc4a0e292d11186fc8d","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/UserRemote.dart":"89631099a046d54a42db1554d0d3db2b","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/api/UserLoginApi.serv.dart":"103fe4b2b3a6e1fbea143c84fd6dd52f","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/TestUserEntity.dart":"04ea2430e4f67426a527d0ff9221802e","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/UserEntity.dart":"9f99df2279585c5ead58b6a763f46397"}} \ No newline at end of file +{"version":"20e59316b8b8474554b38493b8ca888794b0234a","properties":{"entryPoint":"/Users/apple/lsy/gmalpha_flutter/lib/main.dart","trackWidgetCreation":"false","linkPlatformKernelIn":"true","engineHash":"fee001c93f25a1e7258e762781a7361f122d29f5","buildersUsed":"false"},"files":{"/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/ScanImagePlugn.dart":"3600697f2edebfc20dc871c3cded9b87","/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/SharedPlugin.dart":"f4e09ab9cc4175296b460ddc561c7094","/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/lib/gengmei_flutter_plugin.dart":"af0d83d10ed34d8b81e14ad64b6c8aa7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/async.dart":"2dbac28f1d3ebc42a756c147d86215e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_cache.dart":"8aa37e27f8c5ea926a4002642a4bce44","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/async_memoizer.dart":"4f3ef5192878622b364129997affab43","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/byte_collector.dart":"1c702804e15eb566e759c642be2d8cde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/cancelable_operation.dart":"7a49eede758199c8a506d7a5d446fd80","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/event_sink.dart":"524cadeeed2de1f0a327c9302ce0bd72","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/future.dart":"f775cfa3ced4ac63e8e33e8a0e118222","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/sink.dart":"68ef65917b7d67120d64bd3b84816d9f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream.dart":"381c5b353d382ac196b76dc6d0ea9cde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_consumer.dart":"a6db60c8c2c0ccef79ac745625e0d512","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_sink.dart":"b896c9a8e80f66a72c27b296995889b2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/delegate/stream_subscription.dart":"6c296b440fe228011267f955563a084e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/future_group.dart":"f72393069c6816d25c1ba404df0c4b4b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/lazy_stream.dart":"ddbe5e30035e7b46c4a0a65b2a46d9f0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/null_stream_sink.dart":"60469307679736882c330c9ef686dc79","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/restartable_timer.dart":"c157246c6746b95486172dd3b819065c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_sink.dart":"6013fbcbdf18569c3e312fc32304bba4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/capture_transformer.dart":"95a7523c9b56392cc59bd3e2f4edcabd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/error.dart":"e87d282f3c3ec3a5857fe11fac09383c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/future.dart":"e64cadb9309c99dd6da92de702be09a3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_sink.dart":"3fbfc597e4dbf734a1ebf75f9f9df11c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/release_transformer.dart":"4eb139917cd3aa71c11db80ee77fb906","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/result.dart":"635c1675cd8fae0583320f68954030ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/result/value.dart":"2895f074cefb939aded79ba163f13cd5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/single_subscription_transformer.dart":"4df1ec9d597a7e1c95a8772b05fdf566","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_completer.dart":"fdde02ca45ad4b35ba0fa470db4d1824","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_group.dart":"9025de047f16d023f170549c302c1855","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_queue.dart":"3d60290b9fbb971d90c6d045b41b6682","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_completer.dart":"91f75cc77f82a3073b8f7b938cbb3d9d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer.dart":"07fdfbbc49aebfe0dd20712a8f4275a3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/handler_transformer.dart":"52bbf0f501c67f7b0566f38e4245c334","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/stream_transformer_wrapper.dart":"a867f44fc7faf292605617755131533b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_sink_transformer/typed.dart":"5345e84fc427967c14cfd573e2b03ffb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_splitter.dart":"b5e8d212e3e0892204e5bdb3bc07e823","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_subscription_transformer.dart":"fb92bad60ed759a56d27469c7bccb252","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/stream_zip.dart":"a444b26f08c0ff4f96cfeeb2f7ba3a78","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/subscription_stream.dart":"56d586543414dd5deb79b43ce1caa9b7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed/stream_subscription.dart":"c0ad4265f563c91959c013811b31abdb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/typed_stream_transformer.dart":"755acf813f42abc3f98c86749fee007f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/async-2.2.0/lib/src/utils.dart":"c79d5bbbfea0781202244dd9d4e48ce2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/cached_network_image.dart":"85f4a95a416058b8045bee42bd581368","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_image_widget.dart":"e3a4e5d84a773e08d9a3b137c4031ac9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart":"0e3cf9e712c31412ba1efc780953abb2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/ascii.dart":"271bf3dd563b659c61d6eca340b33304","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/charcode.dart":"9cb5ad026b874de99c63dfc2f62025ab","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.2/lib/html_entity.dart":"ce3f4aed44d86cf98419895d10bc32a9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/collection.dart":"2f8109a8faf44e85899d338bd207783e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/algorithms.dart":"cf24d286aede10b2bd58120712516f7f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/canonicalized_map.dart":"eed869aa9b574a6f57b44430899c3479","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_iterable.dart":"8a565e909f52453cf6be8076bf8fad7b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_list.dart":"c96801c7bcce7b1973226992d857fe11","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/combined_wrappers/combined_map.dart":"b96cb7f4dd8b918f4e76f68c5df3df30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/comparators.dart":"f675d722bdaeb326e980dc3cf11a20ee","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/empty_unmodifiable_set.dart":"6155717d19959066d859a2f86adba256","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality.dart":"6a06e909eb3ca98272bdf32acf4ceac0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_map.dart":"be36f7fa7a508e1f07b8af2104c19e6a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/equality_set.dart":"c7441336d9cb2dccd512d2d50021f644","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/functions.dart":"e22b39d6908a517bfc69579cbccce384","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/iterable_zip.dart":"4179dfead1b2235568dcaf19da4fe4d6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/priority_queue.dart":"21b3082cb9e51ee9b7e5cbfd6cd25218","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/queue_list.dart":"2bb6fbaf59b527320f7da4c220f6f8fa","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set.dart":"a2a56457b7aa80360ff6d1282b3fd229","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/union_set_controller.dart":"09b5390fecd60faef5525706add8e4e3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/unmodifiable_wrappers.dart":"152ce0ab2957a68f1d599241bc91a39c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/utils.dart":"f3acc8afd91ce3e9d6ef5502fc828911","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.11/lib/src/wrappers.dart":"c9e04f6a3aeb949f4a104b856777f6cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/convert.dart":"448f58ecbcf99bde88011e35ce6d64de","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/accumulator_sink.dart":"f8d7cb5863c0c838ca30358a197ff5e7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/byte_accumulator_sink.dart":"f3fa0fad2b5124625922a93b7aefc3e3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex.dart":"1eaf2f6041cfc8e0b0724e46b12153cc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/decoder.dart":"f8f701bbaf5dd8acfda8f0a51538c510","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/hex/encoder.dart":"2a4007566bec9b6bbd97b20ce57c2d16","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/identity_codec.dart":"5de82deaa06571a19a5d7aa023bcd249","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent.dart":"f91ee57550a40ada794abd698999842b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/decoder.dart":"6d103e2d441caeb53cea9245750531a2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/percent/encoder.dart":"635e4a01dbfb472635d0717e134db6d9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/string_accumulator_sink.dart":"b63cd3581c2d6b02511b6ca7eb281eb7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1/lib/src/utils.dart":"0d1123ee7f35766c9e21c6dc72aa77e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/cookie_jar.dart":"a925dfe5a9e37926b4194c84ff3a5b74","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/cookie_jar.dart":"eaf15b37ca608bdd6826ec3b83331511","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/default_cookie_jar.dart":"503f38ea0b2927be7eb00f2d1386374b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/persist_cookie_jar.dart":"25bbecc7763198801dbc1c57bcba57cc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-1.0.1/lib/src/serializable_cookie.dart":"d6f4e39293d06a537eb7e527d6a9623a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/crypto.dart":"3b0b3a91aa8c0be99a4bb314280a8f9b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest.dart":"fa73ebf9c9301bc31c41e27023e11e18","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/digest_sink.dart":"cb951cf55c867048b8819d642a04cfeb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash.dart":"29719495d8d720b0a4a1e3b1228ec142","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hash_sink.dart":"9e271be599fe62bedbd1f7159fae3e19","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/hmac.dart":"3b18c0e32a1f0df8afad0f18499fc6ff","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/md5.dart":"cb88b599d88e0eaab731c74c6e6e4f4d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha1.dart":"19edfc089868d07313e54c2a66146530","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha256.dart":"bda3362310595c3bbfd2b24b97e417f7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512.dart":"98dad8d8d55204e0d953a4792a462d5e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/sha512_fastsinks.dart":"bff7f6192bfc9db4827aedda7dd7e214","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.3/lib/src/utils.dart":"05778db9e882b22da2f13083c9f28e0d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/dio.dart":"c82c5c1b1af300a254466fcbbcb1da27","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/adapter.dart":"b89ae3ef19df708a687d77aed9ad4f3b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/cancel_token.dart":"75565c79f70f73053cd64db77f9348cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio.dart":"ac1e582ab692e558d4f198cdfabf25a5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_error.dart":"84ebda7f3545014ed3f06a37a214110f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/dio_http_headers.dart":"ce2195f17ee8f7f788807d2d767dad1a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/form_data.dart":"2d9370f50548e83d08a5b11e5584f655","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptor.dart":"7eac621142883cb2f134af2489c23eb3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/cookie_mgr.dart":"73f3285c140ce3c557a2328ff58ef406","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/interceptors/log.dart":"cd661e597244d3ac98467f05bb97da33","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/options.dart":"ded3622919bbdad69f3eafc10d406a7e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/response.dart":"d8d70794e2983e8f1f26ee35e7f21532","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/transformer.dart":"462dee9ffc8aac0154052f5b3a73bc53","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/dio-2.2.2/lib/src/upload_file_info.dart":"db498d163b6c1b99eb9c70d4c5a7800a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/fixnum.dart":"8c4ba305d8addfa87980394d43006e1a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/int32.dart":"d2925f51391673b236d7c47a4bd7c31e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/int64.dart":"debf00067e343a017a3f56a86ad17f58","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/fixnum-0.10.9/lib/src/intx.dart":"0425bbbde4ff31e67136ada7739a3dcd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_canPop.dart":"3fcb199b71e2772cc018557a844ce46c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didDisappearPageContainer.dart":"532d6dd1b8909beec0dada9ca7cbd400","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didInitPageContainer.dart":"50f8e9955bff8430b9b9a2d354e067e0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_didShowPageContainer.dart":"fa0535d0fd2cfef5dc24741c7dc671b3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_onNativePageResult.dart":"e5147c2b3a0d0d19e3c9c258977de9d4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDeallocPageContainer.dart":"45e1058efb95a16f6faa798e2bc90aa5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willDisappearPageContainer.dart":"66a15d42fc3db2989562aae01cf1ba5b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/handlers/NavigationService_willShowPageContainer.dart":"2e345fb22c30506a689fb287dd477834","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationService.dart":"3a00ed103124190507c79101b2440973","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/NavigationService/service/NavigationServiceRegister.dart":"7e5f6fef95493cb116c2ee70fba03977","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/AIOService/loader/ServiceLoader.dart":"c5a78ea46902c741ccab1ddeacb4d8ef","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/boost_container.dart":"ee67828e1d5b8e72c5ef4ded7af1400a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_coordinator.dart":"09e0d88b674103c899e8cfbf157443bd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/container_manager.dart":"602a5af9652d3d1e5a9fbc7817276752","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/container/navigator_observer.dart":"b861721e2a0b00e0408d662aaf5ad615","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/flutter_boost.dart":"1e89233e44dc9a4bd9a50c5681194967","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/message_proxy.dart":"a5a0469d69c8459a56e1be305a852b62","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/native_page_container_event_handler.dart":"db6fee8076c0bf5ee462b84cc0122b8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/messaging/page_result_mediator.dart":"bbe236c0889a6fde0d9118f99075415f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/observers_holders.dart":"29b18dc245f5fa5c8192a34456663577","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/boost_page_route.dart":"77a2c56830ba336aa6b75df9ce763430","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/router/router.dart":"9e33540a510a6e9d54b854b7d2f8cf5a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/lib/support/logger.dart":"87d5caca7deea42c2c8c0b573fdbcc5a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/flutter_cache_manager.dart":"dbe76f09e608d1ef7908724148578fd6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_manager.dart":"1040e83dd7d6a62636aecdbb5ef32f3f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_object.dart":"ea89be9a132ec7d592f788a3bec3fe3d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/cache_store.dart":"b8db7a3b2521495d4f283b2c37431027","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_fetcher.dart":"5f524a018bbee10b8871dbae4055e7f6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/file_info.dart":"7d3099a3e964cc9d48a9f69ca3c5f23d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.1.1/lib/src/web_helper.dart":"59fd4043d1bf707302786ef12d2a6ac4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_screenutil-0.5.3/lib/flutter_screenutil.dart":"5c8c7bf7ae0a11e8c9cea872865795b1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/auth.dart":"aada19ecf35c8b84e85ef1d00b806633","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/auth_io.dart":"1ae9940c8a8eb9563602fc8130ca0d02","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/auth_http_utils.dart":"cc01d9e9d311a09b4c92a8b06e48785d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/asn1.dart":"7ab14d1d76451fc9ac659c41172368a1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/pem.dart":"ec331bdbb21e3362b167fa1ff3cb645a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/rsa.dart":"306f35dbd8e5d6b0ccfe715364d28092","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/crypto/rsa_sign.dart":"8578cdc61b28466a0e4db9e338947fd7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/http_client_base.dart":"9799ca77a82333233cb13285ea954919","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/auth_code.dart":"a57cd18f25376762c0178d27fb6e9790","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/jwt.dart":"284e7f377bb957dd2cef4299af3f50a8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/oauth2_flows/metadata_server.dart":"0d22003ea4cb910f961a3cae47f4c2df","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/typedefs.dart":"e04e3c509df3a8205331e13d4c9762bf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/googleapis_auth-0.2.10/lib/src/utils.dart":"a328b9df0dd5eed6cf214ee1d21f66de","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/grpc.dart":"ab8a9304fc222f3b0eca6650cea7fdfb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/service_api.dart":"25dc9b014aa98160573135ee65dd359b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/auth.dart":"34cd758b46a1a576e0d785064d7b8c0e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/auth_io.dart":"ab0d0c4b775fe20e167bbf2d7c40c211","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/auth/rsa.dart":"d15715987a108b33dae8e5b83ed8a055","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/call.dart":"5b891f0282d4947296418a035534fe84","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/channel.dart":"e6799bcadd582f6aa44bfb7640782e14","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/client.dart":"9a27c459bc74ba53b5a1c7dd174e4b8a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/common.dart":"219f85a33ce1688e44bd444ad336473b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/connection.dart":"a99c5fe088ccfd284580ea4f042af0dc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/http2_channel.dart":"00c598c72a3bfcde382371c64a0888b6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/http2_connection.dart":"25974ce390710174c505e35930235d1f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/method.dart":"77c71e474b95780bafac418bd60b16c9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/options.dart":"d88662af3be450216f77145905e52845","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/http2_credentials.dart":"8afe84fe43a075337675f0e0bbc14f5e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/http2_transport.dart":"cc83c33acb82fa62d3ea54778b3e3f38","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/client/transport/transport.dart":"f278bdd51b4d7537549121c871540593","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/call.dart":"91d141b98561de131a13b98626bae63e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/handler.dart":"08450da0092d08b1d496e6eca0ce700e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/interceptor.dart":"585e3820355c232e8ed76f59d3aebaf8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/server.dart":"d368acfc43a24b91e6152e7d074d43a4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/server/service.dart":"1b9bdb00dbba8ca973fd0521da4985de","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/message.dart":"da5e5931c8b39ebeef28faa3a39d1fa6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/security.dart":"19601c034ec5cf585e56bc0dbfa7c8dc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/status.dart":"203df302129c769e2f7a87ffbe83e583","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/streams.dart":"b49a0e44a7846d223c11027eb0b7b251","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/grpc-2.1.2/lib/src/shared/timeout.dart":"38e0e3905cb7a169a83bef4365995424","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/http.dart":"08828d9c933d834becb6a7e21bbfff08","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_client.dart":"3a77af8769598c6d2ffb70ae51b53510","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_request.dart":"0d6f22dd09103beb8c699e9fe64fd21b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/base_response.dart":"2361058277135eb85e3e801bc234cc7b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/boundary_characters.dart":"402f9ac94be7dcf37d174f6479f95cab","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/byte_stream.dart":"ec0fc214ffe2c453f041f29a518ce202","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/client.dart":"8d932e6f8f662fccf2b18b4fd42aed82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/exception.dart":"3a586cb9dcc071948d59c9c72c98f530","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/io_client.dart":"e5ce8b1e5dd8778e87125175b38221cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file.dart":"2df06920e85c10188ad4fa1d5f0c1d30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_file_io.dart":"78e50ea491d00eaa108fccc6d35917b9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/multipart_request.dart":"5b42e5536f34f2d69e104652bfeb2b95","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/request.dart":"7665a8c93f178bc59ba6957043bb7d7e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/response.dart":"27e4125210900683fc648d1d80511f64","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_request.dart":"1775199d960cf536196d15d8bf32c537","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/streamed_response.dart":"fc64433b8ad10c70f2020dc5afdf149b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.0+2/lib/src/utils.dart":"df131f9089e1606b924153c74f849b83","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/async_utils/async_utils.dart":"a1c3ed7618074d9cb41ccf616a610378","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/byte_utils.dart":"dd19e22b7f7f53ccda594b62bb8bb9f8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/connection.dart":"11040d48c1f0ebdca2dfd2daf2cb7498","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/connection_preface.dart":"523f8171ab84e834a13629ae418d1a04","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/error_handler.dart":"0f4f1bdf6a744fd87615370b23613864","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/connection_queues.dart":"7cb6fd6eb84e528b7fc28fb29e75f313","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/queue_messages.dart":"19cda08f54e514e8223d0fefa81e9e0a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/stream_queues.dart":"ee0efb9244a84bfd7757cda163b8734d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/window.dart":"c6a8397514b978a661153bef38cf22c7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/flowcontrol/window_handler.dart":"031d24be5be4a17a23f6e6892e00d069","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_defragmenter.dart":"37ca11a5b4f09ba2465b188c60072645","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_reader.dart":"38932514afb3a1a0736a0c514e737762","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_types.dart":"719aacd8dd8a94acbdd76499caf9421f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_utils.dart":"28d9d5649656ba2715dec8cbcde1e6b3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frame_writer.dart":"e4c7885f04b835e4b397af68f561c0e8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/frames/frames.dart":"77fc0cd9c71f011e5383b30d0d1ba3ff","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/hpack.dart":"c68a862b62512fb6ce9e6860c6978d9d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/huffman.dart":"20fd53812428c7b2b19ddd39e916bd35","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/hpack/huffman_table.dart":"a5139bb54d5f732c046b455da664f022","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/ping/ping_handler.dart":"d72f5291d65fabdb13859fc4732963e5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/settings/settings.dart":"d964dfd8c526623e0f033c77ee0854bc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/streams/stream_handler.dart":"ce7dbce987a7f9965a2403a29a7ce7f1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/src/sync_errors.dart":"384c172c9a26efbae35f8f16d9e6bdd2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http2-1.0.0/lib/transport.dart":"e262da2e7b7d4048beb164542f4c95ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/http_parser.dart":"b76ebf453c4f7a78139f5c52af57fda3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/authentication_challenge.dart":"702f3351921a89aa538130c3988813db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/case_insensitive_map.dart":"9f470db3ce6d2de00032575b391cca97","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding.dart":"ec8126497cf52be10f8cc7e567499da6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/decoder.dart":"1e094096f205898f9dc237104e32ed82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/chunked_coding/encoder.dart":"c3cd27c6aff4ffc343af41e55d1b3d68","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/http_date.dart":"54ae62a912ab3e80b07758985fa39fba","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/media_type.dart":"a876062b5fc391c87ea9f013de36af5d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/scan.dart":"b4b360021d726b7bc1692299112ad1ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.3/lib/src/utils.dart":"629ee5c89b645316176463b16c74c366","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/json_annotation.dart":"81bf66efd6fa78bd86a272b19c5bc3ac","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/allowed_keys_helpers.dart":"d3db043cd4f2391df6e2768a64446e75","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/checked_helpers.dart":"00d207c7310a4b4abbfe453b272535d9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_converter.dart":"6017bdd295c351a6c2f2ee44fcf25b9a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_key.dart":"91fb5500b87502a27f806ab1d939e451","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_literal.dart":"5684d2fab2b99fcf58419f8dd3f44fe7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.dart":"7a2715e43711ed70b1fb16b31ea0f543","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_serializable.g.dart":"beaa6c0dc7f7aee60e0a301abcd4fd9c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/json_value.dart":"002be4c072c0cc5c5e72b5ff6d0c490b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/json_annotation-2.3.0/lib/src/wrapper_helpers.dart":"2f2bca0c3499c7f452a003e040f62037","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.6/lib/meta.dart":"ed48a025ad4b9acf550855e0da05b12c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/path.dart":"82b71946ba2db9f11dd0fe4c6f1aaa29","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/characters.dart":"9d1fbf1ae3a66027af5a992b4ee38e67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/context.dart":"0dc65b8a2147c30d2af2e141a2fa6d55","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/internal_style.dart":"17e30268d46dbaebac5cc879df3ffcd0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/parsed_path.dart":"7cad643e8e465dbf5f0c819ba5777677","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_exception.dart":"3fbd1d82832a62b2aefd28211b66370a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_map.dart":"3664285d1b4f7cc9a7f0472af0df3ddb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/path_set.dart":"21fa4fc19b54b0badd2eeff778f4a705","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style.dart":"4332db9affdcaa3ab7386a3e1c928f54","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/posix.dart":"7b278d768ad3548048732f852242aedf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/url.dart":"d7119e9a6da5639c40604264ee6dc23a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/style/windows.dart":"c212a4deca4a451f0fa46ea109692c8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.2/lib/src/utils.dart":"be3c26a0efba22e08a005fed53988f37","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/lib/path_provider.dart":"7ccd97a5031f2544acd509e877182cd5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/platform.dart":"7776cb84483a65e3498638a8beff3cbd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/local_platform.dart":"c0ed810ef04e6adf32f4dd718d2ad324","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/interface/platform.dart":"c0024728832f255bfde0917c9c5bb332","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1/lib/src/testing/fake_platform.dart":"06f329d16d196b559a6a0b7aee6b15bd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/protobuf.dart":"554309456630bc79f568f6a6e8554b72","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/builder_info.dart":"9b09e02771993e327c955977161e934c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer.dart":"e00d37e2848be029418442d0c1b6621a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer_reader.dart":"85e0bd7231039085b18591c34df6e78d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/coded_buffer_writer.dart":"d97d421a202368c761aa611ceccd6255","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/event_plugin.dart":"2afc77c527387d31cc10f92261f3a66d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/exceptions.dart":"b43408123efc3bd68cf29c2c83a99e54","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension.dart":"b5e20adf6ecd66c4dfced4072664327f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension_field_set.dart":"a53fc6db7670aa852fb00982166031bb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/extension_registry.dart":"4d0ddd74a25286d5025eee95d5bda8d1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_error.dart":"4534fef9e193b48060299879100a40de","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_info.dart":"d39ad52631c6daadf575bad965cf834d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_set.dart":"76bb68f6abd3420158e5f6808f540005","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/field_type.dart":"b31731633f8adbdd17ae8b0984457ba6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/generated_message.dart":"6b18f50c3e55941280ab2dc5565f4eee","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/generated_service.dart":"ad26d5bf69b77904a36b4e3b6b436ec3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/json.dart":"7f01619f838c6e961aa26bf81446b64b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/json_parsing_context.dart":"477cbdc25a1544479e6bc8dd651b9980","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/pb_list.dart":"8e7c0785e1476e4910025b3d7bb42889","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/pb_map.dart":"b5b6b59690a0251ca1e9daf91a6712c0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/proto3_json.dart":"593a10493450d0d44ef4c8cc5c973c8a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/protobuf_enum.dart":"d2420f2f73db46c0db6cd852559a8bfa","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/readonly_message.dart":"3a0da3dba3ef74e6a07f2aedbdeec29b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/rpc_client.dart":"bfad8f6bfcb15ae781ea736652c5f0b7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/type_registry.dart":"42ce4c82bcc3331b75740751dcab98cc","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/unknown_field_set.dart":"acd560e16de98dde64da89bd6682cc35","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/unpack.dart":"49f6b3e68121648cd3f818b03d42be3e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/utils.dart":"156bc0be3362ea04dafd88d633a98f07","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/protobuf-0.14.4/lib/src/protobuf/wire_format.dart":"9f4e82e9767effd0d5b434bdff746807","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/pull_to_refresh.dart":"0daf213510c618a7deaa71ec738df0ae","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/bezier_indicator.dart":"843d75eaf40b922c5eb2f46b69f4d767","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/classic_indicator.dart":"6172cca0e0550abe4e0cf0a5a32bd3fe","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/custom_indicator.dart":"d091d9270fee11d3c7a0efd7b7146676","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/link_indicator.dart":"6ea25281aab4b18b6da638f04f1ee333","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/material_indicator.dart":"d2aad4805802639fdfe54ef4267d68dd","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/twolevel_indicator.dart":"4f167b114c2db7234753a043fb8600b8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/indicator/waterdrop_header.dart":"c37dcca93ad80f6983eba50e639a2199","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/indicator_wrap.dart":"9ede710d899f7c3ff54ddc2eeb69383b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_localizations.dart":"244c38ae343537c3d07e32b079d2b790","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/refresh_physics.dart":"17f858016b6fb09146b00b25a4c6046b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/internals/slivers.dart":"7bdb9aadd52a49922e2c433aa101ffad","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.5.6/lib/src/smart_refresher.dart":"66abd3fbb2d49a0acb15b1235515ded8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/futures.dart":"cc18971df94873707a2fd864521b58f6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/rxdart.dart":"0f2d658b698f817f1f3ac8e957b0d7c4","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/as_observable_future.dart":"0433da855b3cba920b8e13c3d4316a27","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_max_future.dart":"0efb2ecf1492ca3168eb3fc52b4cb4d1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/stream_min_future.dart":"d4be741efbb381c7699883e66c769a46","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/futures/wrapped_future.dart":"d4be9018c0c4965bc5a0c5c650511f6b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/connectable_observable.dart":"b811677a4596a5db219a09d66c9c6095","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/observable.dart":"51180418b292055064d5a28055168d53","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/replay_observable.dart":"8e3b4d834f1a8c61d5e1cf1dd2078d10","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/observables/value_observable.dart":"221d4683f5bda925ab0f139495753bc1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/combine_latest.dart":"f9f2685cb196365327fc6d6a6f1eb8f2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat.dart":"2e8dda877bd7a8fa9959550231747744","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/concat_eager.dart":"8ab935f815ba539883e5fe05c567ea20","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/defer.dart":"abf0875a888ea57f5d109f69e507b08b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/error.dart":"8ca315ef482205d14c9f3a4b0b111757","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/fork_join.dart":"2afde2d422a41ef63aacb59ed000dbbb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/merge.dart":"ce244d76edca8979e9d6d954b83ef642","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/never.dart":"f16dd2b78ea208fa0a1a36a35dc6a9ef","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/race.dart":"5197c4fc58707e862112d76b5f33593e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/range.dart":"822b0894334ab90934f0afa1e324d1c9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/repeat.dart":"cbc015dcd1195fc58951fe026f61504b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry.dart":"dcd3d7f57efb46a2ecf4524e9000a782","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/retry_when.dart":"a47e03a920402ab407b239d7ebb276e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/sequence_equal.dart":"59fe71da76b9feb0121e69e9fd40c22d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/switch_latest.dart":"41778d4a2ffe0d1f35cc8338b3c7ee32","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/timer.dart":"752aac2872b1fc648390e43a3ed90a08","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/utils.dart":"a9f86585c73212e84e92c7a516fc4b8b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/streams/zip.dart":"61910e330cca46cee090ad024f650cc9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/behavior_subject.dart":"f85e556a5f6f09cf25d7e208ef0ddc3f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/publish_subject.dart":"8f4f04b4567af1a7e8070ad04c01006b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/replay_subject.dart":"6e2dba6280c0133983b7b2ae74e4135a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/subjects/subject.dart":"005c8f65b3fe6c90d18da2ac1f08dd1e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/backpressure.dart":"dc67bf56fa8de6b1453923345b0dfb79","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/buffer.dart":"07b651d33428b23aacb564827a9cf474","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/debounce.dart":"adb3871a8829fa7994ff45e29c06b780","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/pairwise.dart":"c4cccf3d2bd7ae168070fd424ec4c98f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/sample.dart":"26b0362575a2f0c54255956d2ad64235","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/throttle.dart":"64a9d853cb0c2db8ef02ca6f5c5f6ad9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/backpressure/window.dart":"b2ab10ebc58c1583481b98d63db27dd1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/default_if_empty.dart":"9b0da83847303b32db246dd50cf7483d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/delay.dart":"9c473040e0f7ebf2ce864eb384793007","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/dematerialize.dart":"91934f7bcf6fef4ebcc24d4d2cc3373b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/distinct_unique.dart":"655f9708ca8a5f08865ec483f3e4d053","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/do.dart":"a5d6eef94a2b117a67400b0fdaf5c6c8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/exhaust_map.dart":"37432a4f18d4ab56289fc0a638b5167b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/flat_map.dart":"5e022e352f67833661611cc515f6f067","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/group_by.dart":"36dc4fd0f163e14d9a567f41e64de613","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/ignore_elements.dart":"25bb19d2f4a7714b48da15291fe54eda","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/interval.dart":"d9818ef16b4273ee3eff4d843d486d1d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/map_to.dart":"76a3e328077e888b43fb90765f999daf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/materialize.dart":"a2e07fb05bafe548120fae1e9cc0965a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/of_type.dart":"ced8090140e9f90b638ca0acc99c0cd8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/on_error_resume.dart":"39c9b420cbecaa7fe35a6c96638c0ee3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/scan.dart":"ee64c00fc03cea17c658b7f5883fc6e5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/skip_until.dart":"3b029d00a5d8c72d87e1934fe7780cc2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with.dart":"4f142c6b8e4766d23384e9d1ad90bd30","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/start_with_many.dart":"a3d6cff89977f3ad8cfdeae207a043b0","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_if_empty.dart":"0d13cc686082539af839c228429cbcb7","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/switch_map.dart":"ecfd0ea2215687f2f84b562c0222383b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/take_until.dart":"ace409ee3e50de058c0014d8f2dc0f4a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/time_interval.dart":"6061a162a5c489336abbf70bb8a977da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/timestamp.dart":"c9f8c1ff06a443ac74b175486450f93c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/where_type.dart":"f20cfd18b20005af5148ca867f924a90","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/transformers/with_latest_from.dart":"f86f168ca62543432454a20fb53db64d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/composite_subscription.dart":"1f6d6d24ac3e3be4a0297ee68408b3da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/notification.dart":"d3d5c747ca69eca070e354dedf47ef87","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/src/utils/type_token.dart":"14e5868b459e53be885da5cd7e1d2168","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/streams.dart":"870c3ccb3c16797ea70cb7f206e48f1c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/subjects.dart":"42213311c93ad5e873994ad8ed1df5d8","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.22.2/lib/transformers.dart":"bc1d04c61803f31d1307acf7bbb6842f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/source_span.dart":"e546fdff5ab35f57770465e0deaba7c3","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/colors.dart":"0175d6fa11d3f102c181b318cc63f138","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/file.dart":"3ce60056e8acfbb64808bde65b763799","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/highlighter.dart":"d64d12be4a087188792be5ae801fd8f1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location.dart":"b518dfd28840572f752274846c97a3db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/location_mixin.dart":"84d31ef3d408ddfc3eff750089323b9e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span.dart":"9fa0a048220a0db4fd66ddf26f4f1a67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_exception.dart":"0e17409d785100a55346b8b4949b9910","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_mixin.dart":"07ded389eaf6243b51adf415ade3f11f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/span_with_context.dart":"e4e1e3cba0b58270397ac627fc30814b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.5.5/lib/src/utils.dart":"d78bedf47b1a88dffea15b1ceda71b84","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqflite.dart":"158cd2fd75e6b1b03753dae213c7ec66","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sql.dart":"597e7b293e2531edc3ef788375e11c67","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/sqlite_api.dart":"3b19a23d7f610dfdcb9700ab0012e9e6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/batch.dart":"1d91fb04448b0b432755055fbb26d353","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/collection_utils.dart":"4b9941712c48eaacda8bb7296940793d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/compat.dart":"68516cddf459f1dabe669872d737a30b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/constant.dart":"37c9f67c38589ee6e06ed29c6e7e0069","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database.dart":"b9850e68d87b41a63bdc5e037ab7a77b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/database_mixin.dart":"c154c7511c3fe7b21a3b8f21ec6ffa83","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception.dart":"55fa74b453f2fd882f277c6633885929","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/exception_impl.dart":"dd1b45adfbb237981dfefd1681584499","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory.dart":"9dbc14404a9aeb70e56c47e28052b892","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_impl.dart":"a79a2762e388e479195e9a7d9521ef6e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/factory_mixin.dart":"aa71454c08878ae3ecab3dff53bb9a75","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/open_options.dart":"71913d9e1d81c784ad3cbc4756ae71cb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/services_impl.dart":"a6d82f072fbaf76b1276861d20c1b788","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sqflite_impl.dart":"20505b8a71050c48e93ff8044f5dfdaf","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/sql_builder.dart":"81564be8dc7ecfd23e5707594f6071fb","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/transaction.dart":"0061063b769ca615770ae000cd9eb411","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/src/utils.dart":"ba7ff21d8d1880f06277bf165eac6745","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/lib/utils/utils.dart":"fd3919e4e5c21f551bd35963d5dfe18b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/eager_span_scanner.dart":"24020be1d4eba32ba2d48bbef193ebde","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/exception.dart":"f727057210b85530d797daf7ab98cb6c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/line_scanner.dart":"9e57ea3295e35b794c96dfea25633f82","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/relative_span_scanner.dart":"b1ba2a25e065487321553e1dc3e13fb1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/span_scanner.dart":"3925a178c6c80956bf0db281ca033f90","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/string_scanner.dart":"e181627f573da10ad5bb9a457fb28a2b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/src/utils.dart":"78005726c5aeff4b28c45368286677f1","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.4/lib/string_scanner.dart":"07758299bbd2261712f35210ee2f645b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/basic_lock.dart":"507d7804036cf999cce208bb57945e05","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/reentrant_lock.dart":"49e67255f2490e8ec13e2c23d054a486","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/src/utils.dart":"96a4c664c4f2f818aa948ba0ebe1458e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.1.0+1/lib/synchronized.dart":"962872d6d055404bd700e01e66cfd983","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/ascii_glyph_set.dart":"113d4695aec3f71b7fd7f0c9fc0a4820","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/glyph_set.dart":"545aafdb410bb267337d97db379fc438","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/top_level.dart":"ae96335260cfb5b68745bb2abcc8c0ea","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/src/generated/unicode_glyph_set.dart":"e7fe52faa11e81181226c1a871a963c9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0/lib/term_glyph.dart":"822f29a79c60c23f33d21da8e145bbe2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_buffers.dart":"45523835db054bc346194ae8b13174ed","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6/lib/typed_data.dart":"11fe0bf8394c600c041f721767d78860","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid.dart":"3abd3bbffadfe07acfc39e50ed007b8d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.0.2/lib/uuid_util.dart":"d8fdf542727f18e7d695faa25853d01a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/hash.dart":"5669a322d55b8659da51630d439f61db","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb2.dart":"c7c11c4a8cdcf1c9ce7c5ececb4da32a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/aabb3.dart":"2a4d8bbcbcbd4e6d622a1a741c41e637","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/colors.dart":"d0ac7f8914507b5da846ea4a6d3b9839","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/constants.dart":"aa4b5c0cdb6a66685350611b29ca9d38","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/error_helpers.dart":"5f97841af6f076a8ac30e01b0c9c82e9","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/frustum.dart":"54a6cf4b13fb29ebbb4a753b94bc1238","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/intersection_result.dart":"36fe23eaad91a81d518828d8fdca3029","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix2.dart":"666ffc3a732218eb3cc4d8dd65e794c6","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix3.dart":"df715198d30faa2ca31e07cf713ab008","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/matrix4.dart":"4c0a52cc47e209f9b917275dd7e8bb3d","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/obb3.dart":"6a223b730df3ec8f08410bcdcae70e23","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/opengl.dart":"e3326e6957f09de8de582af56c913f01","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/plane.dart":"0fe82c6597e3208601e4ed5bc85257da","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quad.dart":"4b32704fe24547b94799085ec7ba8f7a","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/quaternion.dart":"9934f154a4ab3274c98b100953060670","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/ray.dart":"0f6ab21b86be15896fd59c65d29b4f6b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/sphere.dart":"9bc9c1251953846c87acd44d6182c45f","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/third_party/noise.dart":"88f7de706d3509b57bf7b201a469a7ea","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/triangle.dart":"5e9b16f549c0323f6a28c34ecd3a962e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/utilities.dart":"0a44a67010e3aefd7d6a0d4ae0da90d2","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector.dart":"ba9b5f704c79827e423e92ba5bd56d8e","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector2.dart":"8a5765afbe8068cb85a96a75374af0f5","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector3.dart":"cc529ce185a568093dd95f6ef3cec942","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/src/vector_math_64/vector4.dart":"a9108fc69ef9bce3615324070508f68b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8/lib/vector_math_64.dart":"730e6f48300bc64e5e2e1aaa5c29a986","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceCallHandler.dart":"47d14527c39eadbdb5012bf04fa6970b","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceGateway.dart":"27b8a24278191608c1b2c8be3a309600","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/ServiceTemplate.dart":"a8b70e90aa1a71156b56f438a65e604c","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/foundation_ext.dart":"1cceb67882323824143f18e07e25b3ce","/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/lib/foundation_ext/type_converter.dart":"c03a6b0ed0714b0f6dd5b27a7947ee48","/Users/apple/Downloads/flutter/packages/flutter/lib/animation.dart":"f6ceee4e6e3204a8342d14ed98ed277c","/Users/apple/Downloads/flutter/packages/flutter/lib/cupertino.dart":"7b71148e3cc23d9d095a663289c92d3e","/Users/apple/Downloads/flutter/packages/flutter/lib/foundation.dart":"5d298fa64b44598adbaf45c67dc24de8","/Users/apple/Downloads/flutter/packages/flutter/lib/gestures.dart":"d15b11bf5c6675dcfc016fd9d80f5831","/Users/apple/Downloads/flutter/packages/flutter/lib/material.dart":"317c527c7b05dd1df67a064b0f3ea889","/Users/apple/Downloads/flutter/packages/flutter/lib/painting.dart":"a634ee062a6b7d4603bb42e4cfceff17","/Users/apple/Downloads/flutter/packages/flutter/lib/physics.dart":"b9d1a27e50a8f3cd04d9aaab2ae991af","/Users/apple/Downloads/flutter/packages/flutter/lib/rendering.dart":"df1c74d89a66775eb00310e985bafcef","/Users/apple/Downloads/flutter/packages/flutter/lib/scheduler.dart":"e23183ba6dcc925fe4a689fa4ed11e65","/Users/apple/Downloads/flutter/packages/flutter/lib/semantics.dart":"6fb345cae9c2d174431469e9a51298ef","/Users/apple/Downloads/flutter/packages/flutter/lib/services.dart":"b0ccb1f2b5dcc4768ae4757396996878","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation.dart":"8123fdebe4c67d7036a876057fe9672b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animation_controller.dart":"c725d45f5b815cc013b379208b9dea84","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/animations.dart":"a6c1546c40ca9fcffe7ca56e1a0de78b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/curves.dart":"81d0b9581d8ff512ced3e10f79508960","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/listener_helpers.dart":"0176b9c6394269d0f9247d52a07e3f19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween.dart":"440093b75adbf4e99e7aa71bfd2a7ff5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/animation/tween_sequence.dart":"03fd3a5ecbeacf2eef5307c0563c7f4d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/action_sheet.dart":"49e59a6967192b5d9740218f1e91701b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/activity_indicator.dart":"c14395142676148716c7216f69b7f115","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/app.dart":"a78ede78f7ae5f6172e5b413a71ab66d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/bottom_tab_bar.dart":"f43b9cb905e533aae1d880a010d80ad0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/button.dart":"ca3e1aa71626dec769f0e4b768a31b63","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/colors.dart":"66373bd38ddf7caeafb30d31ac47ad53","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/date_picker.dart":"ba71009b7a9b5cb82ba9b25f368ee5cc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/dialog.dart":"079779013291480ea6f87d20bf126d49","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/icons.dart":"e6324e97cea61b340defced07acfa45d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/localizations.dart":"43e5780d6d46c911465996d2b7ac5b51","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/nav_bar.dart":"a49566fd166a9ba5d5121c7ac7b4be4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/page_scaffold.dart":"df3f2b34ab41da5f29d6a4c749ae043c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/picker.dart":"bbd6655f4d537021d396e90eaa755b98","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/refresh.dart":"9cb53000913fb84c992aebd00d7fa0ec","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/route.dart":"c58bd169399eba815cc820b9ad582a08","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/scrollbar.dart":"d652015e2102f1a0badc12680a13de70","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/segmented_control.dart":"26d046bbd8b16682a871be8f3d384db0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/slider.dart":"c2b86c966adb2811f8c51ab588b9243e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/switch.dart":"95a40c548c195504a38b8b06aa6725b4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_scaffold.dart":"da4f68e00e026e83499796230ea78443","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/tab_view.dart":"c34f2eace7d735912c198d2b8af1bbcb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_field.dart":"a605b1945603d4c5cc94ae4e136da761","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_selection.dart":"8918d5e7f0baefe02cb1654979ba9593","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/text_theme.dart":"d85ea612da40695539cb8b0f44938d0c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/theme.dart":"9ff9a12aade499c996a7621a7f3fb0ba","/Users/apple/Downloads/flutter/packages/flutter/lib/src/cupertino/thumb_painter.dart":"62c34111b0486fc19a4b23c4ef44edf5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_bitfield_io.dart":"3ecbe08eddf4767147cdeef626968ed8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_isolates_io.dart":"324d15d1ec7d64f353d5a559aefc7da2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/_platform_io.dart":"c0faed34294ea620354e660441a638ac","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/annotations.dart":"fa1139e32c3d6a8d79f100fedae44783","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/assertions.dart":"b6e84d49baf8e7f067876aeefba4b690","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/basic_types.dart":"38ee5db8b0b0cec2769b1383bca2385e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/binding.dart":"2e1ddca7e352c6717de7f987463de282","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/bitfield.dart":"69b44e7076610d11ede65ba54dc771e1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/change_notifier.dart":"e8ad204f7b2d7770c19ece4950babaa7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/collections.dart":"2a6c741e9437b8dde28fe60604909e5f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/consolidate_response.dart":"a8c8c614cf6eb3271a7dc3edc2803d19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/constants.dart":"390750299f1c0149b24211ecadec1d90","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/debug.dart":"ba52f91f9699d3fb03b222f53f28b102","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/diagnostics.dart":"6671082cc867ac0b443e1b389ae93387","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/isolates.dart":"95a7fcf70af0383d946a1df454ef18ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/key.dart":"585ee78a67104963366dae47747bfa6d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/licenses.dart":"78cc0b4b0777916e921b5910d0092096","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/node.dart":"0154912a4f4a5509cddfbe6e9eb58fa8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/observer_list.dart":"868c223c5dafe3d64271a5024f104c8e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/platform.dart":"767f003e29f29ae86b5e683756eb7b1d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/print.dart":"8284783dcc724655f5f315a7c2afe767","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/profile.dart":"72f6c5d768fb27932680066def5e4b68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/serialization.dart":"ca3a842951686f2e7a84c00ebd884286","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/synchronous_future.dart":"024cd4bfcdf5c7f428ef937b9fea02dd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/foundation/unicode.dart":"e0becc933af9785010df94cd1d9cc8e5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/arena.dart":"701da0b0b65af7f1cf427f1fb82fd98d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/binding.dart":"f6ce20bd64911b8eaaab0885e7e5b436","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/constants.dart":"23d47a96bebd797fb4ea9da98562447e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/converter.dart":"2e7c53c09361dedc38c941d7fd72ff55","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/debug.dart":"35810e6bd3ee04cd1ebb41599f04a62c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag.dart":"410daa5e6778a9a4d9b96ff6c8d85f36","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/drag_details.dart":"6517a8603b6c9259dcb39aaf8624058d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/eager.dart":"cde0a34c9fc259e0310f3a4881ecea74","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/events.dart":"4e6d93f90c9beaf1430d1b072597113a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/force_press.dart":"9358d684aba69441e0ff8ee23f55b8b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/hit_test.dart":"12892dd8961127b580acaeec967d2c82","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/long_press.dart":"890152bde8e40295749b197d4b8354ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/lsq_solver.dart":"0ef08d35976d21d9ac7af17addccf854","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/monodrag.dart":"4bab2c9c66802a052a2c3b2d7144a623","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/mouse_tracking.dart":"75d021c47684d8c8981e78385b144a93","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multidrag.dart":"be929efd7cf509483f08bec7e43e3ae8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/multitap.dart":"13330525a0fb55aef50cf611cc1d5b3a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_router.dart":"18f06e2b1ddef7c7f5e5c276e9622822","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart":"e08cc6faa1f6426ff66b88ab5b04564f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/recognizer.dart":"077266acea9855e159198861cfa06864","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/scale.dart":"43af8a07743dfa5726fe1b6d3769794f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/tap.dart":"bae1e3483bccfac08498e7fe6ae67e71","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/team.dart":"ced89cd13e1e16931c0b6cdc65b1157c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/gestures/velocity_tracker.dart":"c8d5dea3b7a7e7916a061fe559f16ffe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/about.dart":"b174eb72f650beddb93ed77dd0733a59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons.dart":"7c1da9481c7121bc7c87ec2548bece9d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons.dart":"f106aa53ae09d78b65b4ac03135e9aa0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart":"168ca64adb8c6cdf60e45bde043ba5ff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/add_event.g.dart":"20af16542571e8a810cd186395b91bd5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/arrow_menu.g.dart":"f94f50e8698119d21a93176fc4c44b8f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/close_menu.g.dart":"62c6002acc31810ae2543be0d2e08636","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/ellipsis_search.g.dart":"51bfd41938b8b348752abcabdb047597","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/event_add.g.dart":"2cebaf609156dc490fa7194d964d83c1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/home_menu.g.dart":"b901b05b406dca4321a72877c931f2df","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/list_view.g.dart":"2d296647363abf39f172bc3b7173916c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_arrow.g.dart":"67d12756a0891915d1ab09fb66a0e63f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_close.g.dart":"032c199083400aa925c3b97db2c933eb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/menu_home.g.dart":"15bd4282f9266acfb9f2db110025ff92","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/pause_play.g.dart":"d1b00952895ca63e03d009b3c17479ac","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/play_pause.g.dart":"d08959a6fba34a3265bf407fbd880d56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/search_ellipsis.g.dart":"12e73d616f876e4c889ce687e9e6db40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/animated_icons/data/view_list.g.dart":"8912944af54411551b01dd066fd5d930","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app.dart":"35c6f30289bdcd63e2de2924fc489b74","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar.dart":"69a98946100ea0f00eade05bbbd09001","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/app_bar_theme.dart":"0840a73663c52c3d4d194bc1c852e7cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/arc.dart":"b71c56e72657cdc05bdac19f5f79da49","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/back_button.dart":"81ee0c21931ab305a68cc59482ef8b6d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar.dart":"316c70c2424e59296cb9cc651b0ac6ca","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_app_bar_theme.dart":"1853cd41f2de771ddbe1bdd26d509e13","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_navigation_bar.dart":"12d8bd7ca19f774c9777c16e2d4d65c5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet.dart":"0e6aca0141b1297835d946a8f1445fe0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/bottom_sheet_theme.dart":"cc53d2dbebb2e25887819068e7941ae8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button.dart":"da4c3ed5074f8a41b57c4b22f2275660","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_bar.dart":"bd1af0509cddd4659775001a5d0cc23a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/button_theme.dart":"eec24daeb56834c1fe9cb5483b17b4c4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card.dart":"4e9128e2549388636aaad9f998aff175","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/card_theme.dart":"c3f7d012c6d9d17d6a3234a6851a8388","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox.dart":"1efadb58bfbf06fec026d343cc8bdb78","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/checkbox_list_tile.dart":"c43b9ea9d6145a3d5bde04df1ac97b4b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip.dart":"db13dfee941604498bae60b77f4396f0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/chip_theme.dart":"c778d3bdc67ad335a393456701af66c7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/circle_avatar.dart":"83891cab4e96df58d5c8bcaebd6d29fd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/color_scheme.dart":"47ac3cfbc7521ee751523802ce99fa43","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/colors.dart":"e43a46a1ece4e1630c383dc1d7a27a40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/constants.dart":"7f1ca36c86dd09809a5310b5a4cf9a9a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table.dart":"f1d4e4383a3abe1b7ca0efff35371baf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/data_table_source.dart":"fa899e206cac0aa7e2ea1c3b66bfe876","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/date_picker.dart":"809ef4cd7ae93634bc09cb3375affb43","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/debug.dart":"7de48070d048d3fa0981a747114f83ed","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog.dart":"1dc82fbb1ec1b2ec4c49f355442cc658","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dialog_theme.dart":"bb4ad9ef5dac2faf78f4c5ae0c17301a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/divider.dart":"fcfab4e0f8eada5cfff32ab29812dbd8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer.dart":"5b978e3deb9ce9845633164365ac83f6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/drawer_header.dart":"255e10d04d61b6b245bd45a7f57b7dd8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/dropdown.dart":"566ed4f4c46e25261abe8f2dbcb25edf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expand_icon.dart":"1e3f2f41dae2d4bd4db13cc8c19f5496","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_panel.dart":"5aa96843f69fd7046759d1322c091771","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/expansion_tile.dart":"86cb755170f8b54df949ff476188ec59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/feedback.dart":"27f34fba51d19772861f094e9e29d092","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flat_button.dart":"1cec046418c705c85935461307f78b15","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flexible_space_bar.dart":"428ea3a1eba3e13a6436de94830e9d65","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button.dart":"f255d871e8a5a51740abcc8471d8faa4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_location.dart":"59300a70f65f7135a0aaca42fb2e74e4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/floating_action_button_theme.dart":"f16b5328528bc74b1d6d2d24c62c4991","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/flutter_logo.dart":"4722c217333ab91e3c86df19748894d2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile.dart":"3e59c09968f2e5212787162f69a0e5d6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/grid_tile_bar.dart":"0ef4b1f90e6b2ab3c1c66f13488ce2e4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icon_button.dart":"513159261e9a7e970ed81160f3cae5c7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/icons.dart":"e03ae161f4269f5333b8fbf2e8292986","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_decoration.dart":"ef9910564588789a38b66c9e5f8c175c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_highlight.dart":"027936a46dea31028cb0b813c4b804ec","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_ripple.dart":"be834b3f9d11baa1d42c46ac0c52fafd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_splash.dart":"bff9e62efb8aab4c45ff89c72bb6a280","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/ink_well.dart":"3d2868b2042b52aad4f24e2e904279f7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_border.dart":"7fb8426e8fa943f19620d1c68e2b30f9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/input_decorator.dart":"1f949e26d8d1b2893a8ad7b3a231c589","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/list_tile.dart":"329ac8b16233aeca514eba27b1d88d50","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material.dart":"533c476c6a87abb53c18678d1049e881","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_button.dart":"9f974d8014ae47611656f26ae2773aa8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_localizations.dart":"433fb3eb927f0d649d3077c32e321cbd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/material_state.dart":"62bd37ba8876f944db31d02edee0d5b9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/mergeable_material.dart":"095f7bb61d5237dffb4eb3dffdc8ea98","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/outline_button.dart":"fc7cce41d399c94b7fc0b68c63044404","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page.dart":"e0adaa4fd3cc7a2a873f0ff73d678b53","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/page_transitions_theme.dart":"956c0c1ea3dcc5bec48fef7f896327d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/paginated_data_table.dart":"a84ab8388faeb41175a33352ae1b63d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/popup_menu.dart":"7d7e11d5c98ffe2c8dbb745d6188d868","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/progress_indicator.dart":"c4a9e9ac3a218409d8cc491a6eb802ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio.dart":"a5bee26922ea9c8843878c485e27d532","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/radio_list_tile.dart":"8b103dd62e4431515b47c1f55bfbfffc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/raised_button.dart":"dcc99bee0b9aa8bcc65c2098390feb6b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/range_slider.dart":"cd7d582fdf07f8593f415e5136d29c3b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/refresh_indicator.dart":"a5c08ffa1e612448ab0c03d4896e2230","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/reorderable_list.dart":"32fd26ca0802d8f186f34ff7b54ffc56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scaffold.dart":"07a33e96fb71b3c723e1d11b9fc4ae9d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/scrollbar.dart":"69a2935de82feeeb3097c7993985508e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/search.dart":"45dbd45ab725f7a63be585c697f76df0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/shadows.dart":"9f3591b8be6811722b31e0283994d76c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider.dart":"6ea3dfd9668282ba4d5b69809deb742f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/slider_theme.dart":"18da5f280eab3b0cf7a54782d886495d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar.dart":"009dd993087bfa149de3902d2e2200b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/snack_bar_theme.dart":"5f57bf3d79524f5d54bc23193caa2183","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/stepper.dart":"1f940b1b4931cfac3b6a64a1a34346a8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch.dart":"8967f11d5c8efaa7413b4d820975dae1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/switch_list_tile.dart":"411e9fd65000a4d8a98c20effa37d3ff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_bar_theme.dart":"9569ad43a6a84900059ed04daeeb325d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_controller.dart":"a1e278812beda7d841aa9cdf77e59ac1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tab_indicator.dart":"f5fd5945aebed13954aa5cfc347c506b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tabs.dart":"c4d9df5d3d17421d149572c6aa6247b6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_field.dart":"5ae2ef6d3fb9fe4153221af9eebcf003","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_form_field.dart":"b27197fecde166b330a6e70903708473","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_selection.dart":"19062ed9674a38e7f0bcade591d1dc40","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/text_theme.dart":"142d3d227c76e1405eba3ae2cd7d2a2e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme.dart":"3b18a2b8534b65d52dd4d056a8443e0f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/theme_data.dart":"e4130b0cd67c8ef389c6c9a662145dad","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time.dart":"8fab712e2ac883f5b07107e7da074d37","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/time_picker.dart":"49b57d1fcb9b950707b082f17f2d3204","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/toggleable.dart":"761af7b3c4c0f0ae5dcf5494f495971c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/tooltip.dart":"1df996eb6bbc87c7b8722b31f656d48d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/typography.dart":"0b6757dfe762361d9654b99396032349","/Users/apple/Downloads/flutter/packages/flutter/lib/src/material/user_accounts_drawer_header.dart":"5941a9a7eb2d632992491ce75e7360c0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/_network_image_io.dart":"5fc436e396572b1b3bec9033eae7f5a0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/alignment.dart":"03894e79fef0a9f25626e54f8c24fcd9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/basic_types.dart":"8d0e1dcbc1ad02a2d9b042959abcc6d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/beveled_rectangle_border.dart":"1c06150622d7d48fe265ff7c4d4e91fe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/binding.dart":"73fb5d5a4274b0cac515af75487b45bd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/border_radius.dart":"91ce8f75cb4eb84876e9a26b3cae1199","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/borders.dart":"058aa10640fe7277d46de5ecd7b6da56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_border.dart":"4b01d3a5ceb9a294c4a092e5d2ee1848","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_decoration.dart":"6e3056e055a0d476cba1958a01cbf50b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_fit.dart":"8233b9bc0b1afc37a7cf63823ee08378","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/box_shadow.dart":"d816aca7a2db776090fc24638fc4d31a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/circle_border.dart":"da7d70d4d3bf019e152b97e06ad7fc0b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/clip.dart":"9fee90ebb62b235347e72e81eb608e2c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/colors.dart":"24f786a3a740c7da0e0abc43e66ab3bc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/continuous_rectangle_border.dart":"372f48cbab5babd191c53a34fe6e78b0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/debug.dart":"b4d743f676a33691c2a5c066350e1c67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration.dart":"a968930b8cd407feeb504bdd5a5ce94b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/decoration_image.dart":"6d594be9695b2ccc03932fac80af6801","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/edge_insets.dart":"b827266014c1c8ab32d4c5f5870251a8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/flutter_logo.dart":"4c86c3e7b8250b4c77589a099ae1eb56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/fractional_offset.dart":"5fba5b4485cd0883de26f46159a45cc1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/geometry.dart":"c1483762b3606b2cf20cf2e530f801d8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/gradient.dart":"f20835e708302454a0695021fa6406cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_cache.dart":"39f73ea095a5f4cd6e9015ccaa971168","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_decoder.dart":"d3752d7b3bf30cf27b7d86c1370e1592","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_provider.dart":"1e378ec9e17f668cc7634151d8029b4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_resolution.dart":"224ed714443b3235c931d4e55e1273f8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/image_stream.dart":"25a283d52b197694fcc1289ef10a7f0a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/inline_span.dart":"b9af5e1a0d235166d4bd71388f01e165","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/matrix_utils.dart":"ad1cdedb6dac18acdde9d8c69ac49754","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/notched_shapes.dart":"a121fd8a12d7b86bfb6965c0daa5d44b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/paint_utilities.dart":"a0610eadee7d9ab8d516c356ad5b9e4c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/placeholder_span.dart":"e7041a3df513f8d6540dd60de7f159d3","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/rounded_rectangle_border.dart":"6310c4bd1ca006cd6490afa98c433ff7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shader_warm_up.dart":"6d15d7df241befab684e560346506f68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/shape_decoration.dart":"45c87a8ad4c4fc570322a0760fd4b5b7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/stadium_border.dart":"dbf0e2842ca32c18c0c31d836f8a4bbe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/strut_style.dart":"b4fde007f857d973a808aa9734511efd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_painter.dart":"4bdf5db7a7fac48931287328610ea5e6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_span.dart":"a8268adc2c80dad0136177f4be0f96b2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/painting/text_style.dart":"a92e70de90921db613d30c7a47c8d32b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/clamped_simulation.dart":"f01d8f65756ffe9fafc2b2e0c5fcf651","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/friction_simulation.dart":"b7ec6635d5b92c66139bc8c7a4ff8af2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/gravity_simulation.dart":"b7dc056fb8f819ee525e4f5fa13d4f66","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/simulation.dart":"246b6e6ae3335e3bd0bdb89cb9756d9b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/spring_simulation.dart":"fabe487da9fbb91fd2a4c89f7b275a4e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/tolerance.dart":"5c3aecd6492a17886933c32fc079310e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/physics/utils.dart":"db2280dc621eea9bc31ad6e4347b6580","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/animated_size.dart":"9057547881c9096114fb4071e6c660f2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/binding.dart":"02562bee395bcf1d500d3b0e03f3f8f0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/box.dart":"5c73a75b607af2f41d8a3055a59a2aa2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_layout.dart":"e1cff6964a5916bec3b85de107d92412","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/custom_paint.dart":"078d57ee0ce1119e711e9a1d2bbb7046","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug.dart":"a3a050dd4095ca54837ace64a7961301","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart":"135d966dc7d9570760573cb7d951ff84","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/editable.dart":"73c8bf432d4bc18171d56bec1a4ee265","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/error.dart":"f03846627b7a8d9d17013b0a872588fc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flex.dart":"a9073bae838b471a9e9af9ad89a24c85","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/flow.dart":"87001752ff35e24787615e93d35ceb2e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/image.dart":"88e3c1835a75cbd330b9e28770cfa957","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/layer.dart":"ace84b2dac059b8006166c2ae325cca0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_body.dart":"339c1d653e99ccf25943e2ed99310c19","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/list_wheel_viewport.dart":"b8f52368f185a2e410ff35e4ba6b670d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/object.dart":"5a10733ad76e8d8dea5af8415d0bb56a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/paragraph.dart":"0cd44721b0b7be4c16159ceafd401600","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/performance_overlay.dart":"87e190ad0c19aff7f308f71d47449948","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/platform_view.dart":"3a51a23f0504f5b9b70654d65d63d91f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/proxy_box.dart":"3c1a20d7c17076196b5f3c843137679d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/rotated_box.dart":"0e0836cd4d900c71bc98af8737a6e0cc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/shifted_box.dart":"e015788b06744e8071fa22bccef2fb68","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver.dart":"6debb4d5465f522a2aa61e198428cbb6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fill.dart":"57241a3eef41ce29e63512374aba7ec0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_fixed_extent_list.dart":"dc92b52b9cf8b21c26ea8bcdc4195ebb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_grid.dart":"76dec0627ea266e8f7bf2cb0756755cb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_list.dart":"aa956c6020b0e8acb0f922cde757e76b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart":"d20ae34d9b0cbbffe91e3e4d638da0ce","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_padding.dart":"b4d6c26f72e6e2d5ccfc79b52ae31742","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/sliver_persistent_header.dart":"8ff094124b85c543ebaf4193a89752fe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/stack.dart":"948f89be3dbcdcaf75477f808b346f4f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table.dart":"bb86e67f3a263ecf7bc1ec4d4e977532","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/table_border.dart":"6ff729a68a5179b1ec24dbf6fbcf893f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/texture.dart":"e05ded80881aed2dc2cd09b427ce56b1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/tweens.dart":"0df8b7d464c9acb7d8db6d1fcafc50a2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/view.dart":"f26dfaabe89eaea6a8156e257ceca6cb","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport.dart":"f22e3abf5b073b4712b6609800fe6d7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/viewport_offset.dart":"2ee1bd1ac4cb5069f9f0874bec2f2646","/Users/apple/Downloads/flutter/packages/flutter/lib/src/rendering/wrap.dart":"5d8451cca314dc8cd9618aba5f550fe2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/binding.dart":"c5cf1299cc1b0b75fa2741f3be8446cf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/debug.dart":"ebf21c275c54dd4807bb5de73a11b1db","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/priority.dart":"567f3b7a2b393047c9c4eaff3ebd8204","/Users/apple/Downloads/flutter/packages/flutter/lib/src/scheduler/ticker.dart":"7898b2caabb1fc604ffc4c6eac4a0fff","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/binding.dart":"97516f191a11e9dead089f1934319e55","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/debug.dart":"f9281640bdab18ef26bb28422002a1d1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics.dart":"b5a22c3fda7885cc5dac1c6134fbece1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_event.dart":"f7b6bf6a77e68e5ee8e23b534d8f5d97","/Users/apple/Downloads/flutter/packages/flutter/lib/src/semantics/semantics_service.dart":"dc1aac8e63078348d4daa7f202f23880","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/asset_bundle.dart":"27ec303c08479305b763eb18c5fafe7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binary_messenger.dart":"76aedf29cc3a753561ad23749ee0ba82","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/binding.dart":"899ae3bea93172ae980a078597d94c5a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/clipboard.dart":"ee417ab33bb4cde85726cb45e0b9dff0","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/font_loader.dart":"130fa0b09606b933f28d2016038c9b2d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/haptic_feedback.dart":"23b04c8264683f9960751dfd559e6a1c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_key.dart":"2f1c7193550014e8d72a4e69590cef8d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/keyboard_maps.dart":"d6beb638c227973aef31509118e7ed67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codec.dart":"1e45c4e05a1bff0c4051a1928021b7fc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/message_codecs.dart":"564afa6ead81b897d2edb22a0eca1dd6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_channel.dart":"1879335cd3ee180b8a4f086033d5314e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_messages.dart":"7fe68c75b7b5ead8dc2b9cf6bbe2dfb8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/platform_views.dart":"0e40ff4dfdc22b55f96a7d85d5ffe2dd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard.dart":"f0dba1965f654db43e823e88ca89bad2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_android.dart":"f55accb5f3ee67c98e6d29048a129cf6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_fuchsia.dart":"494efd1f44e4b975303d8033a55cdf32","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_linux.dart":"b36fbc49a08e321330d1f01a0e4a2acf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/raw_keyboard_macos.dart":"e965d49e21907d260728ac041ba37354","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_channels.dart":"474f73d821054f4e6277a6121c0d37ae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_chrome.dart":"916c3bc524fdb78dfa40cb446e9f408a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_navigator.dart":"41a6d6721b3bde81341aeb025f395228","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/system_sound.dart":"a3870423819eb66c48982ab5d37e1fb9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_editing.dart":"d6adb784845395a2c218bf6bce7ff4ea","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_formatter.dart":"0a9e2d453c841ef912f708acf40c865e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/services/text_input.dart":"27ded8d6a001630946d2e6f0ca46f15f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/actions.dart":"c8d04a98169f7f62fe56df3d9a255931","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_cross_fade.dart":"04ba0c7ec193c36dcee5e1c01270bf09","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_list.dart":"b0edf592005aaabde36e33c0dab5f377","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_size.dart":"71ee8969393727646eac7e7621455942","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/animated_switcher.dart":"2793dcc7bbc7adaa980ea5ccebdd28e1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/annotated_region.dart":"d326bfa8d8139966e80bf4449483cadc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/app.dart":"c61ea7284bb659d5b3ccb9a405ed69b2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/async.dart":"1b398f0d527af532d007740d88d08d10","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/automatic_keep_alive.dart":"77f164655bc7d7d3f2ee8d265b71ae1a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/banner.dart":"2fd9d96175fc3081aeb62ae5546e1b8c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/basic.dart":"b52dd1d04fadfc8e0b6fe40942c3610a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/binding.dart":"a95f242d65568a71b851a182b26e02f6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/bottom_navigation_bar_item.dart":"44538312200383fab04ac420d113d202","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/container.dart":"edbde2b72d3cec816abc7c639ea0d298","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/debug.dart":"c3b4c36e7070604c187d533ea74c220a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/dismissible.dart":"94b3cc034358d5c0703182d79accdbbe","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/drag_target.dart":"f8c4fc034560221d72e511c77d4c2448","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart":"3ae5d07c77fb7e9f1d3eaf1fcd8af774","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/editable_text.dart":"3e00e3f3e0afa9b1ddf152f07fe86f45","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/fade_in_image.dart":"100edca998e4642f79ab0deda9ea8b4f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_manager.dart":"7ea85bc5bfc345b3b336488cfbf78130","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_scope.dart":"2c8d194e5bce606050f47ac3de35dc56","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/focus_traversal.dart":"d6e67b64898be3855a72ecb9b0db98f4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/form.dart":"5d579e17460f7097cf6bd528089e31ce","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/framework.dart":"c5b0a71c2ec3c18656a4df9120f7bdfa","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/gesture_detector.dart":"324add70fba0691e08f5ee5dfadd69df","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/grid_paper.dart":"938e9d9903371d71f63c987dde913229","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/heroes.dart":"ead0d2296f3bde59367deaf91b800bd2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon.dart":"dd568787956a3bf0c1413863ce53764e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_data.dart":"b6e8eb19cb54c1910d3ca3f49ce6f1e8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme.dart":"19cd8722ba544e92dd31345cd6a32559","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/icon_theme_data.dart":"2ddbce2c566c758634bd291bba246ac5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image.dart":"569f084838c22a83ef707b36780b346c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/image_icon.dart":"5708731bb3e68c27d4121e9c45336eb9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/implicit_animations.dart":"a397b93ebb1efd68877d91d657813e9f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_model.dart":"9dd2e158a30b68f13703cf3932e16883","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/inherited_notifier.dart":"771eaa00bfe798ab2b62ab030659113a","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/layout_builder.dart":"c8c45e9198b26810925ddf6ead72d3ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart":"ac323615f238c5709849e884fe9f5f67","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/localizations.dart":"e5feaa3a9881826687bd927f9959d878","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/media_query.dart":"b7c3e100bcf629c370c0ddd938d1841c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/modal_barrier.dart":"4148b1d69b2f2d363def9038515ee192","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigation_toolbar.dart":"e0e71805490e49f0d3887fe3ce0f78a1","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/navigator.dart":"f0cd4b235e1beb768132b92ac5266a7d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/nested_scroll_view.dart":"968b93d71c22adc561716cf421221ab4","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/notification_listener.dart":"e011b91fa2ac1d8baee03bfd35e3c0e5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/orientation_builder.dart":"7a31bc9d0306a86efddbefb432d82a88","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overlay.dart":"3740adfbb898276effc7f16301125a66","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/overscroll_indicator.dart":"3a9dd60c9ba7397b2c04fc03ed8fb29e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_storage.dart":"dc83ac4cdd460d5d6bc24b6f940d90b8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/page_view.dart":"b66f6b35c7b700f9b4d06e85ccca19f5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/pages.dart":"c29e8317afd015cf20cacb3c62900286","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/performance_overlay.dart":"8de697d160c94b93b60ce8c812f1f5db","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/placeholder.dart":"49e7dd8c481982986f2833461e7d3aae","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/platform_view.dart":"95a019256fa8b950815d749968043b5b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/preferred_size.dart":"b8b88537f15990cc694e594a590b9154","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/primary_scroll_controller.dart":"6b120e2e88c589e86d2bdfc6e7b94203","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart":"c55f705e03dc7e663d96af0252d882c6","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/routes.dart":"ee016e34cfa3dba34c710e00641420e8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/safe_area.dart":"9232afa5264f123cead11f35a86648f9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_activity.dart":"95f5f396516fc430684684e620b2fcfd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_configuration.dart":"e3f16c31c9690652225688cf3e4a2085","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_context.dart":"e8986149c22d8b7baa70c10dd89e0287","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_controller.dart":"8d581b0f7fa2a2fcd54058b7e2309bcf","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_metrics.dart":"23f096e7434299277e1d74a4309eb3d8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_notification.dart":"0f15e5c02aed2efb346430db5d250902","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_physics.dart":"f68de5eafa560c67f1ff19e165b1e302","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position.dart":"dbdc1ea5fbf87734832e4aadb9667b7e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_position_with_single_context.dart":"70446d572bfdbf39511496f805452500","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_simulation.dart":"558a397f9ef9fe0cb7d13d1df149b604","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scroll_view.dart":"2c8654c5fcd1d46e4e983a0b98600405","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollable.dart":"9faae20dc2d13072f20c201a19bcc61d","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/scrollbar.dart":"845669fe7cd96415f6f7bae2f0644223","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/semantics_debugger.dart":"990a4ad7adcb216a133d540ba6df9b4b","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/shortcuts.dart":"a72eed7f46581c65c8aeab380affd665","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/single_child_scroll_view.dart":"201de2fa268b25b09968ffc1ddd41876","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart":"886bbb3e55158733c5015ffced1ad5b8","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver.dart":"e0bb4876927ef1f89bcce117ea7a11b7","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_persistent_header.dart":"4285651407ada24192f6c56278cc904e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/sliver_prototype_extent_list.dart":"bca05ca8225dff0dae8b72ace97cfb1f","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/spacer.dart":"24da21561a961bb2886b7573df3901bc","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/status_transitions.dart":"55244a8b1f3d6c32cdc0c698570ce392","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/table.dart":"9d34d209059c9fe36f5284b406696a8c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text.dart":"9562b12c85e3ae4f39a675b450a1a3bd","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/text_selection.dart":"e65070b9d2e55cb4927f66af33e72c3c","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/texture.dart":"b88734d65ec182433d94c5d7a0df76e2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/ticker_provider.dart":"486884b6944c98e53db078634d0b3aa2","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/title.dart":"7cc855203b8fb69e6913cd6a068ecb59","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/transitions.dart":"73a384a041d65e145a5152880c0d9e20","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/unique_widget.dart":"29c950640aad59b2e7ed27b7fbb55799","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/value_listenable_builder.dart":"e0a035f9d4fe7040fe6c8b33c97a9ad9","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/viewport.dart":"9507097275919ac9c52f6a8ccbef418e","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/visibility.dart":"22d749241590cbe5c0294e5c70d60679","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_inspector.dart":"3c0e8cedee6e1144d04075dd6a2811ef","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/widget_span.dart":"33e31d4e51a5c2e66433c45381da41a5","/Users/apple/Downloads/flutter/packages/flutter/lib/src/widgets/will_pop_scope.dart":"0e5d8c8839f17a64eacd1a7a3b9afdb9","/Users/apple/Downloads/flutter/packages/flutter/lib/widgets.dart":"2e185d738b6d7b4f972aa541c9271556","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouter.dart":"4ae9a6e7dccc2e551ddc6422698caf36","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/ActivityReportRouterImpl.dart":"a42651eb9ea4696088dafac730531b5a","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportModel.dart":"a1a09253a108fbd69a2a45da68bd5de7","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/page/ActivityReportPage.dart":"1436cb8b86f51d310aa7674560df2546","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/ActivityReportRepository.dart":"b810ba03bf12551120a9beb902b3a976","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/local/ActivityReportLocal.dart":"972ced6979a92b9032be46b81279cc83","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/ActivityReportRemote.dart":"4453f3cd68d545c4d70f6895345622e9","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/api/ActivityReportApi.serv.dart":"78ba76436df7a7a6a7e200eb823b8283","/Users/apple/lsy/gmalpha_flutter/lib/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart":"feef4f75338e3051106352cbf4a7dc2a","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouter.dart":"d5e9385535fb9d486040e58d913458c7","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/AlbumRouterImpl.dart":"d22ec4e245d39a67b8be9a182aa9f4ee","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/bean/DirBean.dart":"15be231069b95086dcd7d37384a6ff3d","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumModel.dart":"5d3b2a1d6e6d6a540501cf7360fc3448","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/page/album/AlbumPage.dart":"152903fc6d3198bd94fd35e514b1409a","/Users/apple/lsy/gmalpha_flutter/lib/AlbumModel/repository/AlbumRepository.dart":"f9a938c19807c0c9235e8a7dec3d2b8e","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterBaser.dart":"0bfa365e3c72aa0c078ee0647bdc8eb1","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.dart":"763cb6666de7f9fae851ab48d77170e8","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/RouterCenterRestore.mark.dart":"7c8a96a248628ff3597581e5219798b1","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/Router.dart":"4678e78e8533118297cede5562c1d7af","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/RouterCenter.dart":"252f45ae25b4d66229124d4f04eb5006","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/User.dart":"1bbccb46be0d476614bc7139f65211cf","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/anno/UserCenter.dart":"4ab78f08120142e65e71aac9b4adbd65","/Users/apple/lsy/gmalpha_flutter/lib/Annotations/base/RouterBuildItem.dart":"c7c3270d6efeac377693959ecfc7d137","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/BuriedImpl.dart":"c13f54280611228c5d9d29c15f708449","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/BuriedRouter.dart":"654a3db616cf0284a9b76b6bbb86113a","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/BuriedCenter.dart":"e9ae90d6109e744e004d958db6cf618f","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/SendTask.dart":"9f1a16d12dc9c2d39a1144129a867504","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/buried/constant/Constant.dart":"aa789a8a9b694b2236f452b172b4ab63","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/proto/burying.pb.dart":"44a1584840d54ec3f1722ecf34db65be","/Users/apple/lsy/gmalpha_flutter/lib/BuriedLib/proto/burying.pbgrpc.dart":"10a2fe38c26ddef1f337a90a33ac07ef","/Users/apple/lsy/gmalpha_flutter/lib/Error_Page.dart":"5da7d8557724512dcf514ca748d2238a","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeImpl.dart":"0292e3faa17865b8c6cf743a9b0741e1","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/PrestigeRouter.dart":"88d0c36f7a7927f42f2baab86f68004f","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsModel.dart":"020c955795291623b975288e74e691f6","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/page/reputation/ReputationsPage.dart":"2ab22d773d94aa3e5485953e81a2205c","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/PrestigeRepository.dart":"b0aa8c7806c416a8ec4d66fa3c1832a6","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/local/PresitigeLocal.dart":"0d0489299f9fc546eeee4a2e8fed74a8","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/PrestigeRemote.dart":"b5392033dfa3740abe6d6f5adc548ef9","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/api/PrestigeApi.serv.dart":"870a2a771ffc5a93742080d4ba4b53d1","/Users/apple/lsy/gmalpha_flutter/lib/PrestigeModel/service/remote/entity/PrestigeEntity.dart":"98c2d29c68ff999bd715fe5110577e8e","/Users/apple/lsy/gmalpha_flutter/lib/comment_suggest.dart":"ad23ea084fd4d4a7970b014bdf9e1db9","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/app_module.dart":"0ac6062efe94d817f9b4da0646a93421","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/base/Temp.dart":"fc52968af84838490aefc98a77c12af8","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/cache/CacheManager.dart":"03be6b49ff899cd731457fee0aed2d7a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/cache/MemoryCache.dart":"a1798a2969af0fd08e6fe8089007765a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/list_item.dart":"d1e669bee2716b905748e4a5509d4310","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/BaseModel.dart":"47cf4cd80028e1c52872e2acf226090d","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/live/LiveData.dart":"59cae64366e36d259daacbda85c56695","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/mmkv/MmkvUtil.dart":"fb0f82e0c0e2aa1029d9a9aabc8720e6","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Api.dart":"11b224a9df1c918bffd65a1d92ec6767","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/DioUtil.dart":"86567c4aa32579285c9409fd28b23898","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/net/Responce/SimpleResponce.dart":"d7cc29e2636806e9bf7e0f34e29602d6","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/toast/toast.dart":"a806ade95cd903cb22e7082cdba5252a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALColors.dart":"3d3d7f6792f8c649a53597163005f55a","/Users/apple/lsy/gmalpha_flutter/lib/commonModel/ui/ALDevice.dart":"99c881b0f039a1b20b196e715be35328","/Users/apple/lsy/gmalpha_flutter/lib/main.dart":"de175ecb7687c1d803a508828dce8aec","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouter.dart":"db34b17f27b5443c52ebf82a314ee6bf","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/MessageRouterImpl.dart":"66f58e702fdd53061f85ccc3c6877c3d","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_home.dart":"9c7d129b2c078de70bf53275b1f768f2","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_item.dart":"dbe293bb70546e382926d1aa4b368546","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/home/message_notification_item.dart":"c83c4c140aa1f4c25ad01b9f75068e33","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/message.dart":"c401d6b4aa6bab3ad6b5c86a7c577c67","/Users/apple/lsy/gmalpha_flutter/lib/messageModel/model/message/replied_content.dart":"e4f4693abaecf02682a408c39d066791","/Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouter.dart":"701011a8e56955570b44e1ec262c76d9","/Users/apple/lsy/gmalpha_flutter/lib/userModel/UserRouterImpl.dart":"13bf44c368231f9a767a39999fde0ae0","/Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPage.dart":"a2ac4cb070f4a2a4fb2fd302ea89f9e5","/Users/apple/lsy/gmalpha_flutter/lib/userModel/page/user/UserPageModel.dart":"0681055bd59f1f27429020c9e0c1911f","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/UserRepository.dart":"03e5f698eb112f81b6bed6620bf4f284","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/local/UserLocal.dart":"156bfe1f12f35bc4a0e292d11186fc8d","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/UserRemote.dart":"89631099a046d54a42db1554d0d3db2b","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/api/UserLoginApi.serv.dart":"103fe4b2b3a6e1fbea143c84fd6dd52f","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/TestUserEntity.dart":"04ea2430e4f67426a527d0ff9221802e","/Users/apple/lsy/gmalpha_flutter/lib/userModel/service/remote/entity/UserEntity.dart":"9f99df2279585c5ead58b6a763f46397"}} \ No newline at end of file diff --git a/android/packflutter/flutter/assets/release/snapshot.d.fingerprint b/android/packflutter/flutter/assets/release/snapshot.d.fingerprint index 2db4edaceb1876599d5fc1a7ed1c931fa1a9a4dc..c77d17c3280f34f6ecd5b0d8f3c76b2087c6be36 100644 --- a/android/packflutter/flutter/assets/release/snapshot.d.fingerprint +++ b/android/packflutter/flutter/assets/release/snapshot.d.fingerprint @@ -1 +1 @@ -{"version":"20e59316b8b8474554b38493b8ca888794b0234a","properties":{"buildMode":"BuildMode.release","targetPlatform":"TargetPlatform.android_arm","entryPoint":"build/flutteroutput/aot/app.dill","sharedLib":"false","extraGenSnapshotOptions":"","engineHash":"fee001c93f25a1e7258e762781a7361f122d29f5","buildersUsed":"false"},"files":{"/Users/apple/Downloads/flutter/bin/cache/pkg/sky_engine/lib/ui/ui.dart":"eb7755654f7eeb3b79fe0e7292ba8b7b","/Users/apple/Downloads/flutter/bin/cache/pkg/sky_engine/sdk_ext/vmservice_io.dart":"6137595b8118b04910c4f137a94bad5f","build/flutteroutput/aot/app.dill":"1918ad21fef6f42d625e523f189cb53b","build/flutteroutput/aot/isolate_snapshot_data":"27e2f2cfeb055abb6a12a3458d4f45ca","build/flutteroutput/aot/isolate_snapshot_instr":"82bbcffe85de66b3db653f1b3fd466d3","build/flutteroutput/aot/vm_snapshot_data":"9df51beb7ff50608e0e854f7232fd2f4","build/flutteroutput/aot/vm_snapshot_instr":"4f207dc4df14e95febb3bb4e4c611765"}} \ No newline at end of file +{"version":"20e59316b8b8474554b38493b8ca888794b0234a","properties":{"buildMode":"BuildMode.release","targetPlatform":"TargetPlatform.android_arm","entryPoint":"build/flutteroutput/aot/app.dill","sharedLib":"false","extraGenSnapshotOptions":"","engineHash":"fee001c93f25a1e7258e762781a7361f122d29f5","buildersUsed":"false"},"files":{"/Users/apple/Downloads/flutter/bin/cache/pkg/sky_engine/lib/ui/ui.dart":"eb7755654f7eeb3b79fe0e7292ba8b7b","/Users/apple/Downloads/flutter/bin/cache/pkg/sky_engine/sdk_ext/vmservice_io.dart":"6137595b8118b04910c4f137a94bad5f","build/flutteroutput/aot/app.dill":"2e950c984f2f38516ab449165ef41064","build/flutteroutput/aot/isolate_snapshot_data":"ad8b1bdc9fb3b90acf37fb36ab8dfb65","build/flutteroutput/aot/isolate_snapshot_instr":"1cec29da7fc2debcb667f390ad798350","build/flutteroutput/aot/vm_snapshot_data":"9df51beb7ff50608e0e854f7232fd2f4","build/flutteroutput/aot/vm_snapshot_instr":"4f207dc4df14e95febb3bb4e4c611765"}} \ No newline at end of file diff --git a/flutter.sh b/flutter.sh index 20390beec4c658abe4fc6e5104fd9e00f442b36f..17992de8761c29ac3c0f0830a3058694e3da9de1 100755 --- a/flutter.sh +++ b/flutter.sh @@ -49,6 +49,16 @@ function clean(){ ${rootFlutter} packages get } +#====apk android +function android_apk(){ + flutter build apk + cp -r /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/app-${suff}.apk /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/app-${suff}.zip + cd /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/ + unzip /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/app-${suff}.zip + cp -r /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/lib/armeabi-v7a/libapp.so /Users/apple/lsy/gengmei_alpha/alpha/libs/armeabi-v7a + +} + #====build android function android(){ ${rootFlutter} build aot --release --output-dir=build/flutteroutput/aot @@ -216,9 +226,10 @@ mkdir /Users/apple/lsy/aar_update/androd${message}/ mkdir /Users/apple/lsy/aar_update/ios${message}/ clean -android +android_apk +#android #android_publish -upload_android_aar +#upload_android_aar #ios #ios_publish #notifyDingDing diff --git a/ios/.symlinks/plugins/gengmei_flutter_plugin b/ios/.symlinks/plugins/gengmei_flutter_plugin index e1aa53c22e8ae3379c79e55edf916db85753ba81..6b4b622b6ab682730e75fa1c92afb8b266f29ff9 120000 --- a/ios/.symlinks/plugins/gengmei_flutter_plugin +++ b/ios/.symlinks/plugins/gengmei_flutter_plugin @@ -1 +1 @@ -/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae \ No newline at end of file +/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7 \ No newline at end of file diff --git a/ios/Flutter/App.framework/flutter_assets/LICENSE b/ios/Flutter/App.framework/flutter_assets/LICENSE index 57f4d979636bd3c97e77d52c12495460f8e19d7f..7e4f6bf35eb62ad715bcba191358974accff7c65 100644 --- a/ios/Flutter/App.framework/flutter_assets/LICENSE +++ b/ios/Flutter/App.framework/flutter_assets/LICENSE @@ -2,6 +2,7 @@ analyzer args csslib logging +protobuf Copyright 2013, the Dart project authors. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -35,6 +36,7 @@ async collection convert crypto +http2 mime package_config package_resolver @@ -3266,6 +3268,7 @@ charcode dart_style fixnum glob +googleapis_auth http http_multi_server http_parser @@ -6284,6 +6287,186 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- +grpc + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +-------------------------------------------------------------------------------- harfbuzz Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net> diff --git a/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin b/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin index f2bb651a6d665b30149f6b86e9c4312ca8f84cd4..232179e6c90184dab6dcbbd87af64e77662b8120 100644 Binary files a/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin and b/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin differ diff --git a/ios/Flutter/Generated.xcconfig b/ios/Flutter/Generated.xcconfig index 7dd6be0fedaeee81fca0dd026dad84550d8d3f04..7949074e88238e3c69d181708d150d60ad18dcb7 100644 --- a/ios/Flutter/Generated.xcconfig +++ b/ios/Flutter/Generated.xcconfig @@ -1,10 +1,9 @@ // This is a generated file; do not edit or check into version control. FLUTTER_ROOT=/Users/apple/Downloads/flutter FLUTTER_APPLICATION_PATH=/Users/apple/lsy/gmalpha_flutter -FLUTTER_TARGET=/Users/apple/lsy/gmalpha_flutter/lib/main.dart +FLUTTER_TARGET=lib/main.dart FLUTTER_BUILD_DIR=build SYMROOT=${SOURCE_ROOT}/../build/ios FLUTTER_FRAMEWORK_DIR=/Users/apple/Downloads/flutter/bin/cache/artifacts/engine/ios FLUTTER_BUILD_NAME=1.0.0 FLUTTER_BUILD_NUMBER=1 -TRACK_WIDGET_CREATION=true diff --git a/ios/Pods/Manifest.lock b/ios/Pods/Manifest.lock new file mode 100644 index 0000000000000000000000000000000000000000..d43cf206f370dae4e36fcecd3ab12b8560587ecb --- /dev/null +++ b/ios/Pods/Manifest.lock @@ -0,0 +1,56 @@ +PODS: + - Flutter (1.0.0) + - flutter_boost (0.0.1): + - Flutter + - xservice_kit + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - gengmei_flutter_plugin (0.0.1): + - Flutter + - path_provider (0.0.1): + - Flutter + - sqflite (0.0.1): + - Flutter + - FMDB (~> 2.7.2) + - xservice_kit (0.0.1): + - Flutter + +DEPENDENCIES: + - Flutter (from `.symlinks/flutter/ios`) + - flutter_boost (from `.symlinks/plugins/flutter_boost/ios`) + - gengmei_flutter_plugin (from `.symlinks/plugins/gengmei_flutter_plugin/ios`) + - path_provider (from `.symlinks/plugins/path_provider/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) + - xservice_kit (from `.symlinks/plugins/xservice_kit/ios`) + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - FMDB + +EXTERNAL SOURCES: + Flutter: + :path: ".symlinks/flutter/ios" + flutter_boost: + :path: ".symlinks/plugins/flutter_boost/ios" + gengmei_flutter_plugin: + :path: ".symlinks/plugins/gengmei_flutter_plugin/ios" + path_provider: + :path: ".symlinks/plugins/path_provider/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" + xservice_kit: + :path: ".symlinks/plugins/xservice_kit/ios" + +SPEC CHECKSUMS: + Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a + flutter_boost: dd4635cb5672549d64a0a9e47accd1e9ee1c4de8 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + gengmei_flutter_plugin: 9461e8644c06c4a0e38292ddcca1cc55e6ac6156 + path_provider: d6b45f2abd6d46082316e15beadf67eeb95adb2a + sqflite: 5ba50d7e98116c306c2d9c67067d2c963bdb4c9e + xservice_kit: 076aa63eef6fad67a8fd1542f7b1cabb5a8b23fc + +PODFILE CHECKSUM: 35a37ac9f50a31e3627f8c9992b49120478cca1a + +COCOAPODS: 1.7.4 diff --git a/ios/Pods/Pods.xcodeproj/project.pbxproj b/ios/Pods/Pods.xcodeproj/project.pbxproj index 15705578b7da62fd788fb8eb16e871cdbf4d410e..7a4314801e13dda110ae97c96b46a809f1b8d3cd 100644 --- a/ios/Pods/Pods.xcodeproj/project.pbxproj +++ b/ios/Pods/Pods.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 03B993AE25345F5ECAA1598606F77C31 /* xservice_kit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAC0805B6620FAC6D629239C439A39ED /* xservice_kit.framework */; }; 04DF72DE83D8487D7F0E1B53940DFA60 /* MCUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B8B72A88B0A11F14788CE46ACC5B5B /* MCUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 05CD169A48E85416161F63D437C82DEB /* NavigationService_closePage.h in Headers */ = {isa = PBXBuildFile; fileRef = C4A20B7AE36C4C77E51ABFD3FC708C41 /* NavigationService_closePage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 085312CB995B2A5A9BDAD34EF678974E /* GengmeiFlutterPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A2D04E518DFADF9EE770B928371D75D /* GengmeiFlutterPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B898504D5C00AE7DD451B4564AB9945 /* FLBFlutterAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4B82EC7D770B0A643D7EC3E31EDC52 /* FLBFlutterAppDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B91B08999DBCF3D1C42B65D5186315A /* FlutterBoostConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 99585DE8285BEA48AFF7531020E1A36C /* FlutterBoostConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 10BEB548CA17413DFCDC7F63CA79D943 /* SqflitePlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 38D75676A97888C7E7EB75CCCA20B38C /* SqflitePlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -35,11 +36,10 @@ 1D0FD437E272F157576B46B7906E80D6 /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ECC1027C2866B067755F3F6D949F982 /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 244F2D4CF7DE9C52C86FDF5C05155B5A /* FLBFlutterViewContainerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DB5CAE4655BBDACCE85DEA227056BD /* FLBFlutterViewContainerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25C9891C4DFA1CD825170AA1E7E175FB /* FLBFlutterApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = CE2F75B2D2868581ED507994E7943031 /* FLBFlutterApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 263A5AAD4659C98A5EF0E4F8ECAD5E95 /* AlbumItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 573C15663CDA31463FF17006ED785479 /* AlbumItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2655F94F65F8566851D53C7E7D8ACE1C /* FLBFlutterEngineOld.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AFBC8808503E4962D193BE0B3F6339E /* FLBFlutterEngineOld.m */; }; + 289CDDDB0D2EB94B77FB3C0A7D7E6630 /* GengmeiFlutterPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED99F92A224830257776DB247C0F79C /* GengmeiFlutterPlugin.m */; }; 29D5A1D5613F7B7BBE3D5707721289FC /* FlutterMessageFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 6095328DADAE05CEF290229C87A553AF /* FlutterMessageFactory.m */; }; 2B04EA33A88189A1BAB5FEAE5CAD3050 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 808624F4F8A594D143E713602E9E20CB /* FMDB.framework */; }; - 2B2B083D229C9FB9EC92F656BB328A5C /* AlbumItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 246EFC1986FDB3C47EF980C09F331593 /* AlbumItem.m */; }; 2C14D1068AFFDA4445CCB050CAEA7A89 /* NavigationService_closePage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 569FA9EFBE964B0A7FC8DC031017B02B /* NavigationService_closePage.mm */; }; 2C1DA7BFC84A8A7A1263E6EB458EF281 /* MessengerFacede.h in Headers */ = {isa = PBXBuildFile; fileRef = EBD2EE57CB71B6254281DD3E824BCC44 /* MessengerFacede.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2D13B3E8C2B2B35DB79B6AE9FEE77562 /* FLBFlutterViewProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 42ED0627F8AAAF4AF14B4527422F820A /* FLBFlutterViewProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -50,18 +50,20 @@ 33A2403C59F18C929E398AFD29B0BE3E /* FLBMemoryInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7418A483FA5B27D3FF09BE1A55EB736C /* FLBMemoryInspector.mm */; }; 366EF54CB3A62B53631B53BF74C38973 /* NavigationService_onShownContainerChanged.mm in Sources */ = {isa = PBXBuildFile; fileRef = B55542E3314C386C6D6D48974EF2B849 /* NavigationService_onShownContainerChanged.mm */; }; 36DA4B3D5768789DD27C213C70723935 /* FLBFlutterViewControllerAdaptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C12C7226B0FB89826AB6814A1A7A11A /* FLBFlutterViewControllerAdaptor.m */; }; + 3871A8456BC130A793A994FFE0295845 /* ResultManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE612CDC86CD5CF4773D50DC51A731B /* ResultManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 389C8EAC034E7D7C5079DFC53D2C4A6F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF05496314AA5FB8993AB883EA27E6EC /* Foundation.framework */; }; 3EEB3677C512A78269107D4A19ECBD1F /* FlutterMessageFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 939AE363173A091D9AF1EEF1BB4828E0 /* FlutterMessageFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3F0BA8D704D1DCDA2E34E6BA002CD4BC /* ServiceGateway.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0E0FF52D004484E632D27251A0F0C1 /* ServiceGateway.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40BBEABD16312842CEAF63190A768103 /* gengmei_flutter_plugin-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFD270AA40AEC6C4A13AB3F5D3B5C78 /* gengmei_flutter_plugin-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40BBEABD16312842CEAF63190A768103 /* gengmei_flutter_plugin-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6156DCCEA35F312193BDB7F36E6EAAD1 /* gengmei_flutter_plugin-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 41984DC44806E1CDF2B73DAA76199416 /* Pods-Runner-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96BF45FBE2BC9AD7B2D7E56D01B5EE46 /* Pods-Runner-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42081C3CA44B83AE8605CE1265236D6B /* gengmei_flutter_plugin-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EF40E6322B18CD729BE3ECBE4BCAD745 /* gengmei_flutter_plugin-dummy.m */; }; + 42081C3CA44B83AE8605CE1265236D6B /* gengmei_flutter_plugin-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D71124C9F1CF902D25C079304807231A /* gengmei_flutter_plugin-dummy.m */; }; 44297B79697C27B0206B228F5F6984BF /* SqfliteOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4CAF3CDB0BE5C7969DCD95FD9FF5F5 /* SqfliteOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 479AAC9A8CF078B25E51437173CEA28F /* xservice_kit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B99C6496A5236CBBC83E9A39253A7A37 /* xservice_kit-dummy.m */; }; 5305FBA7F3212B9ABF27ADFB45216DB7 /* xservice_kit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39C8FF258497744F3B6A4923BE9DF10A /* xservice_kit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 539D7B1509CC92911DE17F55431BA934 /* FLBPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD452E29FFB32B243EAC11B587D2E89 /* FLBPlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5A7DB43D7E9CEF6F8A402305FC8DDFC4 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 569427164E5D7A260B93416CC381B4E3 /* AVFoundation.framework */; }; 5B05D4A3621E0AE42277FF13C2A3B47D /* FLBFlutterViewContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = E405C5C9FDB7B872A2FBE6E565A3CC72 /* FLBFlutterViewContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DECC09B386D584FF350322FD9482B4B /* AlbumItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B6D45C195452CB718EB46BFE49EA18D4 /* AlbumItem.m */; }; 5E4AEC5FA4E9B35F6E8EE790CDE60A7B /* FLBViewProviderFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DCA60122E79E89BEB01529F6217B1E /* FLBViewProviderFactory.m */; }; 608BCA063CF7A8DA486D9F239C13A4D6 /* FlutterBoost.h in Headers */ = {isa = PBXBuildFile; fileRef = D1026B5CDBE9DFF26F6F1937BB6D4973 /* FlutterBoost.h */; settings = {ATTRIBUTES = (Public, ); }; }; 60D168ADC4476689A638ACC27EF6C5AD /* FLBViewProviderFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 369173C3E11479A2D6F748C13B70346B /* FLBViewProviderFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -71,7 +73,6 @@ 67858BF439D139E0E713CEA7CA7598BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF05496314AA5FB8993AB883EA27E6EC /* Foundation.framework */; }; 692A1957D03C76562C9A2155C2631596 /* FlutterMessageClient.h in Headers */ = {isa = PBXBuildFile; fileRef = D08CA97B8479802E8F4A31FC6C2D198A /* FlutterMessageClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6940748192C1E6171364F829AB8A38A9 /* flutter_boost-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ADE8B68A8432F99B527670AADD249588 /* flutter_boost-dummy.m */; }; - 6B41538B2E9FC3E5B8820714DD2B069E /* ResultManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFD0C575BEF605674256D7746AF1997 /* ResultManager.m */; }; 6B4B2F0EAC373CE2FBF23CB324F72222 /* sqflite-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BA51BCDF2FE1F32D286A0F85762C06 /* sqflite-dummy.m */; }; 6CD348D20E3B10D6AF0B058081F54AC5 /* FLBMemoryInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = AEEA74CBC1DFB1EBB02D7F7A84CD70A4 /* FLBMemoryInspector.h */; settings = {ATTRIBUTES = (Project, ); }; }; 72096C922035613368BC7163EF505A6C /* FlutterServiceCallDispather.h in Headers */ = {isa = PBXBuildFile; fileRef = F33B8440DACB7C8253C9978A621A66B7 /* FlutterServiceCallDispather.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -105,7 +106,7 @@ AEA50AA228B2B25D84EC7630DAF56E29 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF05496314AA5FB8993AB883EA27E6EC /* Foundation.framework */; }; AF0FF11EFA8D41DB2499BDA8F2948172 /* FlutterBoostPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = C456B927E51F93B74E62778A74D4CC08 /* FlutterBoostPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; B08C82846BBE48C797851452E74369FB /* FlutterChannelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F654C78F3F955B8ABAB5366C52289D70 /* FlutterChannelManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B123912BFE1A7A414B73677654385511 /* GengmeiFlutterPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 570CA337FACE405D02EA0485EB4D07EE /* GengmeiFlutterPlugin.m */; }; + B1EC17843C9A6C63A765559EA0F9D27D /* AlbumItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A18BB34081618984C67E01A0FE7E5F89 /* AlbumItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; B637498CE81BBE65586C2E04F090118B /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEF768B344F6F590EB3F801121B95EC /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; BC28C5B77602750F20C64396CD65C339 /* FlutterServiceTemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4891778A4BC145DBA162916310731E33 /* FlutterServiceTemplate.m */; }; C393881B728C9CC4E01F3AE75148F319 /* MessageClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 166A54FADCA5F709C2A14157259915F7 /* MessageClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -118,6 +119,7 @@ DDE2BF4CCA78A15D437136A5FCB3E00C /* FLBFlutterEngineOld.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F8CB9F8D70912FF03BDD2CEDD88620 /* FLBFlutterEngineOld.h */; settings = {ATTRIBUTES = (Project, ); }; }; E086E080415672FCDAB0C022DACC1258 /* NavigationService_flutterCanPop.h in Headers */ = {isa = PBXBuildFile; fileRef = 45A0C546BF22BDF683940A04198D0306 /* NavigationService_flutterCanPop.h */; settings = {ATTRIBUTES = (Project, ); }; }; E14EF0EF4B682E132E6F4F6F6B5F55BE /* MessengerFacede.m in Sources */ = {isa = PBXBuildFile; fileRef = E33A931D1F25BAE6C467E0281434F927 /* MessengerFacede.m */; }; + E1562A202DAB95174C0C36C1032C53B1 /* ResultManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FA5639B1709BAEDDFF2DC77D9582750 /* ResultManager.m */; }; E51912CD1A59D0019D69D341C09D8326 /* FLBFlutterViewContainerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FE7C104B80782C57FEE798E9A0832E25 /* FLBFlutterViewContainerManager.m */; }; E5EE41D34AAA166993C5DE1A753FC0E6 /* FlutterBoostConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DC229DECD6176E7321833263DDB5474 /* FlutterBoostConfig.m */; }; E5F292047293E27FD0D1DFFED39D9D4D /* Pods-Runner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B3C932BD54DBB963102A89E0F9E3948 /* Pods-Runner-dummy.m */; }; @@ -136,9 +138,7 @@ FD9490F3C9A9FBE199D96FF82E6755B0 /* XserviceKitPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = EAE349862EC999DE1C1C7D654049741A /* XserviceKitPlugin.m */; }; FDB74FEF521376E1A2BF0FF2C3670435 /* FLBFlutterAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 90F74581A45DA61D19AC8A6DC9652779 /* FLBFlutterAppDelegate.m */; }; FDF9D5CA73DC2C0DEFD8E8EF0B863E79 /* FlutterServiceCallHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = D3747332D4ECF59C0C6E4EF043262166 /* FlutterServiceCallHandler.m */; }; - FE6BC8938F44B656B86FD72D6A3D7612 /* ResultManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFFC2064CB7D26378D4707267686723 /* ResultManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; FED0C16F908A142F20F92E279941CEF7 /* FMDB-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2C5B1A7AD088F54DF9ADA31E4D1024 /* FMDB-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF01B6B43FFD5D9D8C7510B5B5CB2707 /* GengmeiFlutterPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5889027E6F6CCD236B7A891779B91E96 /* GengmeiFlutterPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; FFCB35128F176B40A427F7DEB37BB949 /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A403596C092A189B80E9351779DEF0A /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; /* End PBXBuildFile section */ @@ -246,35 +246,35 @@ /* Begin PBXFileReference section */ 029F47CCEE5A0AAA15612D9850A24F94 /* FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FMDB.xcconfig; sourceTree = "<group>"; }; 03970378924BFA4AC3EBC0968856D679 /* sqflite-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "sqflite-Info.plist"; sourceTree = "<group>"; }; + 071F7E1EE4A5B2893DF44E17895C4A96 /* gengmei_flutter_plugin-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "gengmei_flutter_plugin-Info.plist"; sourceTree = "<group>"; }; 0946C721CF99B9EB5AE15E498AA56211 /* FlutterServiceCallDispather.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterServiceCallDispather.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/handler/FlutterServiceCallDispather.m"; sourceTree = "<group>"; }; + 0F1E094AA7C11B520459C705DA306FB9 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/LICENSE"; sourceTree = "<group>"; }; 10B8B72A88B0A11F14788CE46ACC5B5B /* MCUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCUtils.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Message/MCUtils.h"; sourceTree = "<group>"; }; 166A54FADCA5F709C2A14157259915F7 /* MessageClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageClient.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Message/MessageClient.h"; sourceTree = "<group>"; }; 16A24C1D1B85D657619F5FCB92C8A020 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = "../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/LICENSE"; sourceTree = "<group>"; }; 1B1BF5EC5324CEDFA5C56E167F76BFC7 /* FlutterServiceCallHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlutterServiceCallHandler.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/handler/FlutterServiceCallHandler.h"; sourceTree = "<group>"; }; - 1CDA0CA099AD014CF1F005A26F8BD009 /* gengmei_flutter_plugin.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = gengmei_flutter_plugin.xcconfig; sourceTree = "<group>"; }; 1D4CAF3CDB0BE5C7969DCD95FD9FF5F5 /* SqfliteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SqfliteOperation.h; path = "../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/ios/Classes/SqfliteOperation.h"; sourceTree = "<group>"; }; 1D4E9B20277B1E276C370376C9D34084 /* sqflite-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "sqflite-umbrella.h"; sourceTree = "<group>"; }; - 1E03F8BC56E3E39A519E031ACE2AB555 /* gengmei_flutter_plugin.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = gengmei_flutter_plugin.podspec; path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/gengmei_flutter_plugin.podspec"; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 246EFC1986FDB3C47EF980C09F331593 /* AlbumItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AlbumItem.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/Image/AlbumItem.m"; sourceTree = "<group>"; }; 26A70C229DEC7B3CEF26F63FA3271A49 /* FlutterBoostPlugin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterBoostPlugin.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FlutterBoostPlugin.m"; sourceTree = "<group>"; }; 2B0E0FF52D004484E632D27251A0F0C1 /* ServiceGateway.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ServiceGateway.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Service/ServiceGateway.h"; sourceTree = "<group>"; }; 2B4B82EC7D770B0A643D7EC3E31EDC52 /* FLBFlutterAppDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLBFlutterAppDelegate.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FLBFlutterAppDelegate.h"; sourceTree = "<group>"; }; 2C63FAB5B2BEBC23D41BAA0E7EB13F0D /* XKCollectionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = XKCollectionHelper.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/utils/XKCollectionHelper.h"; sourceTree = "<group>"; }; 2ECC1027C2866B067755F3F6D949F982 /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = "<group>"; }; - 2F75D515AF177BFA40D7BA80B71E9B64 /* gengmei_flutter_plugin-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "gengmei_flutter_plugin-prefix.pch"; sourceTree = "<group>"; }; 317C26B9A7CEDD34ADE8F37FAAB7AC20 /* Pods-Runner-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Runner-frameworks.sh"; sourceTree = "<group>"; }; - 326A9274A5EC7CE665EA1DDBE2B1B6FC /* gengmei_flutter_plugin.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = gengmei_flutter_plugin.modulemap; sourceTree = "<group>"; }; + 33A5F6BD2A41B07E20223E3D2B704DB3 /* gengmei_flutter_plugin.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = gengmei_flutter_plugin.modulemap; sourceTree = "<group>"; }; 35CB06492B699F7BA624B036808A835B /* FLBViewControllerResultHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLBViewControllerResultHandler.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Container/FLBViewControllerResultHandler.h"; sourceTree = "<group>"; }; 369173C3E11479A2D6F748C13B70346B /* FLBViewProviderFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLBViewProviderFactory.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Adaptor/FLBViewProviderFactory.h"; sourceTree = "<group>"; }; 36BF48738AEE86CF909EB9645CC1256F /* FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FMDB-dummy.m"; sourceTree = "<group>"; }; 383132A6A21959C45C1B1F4B7335A289 /* NavigationService_flutterCanPop.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = NavigationService_flutterCanPop.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_flutterCanPop.mm"; sourceTree = "<group>"; }; 38D75676A97888C7E7EB75CCCA20B38C /* SqflitePlugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SqflitePlugin.h; path = "../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/ios/Classes/SqflitePlugin.h"; sourceTree = "<group>"; }; 39C8FF258497744F3B6A4923BE9DF10A /* xservice_kit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "xservice_kit-umbrella.h"; sourceTree = "<group>"; }; - 3A5298A4AA9194FE3FCE5735F7F6F5AB /* gengmei_flutter_plugin-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "gengmei_flutter_plugin-Info.plist"; sourceTree = "<group>"; }; + 3A2D04E518DFADF9EE770B928371D75D /* GengmeiFlutterPlugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GengmeiFlutterPlugin.h; path = "../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/GengmeiFlutterPlugin.h"; sourceTree = "<group>"; }; 3A84237133A5E815F8047CEFF8B1AFC6 /* FlutterNativeService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlutterNativeService.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Service/FlutterNativeService.h"; sourceTree = "<group>"; }; + 3AFE029766B04558E5A3606BADCEB303 /* gengmei_flutter_plugin.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = gengmei_flutter_plugin.podspec; path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/gengmei_flutter_plugin.podspec"; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 3B26E232BDBF78B9FC10672EEE5E7E5F /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreMedia.framework; sourceTree = DEVELOPER_DIR; }; 3E2C2D4320A5166790A9F1EA3CDEBE99 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; 3E8540AC3009C9084B25183B7EAF4ADE /* path_provider-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "path_provider-dummy.m"; sourceTree = "<group>"; }; + 3ED99F92A224830257776DB247C0F79C /* GengmeiFlutterPlugin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GengmeiFlutterPlugin.m; path = "../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/GengmeiFlutterPlugin.m"; sourceTree = "<group>"; }; 41B8BDA5F2528D6BA445FE29FFEC9976 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = "<group>"; }; 42ED0627F8AAAF4AF14B4527422F820A /* FLBFlutterViewProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLBFlutterViewProvider.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Adaptor/FLBFlutterViewProvider.h"; sourceTree = "<group>"; }; 44565BC82210059EA5508B4FCCD1F5B4 /* XKCollectionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = XKCollectionHelper.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/utils/XKCollectionHelper.m"; sourceTree = "<group>"; }; @@ -283,6 +283,7 @@ 467C37C02127567FEC8C584E794EC482 /* flutter_boost-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "flutter_boost-umbrella.h"; sourceTree = "<group>"; }; 4891778A4BC145DBA162916310731E33 /* FlutterServiceTemplate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterServiceTemplate.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Service/FlutterServiceTemplate.m"; sourceTree = "<group>"; }; 494F9BC3B69A9364A2D7FA65ACCC7394 /* SqfliteOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SqfliteOperation.m; path = "../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5/ios/Classes/SqfliteOperation.m"; sourceTree = "<group>"; }; + 49EEB831D122F8536B66A0D756CD0A4E /* gengmei_flutter_plugin-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "gengmei_flutter_plugin-prefix.pch"; sourceTree = "<group>"; }; 4AEC16D66C23A31E2709B1B944E2EDA0 /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = "<group>"; }; 4C9F69E76ED4A44B75FEC01D8E4A86C1 /* NavigationService_onFlutterPageResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NavigationService_onFlutterPageResult.h; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_onFlutterPageResult.h"; sourceTree = "<group>"; }; 4F303F838F50BC2D204140DCCCA75979 /* FLBResultMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLBResultMediator.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FLBResultMediator.h"; sourceTree = "<group>"; }; @@ -292,23 +293,21 @@ 53FD6B8EC5E966BFFA4991930D3F7BB3 /* sqflite-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "sqflite-prefix.pch"; sourceTree = "<group>"; }; 569427164E5D7A260B93416CC381B4E3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; 569FA9EFBE964B0A7FC8DC031017B02B /* NavigationService_closePage.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = NavigationService_closePage.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_closePage.mm"; sourceTree = "<group>"; }; - 570CA337FACE405D02EA0485EB4D07EE /* GengmeiFlutterPlugin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GengmeiFlutterPlugin.m; path = "../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/GengmeiFlutterPlugin.m"; sourceTree = "<group>"; }; - 573C15663CDA31463FF17006ED785479 /* AlbumItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AlbumItem.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/Image/AlbumItem.h"; sourceTree = "<group>"; }; - 5889027E6F6CCD236B7A891779B91E96 /* GengmeiFlutterPlugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GengmeiFlutterPlugin.h; path = "../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/GengmeiFlutterPlugin.h"; sourceTree = "<group>"; }; 5AC62254C4A04896D78BB3A4FABA8733 /* sqflite.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = sqflite.modulemap; sourceTree = "<group>"; }; - 5CFD270AA40AEC6C4A13AB3F5D3B5C78 /* gengmei_flutter_plugin-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "gengmei_flutter_plugin-umbrella.h"; sourceTree = "<group>"; }; 5DC229DECD6176E7321833263DDB5474 /* FlutterBoostConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterBoostConfig.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FlutterBoostConfig.m"; sourceTree = "<group>"; }; + 5EE612CDC86CD5CF4773D50DC51A731B /* ResultManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ResultManager.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/Image/ResultManager.h"; sourceTree = "<group>"; }; 5EEF768B344F6F590EB3F801121B95EC /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = "<group>"; }; 5F73088D846B7F43A16C7376C8FA2309 /* Service_NavigationService.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Service_NavigationService.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/service/Service_NavigationService.mm"; sourceTree = "<group>"; }; + 5FA5639B1709BAEDDFF2DC77D9582750 /* ResultManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ResultManager.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/Image/ResultManager.m"; sourceTree = "<group>"; }; 6057A11EC6F910183B7665C56B1AF256 /* path_provider.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = path_provider.podspec; path = "../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/ios/path_provider.podspec"; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 6095328DADAE05CEF290229C87A553AF /* FlutterMessageFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterMessageFactory.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Message/FlutterMessageFactory.m"; sourceTree = "<group>"; }; 6149911C018B797F9703B25929968D20 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = ../../../../../../Downloads/flutter/bin/cache/artifacts/engine/ios/LICENSE; sourceTree = "<group>"; }; + 6156DCCEA35F312193BDB7F36E6EAAD1 /* gengmei_flutter_plugin-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "gengmei_flutter_plugin-umbrella.h"; sourceTree = "<group>"; }; 669E8F25E1897672BDB80B7EB784DA24 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Runner.framework; path = "Pods-Runner.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 68F1D770BBCF81B519B7EA8FD544941C /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = "<group>"; }; 6AFBC8808503E4962D193BE0B3F6339E /* FLBFlutterEngineOld.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLBFlutterEngineOld.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Adaptor/FLBFlutterEngineOld.m"; sourceTree = "<group>"; }; 7116FEBF1CF148B870674694C37664A3 /* FLBFlutterApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLBFlutterApplication.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FLBFlutterApplication.m"; sourceTree = "<group>"; }; 71A1B57CDFAEF1266F62D4A291DC7B9D /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = "<group>"; }; - 7266A705F19FB4FDEFFBDA480ABE0BBB /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/LICENSE"; sourceTree = "<group>"; }; 7418A483FA5B27D3FF09BE1A55EB736C /* FLBMemoryInspector.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FLBMemoryInspector.mm; path = "../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Support/Memory/FLBMemoryInspector.mm"; sourceTree = "<group>"; }; 7A0774DAD07CA59B41595BE30555AFBA /* FlutterChannelManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterChannelManager.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Message/FlutterChannelManager.m"; sourceTree = "<group>"; }; 7B3C932BD54DBB963102A89E0F9E3948 /* Pods-Runner-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Runner-dummy.m"; sourceTree = "<group>"; }; @@ -317,7 +316,6 @@ 7CDC2FEC28A03AE7135C3163E23A10B3 /* gengmei_flutter_plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = gengmei_flutter_plugin.framework; path = gengmei_flutter_plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7D87BEAB2277BF946EB6E930F7FCEF4D /* NavigationService_openPage.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = NavigationService_openPage.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_openPage.mm"; sourceTree = "<group>"; }; 7D8D633D2A89E6E79E96FCB08782F35A /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE.md; path = "../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/LICENSE.md"; sourceTree = "<group>"; }; - 7FFD0C575BEF605674256D7746AF1997 /* ResultManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ResultManager.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/Image/ResultManager.m"; sourceTree = "<group>"; }; 808624F4F8A594D143E713602E9E20CB /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80CAC645393715919AD1F322414EFFFA /* flutter_boost.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = flutter_boost.podspec; path = "../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/flutter_boost.podspec"; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 8BF14EA62BE371202295E8C08CCC1207 /* FMDB-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FMDB-Info.plist"; sourceTree = "<group>"; }; @@ -337,10 +335,10 @@ 9A403596C092A189B80E9351779DEF0A /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = "<group>"; }; 9B8ED278F18DDECA8B2CA8024612F809 /* flutter_boost.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = flutter_boost.xcconfig; sourceTree = "<group>"; }; 9C4B005469E04C78992EFF98541E2E83 /* FLBFlutterEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLBFlutterEngine.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Adaptor/FLBFlutterEngine.m"; sourceTree = "<group>"; }; - 9CFFC2064CB7D26378D4707267686723 /* ResultManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ResultManager.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios/Classes/Image/ResultManager.h"; sourceTree = "<group>"; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9F79F8269DC34AC56BB3D1D9652C0D86 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; A10F0EB2F4B97C8F444882913CE65D0B /* path_provider-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "path_provider-Info.plist"; sourceTree = "<group>"; }; + A18BB34081618984C67E01A0FE7E5F89 /* AlbumItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AlbumItem.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/Image/AlbumItem.h"; sourceTree = "<group>"; }; A3A80BA70CFB7F75C5391BEBBBA8C9DA /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FMDB.framework; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A59E15BCCF3A7F690770A38AD711A9F5 /* PathProviderPlugin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PathProviderPlugin.m; path = "../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0/ios/Classes/PathProviderPlugin.m"; sourceTree = "<group>"; }; A6014F88D0417A356B8EB16CE7C73769 /* xservice_kit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = xservice_kit.modulemap; sourceTree = "<group>"; }; @@ -352,6 +350,7 @@ AF05496314AA5FB8993AB883EA27E6EC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; B34D3E2341ED7C6F8B79B4990D721992 /* NavigationService_pageOnStart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NavigationService_pageOnStart.h; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_pageOnStart.h"; sourceTree = "<group>"; }; B55542E3314C386C6D6D48974EF2B849 /* NavigationService_onShownContainerChanged.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = NavigationService_onShownContainerChanged.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_onShownContainerChanged.mm"; sourceTree = "<group>"; }; + B6D45C195452CB718EB46BFE49EA18D4 /* AlbumItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AlbumItem.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios/Classes/Image/AlbumItem.m"; sourceTree = "<group>"; }; B799BFFEC5B11F90F501202080A57F37 /* sqflite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = sqflite.framework; path = sqflite.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B99C6496A5236CBBC83E9A39253A7A37 /* xservice_kit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "xservice_kit-dummy.m"; sourceTree = "<group>"; }; BB05EA9EADF5FB427C84D07DB0B6C801 /* Service_NavigationService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Service_NavigationService.h; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/service/Service_NavigationService.h"; sourceTree = "<group>"; }; @@ -359,6 +358,7 @@ C19FBB33702C179D2C9137FC9E08E85F /* ServiceGateway.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ServiceGateway.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Service/ServiceGateway.m"; sourceTree = "<group>"; }; C2DCA60122E79E89BEB01529F6217B1E /* FLBViewProviderFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLBViewProviderFactory.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Adaptor/FLBViewProviderFactory.m"; sourceTree = "<group>"; }; C456B927E51F93B74E62778A74D4CC08 /* FlutterBoostPlugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlutterBoostPlugin.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FlutterBoostPlugin.h"; sourceTree = "<group>"; }; + C4653995009DE25620E7E33BFB7323FB /* gengmei_flutter_plugin.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = gengmei_flutter_plugin.xcconfig; sourceTree = "<group>"; }; C4A20B7AE36C4C77E51ABFD3FC708C41 /* NavigationService_closePage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NavigationService_closePage.h; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_closePage.h"; sourceTree = "<group>"; }; C5BA51BCDF2FE1F32D286A0F85762C06 /* sqflite-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "sqflite-dummy.m"; sourceTree = "<group>"; }; C6A97531656805D3F152A15FBFEFB728 /* FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-prefix.pch"; sourceTree = "<group>"; }; @@ -378,6 +378,7 @@ D2FA70CA298C392CB8332ADEEDD1CE85 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; D3747332D4ECF59C0C6E4EF043262166 /* FlutterServiceCallHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlutterServiceCallHandler.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/handler/FlutterServiceCallHandler.m"; sourceTree = "<group>"; }; D3DB356C25B00E537122E975AD699146 /* NavigationService_onFlutterPageResult.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = NavigationService_onFlutterPageResult.mm; path = "../../../../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Messaging/Generated/NavigationService/handlers/NavigationService_onFlutterPageResult.mm"; sourceTree = "<group>"; }; + D71124C9F1CF902D25C079304807231A /* gengmei_flutter_plugin-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "gengmei_flutter_plugin-dummy.m"; sourceTree = "<group>"; }; D9F2B4CB813B4BDC4D164C6E0868930A /* Pods-Runner-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Runner-acknowledgements.plist"; sourceTree = "<group>"; }; DAE35F9EEF7110C6DC7645F4C250E0F5 /* path_provider.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = path_provider.framework; path = path_provider.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DC5692E7C8B960A46B19D4ECDE12B15E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; @@ -396,7 +397,6 @@ EBD2EE57CB71B6254281DD3E824BCC44 /* MessengerFacede.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessengerFacede.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Message/MessengerFacede.h"; sourceTree = "<group>"; }; ED1604D75507B2A0C64EC1B64293FD9A /* path_provider-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "path_provider-prefix.pch"; sourceTree = "<group>"; }; EDB66FD9CCE979F53A1B5953BE09AB7E /* FLBResultMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLBResultMediator.m; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420/ios/Classes/Boost/FLBResultMediator.m"; sourceTree = "<group>"; }; - EF40E6322B18CD729BE3ECBE4BCAD745 /* gengmei_flutter_plugin-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "gengmei_flutter_plugin-dummy.m"; sourceTree = "<group>"; }; F0007F0C8112A802C1C987047F7A9981 /* FlutterServiceTemplate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlutterServiceTemplate.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/Service/FlutterServiceTemplate.h"; sourceTree = "<group>"; }; F1612E07171501789861FAE898697257 /* MessageDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageDispatcher.h; path = "../../../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios/Classes/handler/MessageDispatcher.h"; sourceTree = "<group>"; }; F2750A0CD5EDD8F75CF0C07E8CD8CD8C /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = "<group>"; }; @@ -522,16 +522,13 @@ path = "../../../../../../../Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29/ios"; sourceTree = "<group>"; }; - 0486188A997CCAD4DE8D76203D5219F9 /* Image */ = { + 095BB89B4C785E535002E23127D962BF /* ios */ = { isa = PBXGroup; children = ( - 573C15663CDA31463FF17006ED785479 /* AlbumItem.h */, - 246EFC1986FDB3C47EF980C09F331593 /* AlbumItem.m */, - 9CFFC2064CB7D26378D4707267686723 /* ResultManager.h */, - 7FFD0C575BEF605674256D7746AF1997 /* ResultManager.m */, + D5EAD317F4A20318D5FB6D75519326B0 /* .symlinks */, ); - name = Image; - path = Image; + name = ios; + path = ios; sourceTree = "<group>"; }; 0A64DDFF53329E51ED864EE57D030506 /* plugins */ = { @@ -557,19 +554,19 @@ path = "../../../../Pods/Target Support Files/sqflite"; sourceTree = "<group>"; }; - 0B4DC6A122713D407615601F29B4B5CD /* .. */ = { + 124F1E1CF92FD09DB48867D21042140C /* .. */ = { isa = PBXGroup; children = ( - 85C78B00C09FB5A64F29E43FAF4E1E50 /* .. */, + 9340A4F69EEFE8C3B499432BDAA70D64 /* .. */, ); name = ..; - path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae/ios"; + path = ..; sourceTree = "<group>"; }; - 124F1E1CF92FD09DB48867D21042140C /* .. */ = { + 1290DBEB9AC44FD2B8337B6BB9871833 /* .. */ = { isa = PBXGroup; children = ( - 9340A4F69EEFE8C3B499432BDAA70D64 /* .. */, + 6A07ED918DA936E37B41C631D8CAF88B /* .. */, ); name = ..; path = ..; @@ -638,6 +635,15 @@ path = "../../../Pods/Target Support Files/Flutter"; sourceTree = "<group>"; }; + 1B029A4442C828CACA152576A9429CF3 /* gengmei_flutter_plugin */ = { + isa = PBXGroup; + children = ( + DDFFAE3C89D753871C813216719F72D6 /* ios */, + ); + name = gengmei_flutter_plugin; + path = gengmei_flutter_plugin; + sourceTree = "<group>"; + }; 1C263F0009D24238E4D366FF9AAC94A0 /* .. */ = { isa = PBXGroup; children = ( @@ -692,13 +698,13 @@ path = lsy; sourceTree = "<group>"; }; - 29B0B75126EFD19F933FE72E0637D476 /* ios */ = { + 29045C4F2AA7C61079A4D9F9BA458B3C /* .. */ = { isa = PBXGroup; children = ( - 7DC6939C72AB1BDE94EA71026B373D96 /* .symlinks */, + 8D4839A26A615A6C848C8086DF2C5A86 /* .. */, ); - name = ios; - path = ios; + name = ..; + path = "../../../../../../../Downloads/flutter/.pub-cache/git/flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7/ios"; sourceTree = "<group>"; }; 34BC13588FF5ECEF76F1B76E24C2A1CF /* Classes */ = { @@ -745,22 +751,15 @@ path = ../.symlinks/flutter/ios; sourceTree = "<group>"; }; - 403C0524F59B71608B1F349FDD2A87C1 /* .. */ = { - isa = PBXGroup; - children = ( - 404D400B05248D9A9087CAFBB5EBD543 /* .. */, - ); - name = ..; - path = ..; - sourceTree = "<group>"; - }; - 404D400B05248D9A9087CAFBB5EBD543 /* .. */ = { + 40FE60FD39C1926C10B4310CD91E6177 /* Classes */ = { isa = PBXGroup; children = ( - 7F3CFB9A95B226A38333606E55B29309 /* .. */, + 3A2D04E518DFADF9EE770B928371D75D /* GengmeiFlutterPlugin.h */, + 3ED99F92A224830257776DB247C0F79C /* GengmeiFlutterPlugin.m */, + 4C9410DDBCA0E62CA1DEBBAE1D7FBC7D /* Image */, ); - name = ..; - path = ..; + name = Classes; + path = Classes; sourceTree = "<group>"; }; 416C37DB082CD24C14D0F74CCEF6DB25 /* ios */ = { @@ -845,6 +844,18 @@ path = ios; sourceTree = "<group>"; }; + 4C9410DDBCA0E62CA1DEBBAE1D7FBC7D /* Image */ = { + isa = PBXGroup; + children = ( + A18BB34081618984C67E01A0FE7E5F89 /* AlbumItem.h */, + B6D45C195452CB718EB46BFE49EA18D4 /* AlbumItem.m */, + 5EE612CDC86CD5CF4773D50DC51A731B /* ResultManager.h */, + 5FA5639B1709BAEDDFF2DC77D9582750 /* ResultManager.m */, + ); + name = Image; + path = Image; + sourceTree = "<group>"; + }; 4EA953E70486C748D568608661AA1266 /* Classes */ = { isa = PBXGroup; children = ( @@ -855,6 +866,15 @@ path = Classes; sourceTree = "<group>"; }; + 5200713CA5B3598460D92CB09B51C2DF /* lsy */ = { + isa = PBXGroup; + children = ( + 89C6DB53BFD43B8A2D93092E1ABC1B75 /* gmalpha_flutter */, + ); + name = lsy; + path = lsy; + sourceTree = "<group>"; + }; 5234837A94CEC770428F63B017F20058 /* .. */ = { isa = PBXGroup; children = ( @@ -894,15 +914,6 @@ path = ../.symlinks/plugins/flutter_boost/ios; sourceTree = "<group>"; }; - 58C8118657F697838CB9F9B33B7EC8BC /* .. */ = { - isa = PBXGroup; - children = ( - 9478CC3ED9713E13A45E4C3738FBBC7D /* .. */, - ); - name = ..; - path = ..; - sourceTree = "<group>"; - }; 59ABEB310529AD623E91215F00AFE808 /* Support Files */ = { isa = PBXGroup; children = ( @@ -996,6 +1007,35 @@ name = Pods; sourceTree = "<group>"; }; + 6A07ED918DA936E37B41C631D8CAF88B /* .. */ = { + isa = PBXGroup; + children = ( + 6E08AFD925B65AADBBAAEF0A8F1E2883 /* .. */, + ); + name = ..; + path = ..; + sourceTree = "<group>"; + }; + 6E08AFD925B65AADBBAAEF0A8F1E2883 /* .. */ = { + isa = PBXGroup; + children = ( + 5200713CA5B3598460D92CB09B51C2DF /* lsy */, + ); + name = ..; + path = ..; + sourceTree = "<group>"; + }; + 7011C15DC4225423523BB6E7305A776B /* gengmei_flutter_plugin */ = { + isa = PBXGroup; + children = ( + 29045C4F2AA7C61079A4D9F9BA458B3C /* .. */, + EF22024B33252C58F1C3BC545EE929F5 /* Pod */, + B3F6267E8D95ABC24595ED343B4820A5 /* Support Files */, + ); + name = gengmei_flutter_plugin; + path = ../.symlinks/plugins/gengmei_flutter_plugin/ios; + sourceTree = "<group>"; + }; 7046F6DA4D7B2C91999495DEFDDAF3E9 /* .symlinks */ = { isa = PBXGroup; children = ( @@ -1099,35 +1139,6 @@ path = path_provider; sourceTree = "<group>"; }; - 7DC6939C72AB1BDE94EA71026B373D96 /* .symlinks */ = { - isa = PBXGroup; - children = ( - 99D2CA54D3B42AEE682ED2183DB0F08D /* plugins */, - ); - name = .symlinks; - path = .symlinks; - sourceTree = "<group>"; - }; - 7F092A7CEAA15A2E0613ABBEC8984E23 /* Classes */ = { - isa = PBXGroup; - children = ( - 5889027E6F6CCD236B7A891779B91E96 /* GengmeiFlutterPlugin.h */, - 570CA337FACE405D02EA0485EB4D07EE /* GengmeiFlutterPlugin.m */, - 0486188A997CCAD4DE8D76203D5219F9 /* Image */, - ); - name = Classes; - path = Classes; - sourceTree = "<group>"; - }; - 7F3CFB9A95B226A38333606E55B29309 /* .. */ = { - isa = PBXGroup; - children = ( - 58C8118657F697838CB9F9B33B7EC8BC /* .. */, - ); - name = ..; - path = ..; - sourceTree = "<group>"; - }; 7F89D7CDE5D255B32B4E34F6356D0A14 /* Message */ = { isa = PBXGroup; children = ( @@ -1156,13 +1167,13 @@ name = Pod; sourceTree = "<group>"; }; - 85C78B00C09FB5A64F29E43FAF4E1E50 /* .. */ = { + 83E2DFFEA6335D76BE4444035176D37F /* plugins */ = { isa = PBXGroup; children = ( - 403C0524F59B71608B1F349FDD2A87C1 /* .. */, + 1B029A4442C828CACA152576A9429CF3 /* gengmei_flutter_plugin */, ); - name = ..; - path = ..; + name = plugins; + path = plugins; sourceTree = "<group>"; }; 86E16164C9ABF5A80FC923757495902E /* .symlinks */ = { @@ -1174,6 +1185,15 @@ path = .symlinks; sourceTree = "<group>"; }; + 89C6DB53BFD43B8A2D93092E1ABC1B75 /* gmalpha_flutter */ = { + isa = PBXGroup; + children = ( + 095BB89B4C785E535002E23127D962BF /* ios */, + ); + name = gmalpha_flutter; + path = gmalpha_flutter; + sourceTree = "<group>"; + }; 8C9DA4CDD37E369D30C6B245C4D20AB8 /* Memory */ = { isa = PBXGroup; children = ( @@ -1193,22 +1213,13 @@ path = ..; sourceTree = "<group>"; }; - 8FFA407C06842EB910C1D202E1CFE914 /* gmalpha_flutter */ = { - isa = PBXGroup; - children = ( - 29B0B75126EFD19F933FE72E0637D476 /* ios */, - ); - name = gmalpha_flutter; - path = gmalpha_flutter; - sourceTree = "<group>"; - }; - 91877D199D71BDE42C04F152BC02E5CA /* ios */ = { + 8D4839A26A615A6C848C8086DF2C5A86 /* .. */ = { isa = PBXGroup; children = ( - 7F092A7CEAA15A2E0613ABBEC8984E23 /* Classes */, + D379C073E9A2F4C4052E091424FBF962 /* .. */, ); - name = ios; - path = ios; + name = ..; + path = ..; sourceTree = "<group>"; }; 924C3F96A9A450B32D770A9D6D8B1599 /* handler */ = { @@ -1244,15 +1255,6 @@ path = ../.symlinks/plugins/sqflite/ios; sourceTree = "<group>"; }; - 9478CC3ED9713E13A45E4C3738FBBC7D /* .. */ = { - isa = PBXGroup; - children = ( - D7DFE1DEFE6B96C81EF644E203C58713 /* lsy */, - ); - name = ..; - path = ..; - sourceTree = "<group>"; - }; 94858DF7E41223DFC525A0EA45414E4A /* .. */ = { isa = PBXGroup; children = ( @@ -1262,15 +1264,6 @@ path = ..; sourceTree = "<group>"; }; - 95A82367D8741067237AE868EAF280CA /* Pod */ = { - isa = PBXGroup; - children = ( - 1E03F8BC56E3E39A519E031ACE2AB555 /* gengmei_flutter_plugin.podspec */, - 7266A705F19FB4FDEFFBDA480ABE0BBB /* LICENSE */, - ); - name = Pod; - sourceTree = "<group>"; - }; 95B174485324F96F813FFF764E9FB73A /* .. */ = { isa = PBXGroup; children = ( @@ -1280,15 +1273,6 @@ path = ..; sourceTree = "<group>"; }; - 99D2CA54D3B42AEE682ED2183DB0F08D /* plugins */ = { - isa = PBXGroup; - children = ( - FD83A17BB2FCDED2C6188D305FCE1BE9 /* gengmei_flutter_plugin */, - ); - name = plugins; - path = plugins; - sourceTree = "<group>"; - }; 99FFA28F1D08AE1728EE24E60D6931D1 /* Pod */ = { isa = PBXGroup; children = ( @@ -1341,7 +1325,7 @@ children = ( 3FFF1029BF94190F9E6257A4FA042D05 /* Flutter */, 5637AFB3BB6D8BCED9136310200E2EB3 /* flutter_boost */, - D0C4D1AE1D1DAFAC40883D98B8763708 /* gengmei_flutter_plugin */, + 7011C15DC4225423523BB6E7305A776B /* gengmei_flutter_plugin */, AD9352B0E771772FEFF139229CD43D5F /* path_provider */, 9397F34A0CFAE2640999FD9AEF32A358 /* sqflite */, 34D50EB6DE658A9451AED97C050DF261 /* xservice_kit */, @@ -1428,27 +1412,27 @@ path = ..; sourceTree = "<group>"; }; - B53D5780591E2DDE79CA0ED08D975996 /* Messaging */ = { + B3F6267E8D95ABC24595ED343B4820A5 /* Support Files */ = { isa = PBXGroup; children = ( - E92B0FBD897AFEB19FB06996FB75139A /* Generated */, + 33A5F6BD2A41B07E20223E3D2B704DB3 /* gengmei_flutter_plugin.modulemap */, + C4653995009DE25620E7E33BFB7323FB /* gengmei_flutter_plugin.xcconfig */, + D71124C9F1CF902D25C079304807231A /* gengmei_flutter_plugin-dummy.m */, + 071F7E1EE4A5B2893DF44E17895C4A96 /* gengmei_flutter_plugin-Info.plist */, + 49EEB831D122F8536B66A0D756CD0A4E /* gengmei_flutter_plugin-prefix.pch */, + 6156DCCEA35F312193BDB7F36E6EAAD1 /* gengmei_flutter_plugin-umbrella.h */, ); - name = Messaging; - path = Messaging; + name = "Support Files"; + path = "../../../../Pods/Target Support Files/gengmei_flutter_plugin"; sourceTree = "<group>"; }; - BC1542D27347F69248E39EEB56247330 /* Support Files */ = { + B53D5780591E2DDE79CA0ED08D975996 /* Messaging */ = { isa = PBXGroup; children = ( - 326A9274A5EC7CE665EA1DDBE2B1B6FC /* gengmei_flutter_plugin.modulemap */, - 1CDA0CA099AD014CF1F005A26F8BD009 /* gengmei_flutter_plugin.xcconfig */, - EF40E6322B18CD729BE3ECBE4BCAD745 /* gengmei_flutter_plugin-dummy.m */, - 3A5298A4AA9194FE3FCE5735F7F6F5AB /* gengmei_flutter_plugin-Info.plist */, - 2F75D515AF177BFA40D7BA80B71E9B64 /* gengmei_flutter_plugin-prefix.pch */, - 5CFD270AA40AEC6C4A13AB3F5D3B5C78 /* gengmei_flutter_plugin-umbrella.h */, + E92B0FBD897AFEB19FB06996FB75139A /* Generated */, ); - name = "Support Files"; - path = "../../../../Pods/Target Support Files/gengmei_flutter_plugin"; + name = Messaging; + path = Messaging; sourceTree = "<group>"; }; BC25CCBC0D7B83245A60A258B5B60AE3 /* service */ = { @@ -1577,24 +1561,22 @@ ); sourceTree = "<group>"; }; - D0C4D1AE1D1DAFAC40883D98B8763708 /* gengmei_flutter_plugin */ = { + D22FA3873448F33104826F4801027EC7 /* Pod */ = { isa = PBXGroup; children = ( - 0B4DC6A122713D407615601F29B4B5CD /* .. */, - 95A82367D8741067237AE868EAF280CA /* Pod */, - BC1542D27347F69248E39EEB56247330 /* Support Files */, + 80CAC645393715919AD1F322414EFFFA /* flutter_boost.podspec */, + 7D8D633D2A89E6E79E96FCB08782F35A /* LICENSE.md */, ); - name = gengmei_flutter_plugin; - path = ../.symlinks/plugins/gengmei_flutter_plugin/ios; + name = Pod; sourceTree = "<group>"; }; - D22FA3873448F33104826F4801027EC7 /* Pod */ = { + D379C073E9A2F4C4052E091424FBF962 /* .. */ = { isa = PBXGroup; children = ( - 80CAC645393715919AD1F322414EFFFA /* flutter_boost.podspec */, - 7D8D633D2A89E6E79E96FCB08782F35A /* LICENSE.md */, + EB6A7EC33A89B9EEAA52BDF1D2851B70 /* .. */, ); - name = Pod; + name = ..; + path = ..; sourceTree = "<group>"; }; D3EDA18633FF7E61AFC84BB0BE135641 /* .. */ = { @@ -1606,13 +1588,13 @@ path = ..; sourceTree = "<group>"; }; - D7DFE1DEFE6B96C81EF644E203C58713 /* lsy */ = { + D5EAD317F4A20318D5FB6D75519326B0 /* .symlinks */ = { isa = PBXGroup; children = ( - 8FFA407C06842EB910C1D202E1CFE914 /* gmalpha_flutter */, + 83E2DFFEA6335D76BE4444035176D37F /* plugins */, ); - name = lsy; - path = lsy; + name = .symlinks; + path = .symlinks; sourceTree = "<group>"; }; D81021CA8096B0948095FEEFF7DD990C /* lsy */ = { @@ -1633,6 +1615,15 @@ path = plugins; sourceTree = "<group>"; }; + DDFFAE3C89D753871C813216719F72D6 /* ios */ = { + isa = PBXGroup; + children = ( + 40FE60FD39C1926C10B4310CD91E6177 /* Classes */, + ); + name = ios; + path = ios; + sourceTree = "<group>"; + }; DF5F4EEE3DD6874C1E521CE2CE8E8E20 /* Adaptor */ = { isa = PBXGroup; children = ( @@ -1704,6 +1695,24 @@ path = Generated; sourceTree = "<group>"; }; + EB6A7EC33A89B9EEAA52BDF1D2851B70 /* .. */ = { + isa = PBXGroup; + children = ( + 1290DBEB9AC44FD2B8337B6BB9871833 /* .. */, + ); + name = ..; + path = ..; + sourceTree = "<group>"; + }; + EF22024B33252C58F1C3BC545EE929F5 /* Pod */ = { + isa = PBXGroup; + children = ( + 3AFE029766B04558E5A3606BADCEB303 /* gengmei_flutter_plugin.podspec */, + 0F1E094AA7C11B520459C705DA306FB9 /* LICENSE */, + ); + name = Pod; + sourceTree = "<group>"; + }; F1766283B0B5C93AC72D0D15E045642C /* .. */ = { isa = PBXGroup; children = ( @@ -1749,15 +1758,6 @@ path = lsy; sourceTree = "<group>"; }; - FD83A17BB2FCDED2C6188D305FCE1BE9 /* gengmei_flutter_plugin */ = { - isa = PBXGroup; - children = ( - 91877D199D71BDE42C04F152BC02E5CA /* ios */, - ); - name = gengmei_flutter_plugin; - path = gengmei_flutter_plugin; - sourceTree = "<group>"; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1765,10 +1765,10 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 263A5AAD4659C98A5EF0E4F8ECAD5E95 /* AlbumItem.h in Headers */, + B1EC17843C9A6C63A765559EA0F9D27D /* AlbumItem.h in Headers */, 40BBEABD16312842CEAF63190A768103 /* gengmei_flutter_plugin-umbrella.h in Headers */, - FF01B6B43FFD5D9D8C7510B5B5CB2707 /* GengmeiFlutterPlugin.h in Headers */, - FE6BC8938F44B656B86FD72D6A3D7612 /* ResultManager.h in Headers */, + 085312CB995B2A5A9BDAD34EF678974E /* GengmeiFlutterPlugin.h in Headers */, + 3871A8456BC130A793A994FFE0295845 /* ResultManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2101,10 +2101,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2B2B083D229C9FB9EC92F656BB328A5C /* AlbumItem.m in Sources */, + 5DECC09B386D584FF350322FD9482B4B /* AlbumItem.m in Sources */, 42081C3CA44B83AE8605CE1265236D6B /* gengmei_flutter_plugin-dummy.m in Sources */, - B123912BFE1A7A414B73677654385511 /* GengmeiFlutterPlugin.m in Sources */, - 6B41538B2E9FC3E5B8820714DD2B069E /* ResultManager.m in Sources */, + 289CDDDB0D2EB94B77FB3C0A7D7E6630 /* GengmeiFlutterPlugin.m in Sources */, + E1562A202DAB95174C0C36C1032C53B1 /* ResultManager.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2354,7 +2354,7 @@ }; 1275FD0A662C1A978F3B33A44637F7DD /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CDA0CA099AD014CF1F005A26F8BD009 /* gengmei_flutter_plugin.xcconfig */; + baseConfigurationReference = C4653995009DE25620E7E33BFB7323FB /* gengmei_flutter_plugin.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2420,7 +2420,7 @@ }; 386AD63853D5C06A3ABA3246B76C2BED /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CDA0CA099AD014CF1F005A26F8BD009 /* gengmei_flutter_plugin.xcconfig */; + baseConfigurationReference = C4653995009DE25620E7E33BFB7323FB /* gengmei_flutter_plugin.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2820,7 +2820,7 @@ }; 93EE3AB812BD3807F97BE196EB7CA067 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CDA0CA099AD014CF1F005A26F8BD009 /* gengmei_flutter_plugin.xcconfig */; + baseConfigurationReference = C4653995009DE25620E7E33BFB7323FB /* gengmei_flutter_plugin.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; diff --git a/lib/ActivityReportModel/ActivityReportRouter.dart b/lib/ActivityReportModel/ActivityReportRouter.dart index 5cb62e59b2d18b006e636e82582bb1f347837db2..e444fa6df519c6916f6f61745e99c9d217e3f887 100644 --- a/lib/ActivityReportModel/ActivityReportRouter.dart +++ b/lib/ActivityReportModel/ActivityReportRouter.dart @@ -8,7 +8,7 @@ import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; import 'package:gmalpha_flutter/ActivityReportModel/ActivityReportRouterImpl.dart'; -@Router("ActivityReportModel", ActivityReportRouterImpl) +@Router("ActivityReportModel", ActivityReportRouterImpl,true) abstract class ActivityReportRouter implements RouterBaser { Widget getActivityReportPage(int id, int type, String fromPage); } diff --git a/lib/ActivityReportModel/page/ActivityReportModel.dart b/lib/ActivityReportModel/page/ActivityReportModel.dart index c30fc2f6c82a1f96fd7114667737f673c090cd75..39d07db90c29674a69a3a0c2f30d0e9ce57285d7 100644 --- a/lib/ActivityReportModel/page/ActivityReportModel.dart +++ b/lib/ActivityReportModel/page/ActivityReportModel.dart @@ -33,23 +33,6 @@ class ActivityReportModel extends BaseModel { }); } - start() { - pageStart("brand_report", fromPage).listen((value) { - print("埋点 pageStart æˆåŠŸï¼Ÿ:$value"); - }).onError((error) { - print(error); - }); - } - - end() { - pageEnd("brand_report", fromPage) - .listen((value) { - print("埋点 pageEnd æˆåŠŸï¼Ÿ:$value"); - }).onError((error) { - print(error); - }); - } - @override void dispose() { activityReportLive.dispost(); diff --git a/lib/ActivityReportModel/page/ActivityReportPage.dart b/lib/ActivityReportModel/page/ActivityReportPage.dart index e3c87572b9b0b96c75e8c2d602a55ab31532f120..ed18b139e8e26f25b8a6abb4c3c9fe53f100bd33 100644 --- a/lib/ActivityReportModel/page/ActivityReportPage.dart +++ b/lib/ActivityReportModel/page/ActivityReportPage.dart @@ -9,6 +9,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:gmalpha_flutter/ActivityReportModel/service/remote/entity/ActivityReportEntity.dart'; import 'package:flutter/material.dart'; import 'package:gmalpha_flutter/ActivityReportModel/page/ActivityReportModel.dart'; +import 'package:gmalpha_flutter/commonModel/base/BasePage.dart'; import 'package:gmalpha_flutter/commonModel/base/Temp.dart'; import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart'; @@ -25,7 +26,7 @@ class ActivityReportPage extends StatefulWidget { State<StatefulWidget> createState() => ActivityReportState(_model); } -class ActivityReportState extends State<ActivityReportPage> { +class ActivityReportState extends BasePage<ActivityReportPage> { ActivityReportModel _model; ActivityReportState(this._model); @@ -33,7 +34,6 @@ class ActivityReportState extends State<ActivityReportPage> { @override void initState() { super.initState(); - _model.start(); _model.init(context); } @@ -105,7 +105,6 @@ class ActivityReportState extends State<ActivityReportPage> { }, )), onWillPop: () { - _model.end(); Navigator.pop(context, ""); }, ); @@ -126,6 +125,16 @@ class ActivityReportState extends State<ActivityReportPage> { super.dispose(); _model.dispose(); } + + @override + String pageName() { + return "brand_report"; + } + + @override + String referrer() { + return _model.fromPage; + } } class TopCard extends StatelessWidget { diff --git a/lib/AlbumModel/AlbumRouter.dart b/lib/AlbumModel/AlbumRouter.dart index 39e1cf448fa7e4a9d9ec6ac7747ff8c61ec10b69..c3ff776f72c25e7050e14982c032d926429d4ece 100644 --- a/lib/AlbumModel/AlbumRouter.dart +++ b/lib/AlbumModel/AlbumRouter.dart @@ -8,7 +8,7 @@ import 'package:gmalpha_flutter/AlbumModel/AlbumRouterImpl.dart'; import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; -@Router("albumModel", AlbumRouterImpl) +@Router("albumModel", AlbumRouterImpl,true) abstract class AlbumRouter implements RouterBaser { Widget getAlbumPage(String provider, bool showCamera, int bigSelectImage, List<String> selectedImages); diff --git a/lib/Annotations/Generator/RouterCenterGenerator.dart b/lib/Annotations/Generator/RouterCenterGenerator.dart index ccb740285e7aa330acab8d2e9e73397672538d4d..1e5d9edbfa45f04fec81e0f3357e9b3b27111c1e 100644 --- a/lib/Annotations/Generator/RouterCenterGenerator.dart +++ b/lib/Annotations/Generator/RouterCenterGenerator.dart @@ -15,9 +15,13 @@ class RouterCenterGenerator extends GeneratorForAnnotation<RouterCenter> { Element element, ConstantReader annotation, BuildStep buildStep) { StringBuffer buffer = new StringBuffer(); StringBuffer importBuffer = new StringBuffer(); + StringBuffer annoBuffer = new StringBuffer(); StringBuffer funBuffer = new StringBuffer(); RouterCenterRestore().buildMap.forEach((f, s) { - buffer.write("map.putIfAbsent(\"${f}\", ()=>${s.second}());\n"); + if (s.four) { + buffer.write("map.putIfAbsent(\"${f}\", ()=>${s.second}());\n"); + } + annoBuffer.write("//${s.second} is resign : ${s.four} \n"); importBuffer.write("${s.first}${s.second}.dart\";\n"); importBuffer.write("${s.first}${s.third}.dart\";\n"); funBuffer.write(""" @@ -40,6 +44,7 @@ class RouterCenterGenerator extends GeneratorForAnnotation<RouterCenter> { String sufPath = pathBuffer.toString(); return """ + ${annoBuffer.toString()} ${importBuffer.toString()} import "${"package:${buildStep.inputId.package}/${sufPath}RouterCenterRestore.dart"}"; import "${"package:${buildStep.inputId.package}/${sufPath}RouterBaser.dart"}"; diff --git a/lib/Annotations/Generator/RouterGenerator.dart b/lib/Annotations/Generator/RouterGenerator.dart index 832cdabfbf445c882efdcbc8d4cad8d17bee47e0..28d9c5f12f0fff2f148ba8e81ec832ea87238504 100644 --- a/lib/Annotations/Generator/RouterGenerator.dart +++ b/lib/Annotations/Generator/RouterGenerator.dart @@ -18,6 +18,7 @@ class RouterGenerator extends GeneratorForAnnotation<Router> { Element element, ConstantReader annotation, BuildStep buildStep) { var modelName = annotation.peek("modelName").stringValue; var typeValue = annotation.peek("impl").typeValue; + var resignThisModel = annotation.peek("resignThisModel").boolValue; var pathSegments = buildStep.inputId.pathSegments; StringBuffer buffer = new StringBuffer(); String interfaceName; @@ -33,7 +34,8 @@ class RouterGenerator extends GeneratorForAnnotation<Router> { "import \"package:${buildStep.inputId.package}/${buffer.toString()}"; String second = typeValue.name; String third = interfaceName; - RouterBuildItem item = new RouterBuildItem(first, second, third); + bool four = resignThisModel; + RouterBuildItem item = new RouterBuildItem(first, second, third, four); if (RouterCenterRestore().buildMap[modelName] != null) { throw Exception("router error have same model name !!! change it name "); diff --git a/lib/Annotations/RouterCenterRestore.mark.dart b/lib/Annotations/RouterCenterRestore.mark.dart index d0d6704eb74f7960211649f8c5dde2c75f4e318a..256d9a694fa2f019ca9aaeec6678bb0f2dd4377d 100644 --- a/lib/Annotations/RouterCenterRestore.mark.dart +++ b/lib/Annotations/RouterCenterRestore.mark.dart @@ -4,8 +4,17 @@ // RouterCenterGenerator // ************************************************************************** +//PrestigeImpl is resign : true +//BuriedImpl is resign : true +//AlbumRouterImpl is resign : true +//ActivityReportRouterImpl is resign : true +//MessageRouterImpl is resign : true +//UserRouterImpl is resign : true + import "package:gmalpha_flutter/PrestigeModel/PrestigeImpl.dart"; import "package:gmalpha_flutter/PrestigeModel/PrestigeRouter.dart"; +import "package:gmalpha_flutter/BuriedLib/BuriedImpl.dart"; +import "package:gmalpha_flutter/BuriedLib/BuriedRouter.dart"; import "package:gmalpha_flutter/AlbumModel/AlbumRouterImpl.dart"; import "package:gmalpha_flutter/AlbumModel/AlbumRouter.dart"; import "package:gmalpha_flutter/ActivityReportModel/ActivityReportRouterImpl.dart"; @@ -43,6 +52,7 @@ class RouterCenterImpl { void init() { map.putIfAbsent("prestigeModel", () => PrestigeImpl()); + map.putIfAbsent("buried_router", () => BuriedImpl()); map.putIfAbsent("albumModel", () => AlbumRouterImpl()); map.putIfAbsent("ActivityReportModel", () => ActivityReportRouterImpl()); map.putIfAbsent("messageModel", () => MessageRouterImpl()); @@ -60,6 +70,13 @@ class RouterCenterImpl { return map["prestigeModel"] as PrestigeRouter; } + BuriedRouter findBuriedRouter() { + if (map["buried_router"] == null) { + return null; + } + return map["buried_router"] as BuriedRouter; + } + AlbumRouter findAlbumRouter() { if (map["albumModel"] == null) { return null; diff --git a/lib/Annotations/anno/Router.dart b/lib/Annotations/anno/Router.dart index 18935758a64d848cce5d0f8130fb89a926c5ac9e..82f6ca3dec1249fae9e3ede5883260342c17e2a7 100644 --- a/lib/Annotations/anno/Router.dart +++ b/lib/Annotations/anno/Router.dart @@ -8,6 +8,7 @@ library Router; class Router { final String modelName; final Type impl; + final bool resignThisModel; - const Router(this.modelName, this.impl); + const Router(this.modelName, this.impl, this.resignThisModel); } diff --git a/lib/Annotations/base/RouterBuildItem.dart b/lib/Annotations/base/RouterBuildItem.dart index 25aa50125106672c22c8693d22276bde60390d61..eb5f77b553cb7f8c7aec2c91433a417636e9311f 100644 --- a/lib/Annotations/base/RouterBuildItem.dart +++ b/lib/Annotations/base/RouterBuildItem.dart @@ -2,9 +2,11 @@ * @author lsy * @date 2019-09-02 **/ -class RouterBuildItem<S, T, Z> { +class RouterBuildItem<S, T, Z, W> { S first; T second; Z third; - RouterBuildItem(this.first, this.second,this.third); -} \ No newline at end of file + W four; + + RouterBuildItem(this.first, this.second, this.third, this.four); +} diff --git a/lib/BuriedLib/BuriedImpl.dart b/lib/BuriedLib/BuriedImpl.dart index 79ef317f461b6b3670352e8b7b38bb3e53029b57..f5b283c10544d718b0f90fd94d4e9f0d5f0d18c9 100644 --- a/lib/BuriedLib/BuriedImpl.dart +++ b/lib/BuriedLib/BuriedImpl.dart @@ -3,7 +3,25 @@ * @date 2019-09-29 **/ import 'package:gmalpha_flutter/BuriedLib/BuriedRouter.dart'; +import 'package:gmalpha_flutter/BuriedLib/buried/BuriedCenter.dart'; -class BuriedImpl implements BuriedRouter{ - -} \ No newline at end of file +class BuriedImpl implements BuriedRouter { + @override + void onPageEnd(String page_name, String inPage, String outPage, + {String fake, + String business_id, + String referrer, + String referrer_id, + String extra_param, + String referrer_tab_name, + String isPush}) { + BuriedCenter.getInstance().onPageEnd(page_name, inPage, outPage, + fake: fake, + business_id: business_id, + referrer: referrer, + referrer_id: referrer_id, + extra_param: extra_param, + referrer_tab_name: referrer_tab_name, + isPush: isPush); + } +} diff --git a/lib/BuriedLib/BuriedRouter.dart b/lib/BuriedLib/BuriedRouter.dart index a65a1b921c4f432ca628945b914e01ba55d77345..718bf26779b0b87d5905185f6e137b110006efd8 100644 --- a/lib/BuriedLib/BuriedRouter.dart +++ b/lib/BuriedLib/BuriedRouter.dart @@ -6,9 +6,14 @@ import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; import 'package:gmalpha_flutter/BuriedLib/BuriedImpl.dart'; -@Router("buried_router",BuriedImpl) -abstract class BuriedRouter extends RouterBaser{ - - - -} \ No newline at end of file +@Router("buried_router", BuriedImpl, true) +abstract class BuriedRouter extends RouterBaser { + void onPageEnd(String page_name, String inPage, String outPage, + {String fake, + String business_id, + String referrer, + String referrer_id, + String extra_param, + String referrer_tab_name, + String isPush}); +} diff --git a/lib/BuriedLib/buried/BuriedCenter.dart b/lib/BuriedLib/buried/BuriedCenter.dart new file mode 100644 index 0000000000000000000000000000000000000000..39b930fadf2d106d7ba63688fbf98ff7153c9b4b --- /dev/null +++ b/lib/BuriedLib/buried/BuriedCenter.dart @@ -0,0 +1,54 @@ +/* + * @author lsy + * @date 2019-09-30 + **/ +import 'package:gmalpha_flutter/BuriedLib/buried/SendTask.dart'; +import 'package:gmalpha_flutter/BuriedLib/buried/constant/Constant.dart'; +import 'package:gmalpha_flutter/BuriedLib/proto/burying.pbgrpc.dart'; +import 'package:gmalpha_flutter/commonModel/app_module.dart'; +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; + +const BURIED_TAG = "BURIED"; + +class BuriedCenter { + static SendTask sendTask; + + static BuriedCenter _instance; + + BuriedCenter._() { + sendTask = new SendTask(); + } + + static BuriedCenter getInstance() { + if (_instance == null) { + _instance = BuriedCenter._(); + } + return _instance; + } + + var normalRequest = BuryingRequest.create(); + + void onPageEnd(String page_name, String inPage, String outPage, + {String fake, + String business_id, + String referrer, + String referrer_id, + String extra_param, + String referrer_tab_name, + String isPush}) { + if (page_name == null) { + print("$BURIED_TAG onPageStart page_name is null"); + } + normalRequest.type = "page_view"; + normalRequest.params["in"] = inPage ?? ""; + normalRequest.params["out"] = outPage ?? ""; + normalRequest.params["page_name"] = page_name ?? ""; + normalRequest.params["business_id"] = business_id ?? ""; + normalRequest.params["referrer"] = referrer ?? ""; + normalRequest.params["referrer_id"] = referrer_id ?? ""; + normalRequest.params["extra_param"] = extra_param ?? ""; + normalRequest.params["referrer_tab_name"] = referrer_tab_name ?? ""; + normalRequest.params["isPush"] = isPush ?? ""; + sendTask.sendBuried(normalRequest); + } +} diff --git a/lib/BuriedLib/buried/SendTask.dart b/lib/BuriedLib/buried/SendTask.dart new file mode 100644 index 0000000000000000000000000000000000000000..e4f2b5936cb20907bc335b728a8f098e6fa65287 --- /dev/null +++ b/lib/BuriedLib/buried/SendTask.dart @@ -0,0 +1,179 @@ +/* + * @author lsy + * @date 2019-09-30 + **/ +import 'package:gmalpha_flutter/BuriedLib/buried/constant/Constant.dart'; +import 'package:gmalpha_flutter/BuriedLib/proto/burying.pbgrpc.dart'; +import 'package:gmalpha_flutter/commonModel/app_module.dart'; +import 'package:gmalpha_flutter/commonModel/base/Temp.dart'; +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; +import 'package:grpc/grpc.dart'; + +class SendTask { + ClientChannel _buriedChannel; + ReportingClient _client; + DeviceInfo _deviceInfo; + AppInfo _appInfo; + + SendTask() { + _buriedChannel = + ClientChannelManager.getChannel(BURIED_DEV_HOST, BURIED_DEV_PORT); + _client = ReportingClient(_buriedChannel); + } + + void _sendBuriedData(BuryingRequest request) { + _client.dataReport(Stream.fromFuture(Future.value(request))); +// .listen((data) { +// print("DATAWWWW $data"); +// }).onError((error) { +// print(error); +// }); + } + + void sendBuried(BuryingRequest request) { + if (CacheManager.getInstance().get(MEMORY_CACHE).get("version") == null) { + getBuriedInfo().then((value) { + Map temp = new Map<String, dynamic>.from(value); + print("lsy $temp"); + temp.forEach((k, v) { + CacheManager.getInstance().get(MEMORY_CACHE).save(k, v); + }); + _sendBuriedData( + assemRequset( + request + ) + ); + }).catchError((error) { + print(error); + }); + } else { + _sendBuriedData(assemRequset(request)); + } + } + + BuryingRequest assemRequset(BuryingRequest request) { + if (_deviceInfo == null) { + _deviceInfo = new DeviceInfo(); + _deviceInfo.deviceId = + CacheManager.getInstance().get(MEMORY_CACHE).get("device_id") ?? ""; + _deviceInfo.manufacturer = + CacheManager.getInstance().get(MEMORY_CACHE).get("manufacturer") ?? + ""; + _deviceInfo.lat = + CacheManager.getInstance().get(MEMORY_CACHE).get("lat") ?? ""; + _deviceInfo.lng = + CacheManager.getInstance().get(MEMORY_CACHE).get("lng") ?? ""; + _deviceInfo.isWiFi = + CacheManager.getInstance().get(MEMORY_CACHE).get("is_WiFi") ?? ""; + _deviceInfo.ip = + CacheManager.getInstance().get(MEMORY_CACHE).get("ip") ?? ""; + _deviceInfo.sysVersion = + CacheManager.getInstance().get(MEMORY_CACHE).get("sys_version") ?? ""; + _deviceInfo.androidDeviceId = CacheManager.getInstance() + .get(MEMORY_CACHE) + .get("android_device_id") ?? + ""; + } + if (_appInfo == null) { + _appInfo = new AppInfo(); + _appInfo.name = + CacheManager.getInstance().get(MEMORY_CACHE).get("app_name") ?? ""; + _appInfo.version = CacheManager.getInstance() + .get(MEMORY_CACHE) + .get("app_version_name") ?? + ""; + _appInfo.channel = + CacheManager.getInstance().get(MEMORY_CACHE).get("channel") ?? ""; + _appInfo.currentCityId = + CacheManager.getInstance().get(MEMORY_CACHE).get("current_city_id") ?? + ""; + var tempMap = + CacheManager.getInstance().get(MEMORY_CACHE).get("user_type"); + if (tempMap != null) { + (tempMap as Map).forEach((k, v) { + _appInfo.userType.putIfAbsent(k, v); + }); + } +// _appInfo.serialId = +// CacheManager.getInstance().get(MEMORY_CACHE).get("user_type") ?? ""; + _appInfo.greyType = + CacheManager.getInstance().get(MEMORY_CACHE).get("grey_type") ?? ""; + } + _deviceInfo.netType = + CacheManager.getInstance().get(MEMORY_CACHE).get("net_type") ?? ""; + request.userId = + CacheManager.getInstance().get(MEMORY_CACHE).get("user_id") ?? ""; + request.appSessionId = + CacheManager.getInstance().get(MEMORY_CACHE).get("app_session_id") ?? + ""; + request.createAt = "${DateTime.now().microsecondsSinceEpoch}"; + request.version = + CacheManager.getInstance().get(MEMORY_CACHE).get("version") ?? ""; + request.app = _appInfo; + request.device = _deviceInfo; + return request; + } +} + +class ClientChannelManager { + static Map<String, ClientChannelManagerObject> clientChannels = new Map(); + static int maxChannelNumber = 10; //è¿žæŽ¥ä¸Šé™æ•° + static String exitKey = ''; //优先级最低的key + + static ClientChannel getChannel(String host, int port) { + //连接å˜åœ¨ï¼Œå–缓å˜ï¼Œä¸å˜åœ¨åˆ™åˆ›å»º + if (clientChannels.containsKey(host + '$port')) { + //æ¯å–一次请求数é‡åŠ 1 + clientChannels[host + '$port'].number++; + new Future(() { + sort(); + }); + return clientChannels[host + '$port'].clientChannel; + } else { + return createChannel(host, port); + } + } + + static ClientChannel createChannel(String host, int port) { + //å¦‚æžœè¶…è¿‡è¿žæŽ¥ä¸Šé™æ•° + if (clientChannels.length >= maxChannelNumber) { + ClientChannelManagerObject object = clientChannels[exitKey]; + object.clientChannel.shutdown(); //å…³é—优先级最低的连接 + clientChannels.remove(exitKey); //æ¸…å‡ºè¿žæŽ¥æ± + } + print('创建连接,端å£:$port'); + ClientChannel channel = new ClientChannel(host, + port: port, + options: const ChannelOptions( + credentials: const ChannelCredentials.insecure())); + clientChannels[host + '$port'] = new ClientChannelManagerObject() + ..clientChannel = channel + ..number = 1 + ..createtime = new DateTime.now().millisecondsSinceEpoch; + new Future(() { + sort(); + }); + return channel; + } + + static void sort() { + //计算优先级 + int currentTime = new DateTime.now().millisecondsSinceEpoch; + double maxProportion = 0.0; + clientChannels.forEach((String key, ClientChannelManagerObject value) { + value.proportion = (currentTime - value.createtime) / + (value.number * 1.0); //时长除以次数,越å°ä¼˜å…ˆçº§è¶Šé«˜ + if (value.proportion > maxProportion) { + maxProportion = value.proportion; + exitKey = key; + } + }); + } +} + +class ClientChannelManagerObject { + ClientChannel clientChannel; + int number; //总共请求次数 + int createtime; //第一次创建时间 + double proportion; //时长除以次数,越å°ä¼˜å…ˆçº§è¶Šé«˜ +} diff --git a/lib/BuriedLib/buried/constant/Constant.dart b/lib/BuriedLib/buried/constant/Constant.dart new file mode 100644 index 0000000000000000000000000000000000000000..ed419fdb4a2cfad901037164b47a9e4c9c2a5853 --- /dev/null +++ b/lib/BuriedLib/buried/constant/Constant.dart @@ -0,0 +1,10 @@ +/* + * @author lsy + * @date 2019-09-30 + **/ + + +//dev 埋点host +const String BURIED_DEV_HOST="152.136.6.36"; +//dev 埋点port +const int BURIED_DEV_PORT=80; \ No newline at end of file diff --git a/lib/BuriedLib/proto/burying.pb.dart b/lib/BuriedLib/proto/burying.pb.dart index c805c5c06d00d1cdcf7b6dda80b5412ede50c0ca..f3ab3b27d2ef411b1cfbf8c174dbb0e92ed6aae3 100644 --- a/lib/BuriedLib/proto/burying.pb.dart +++ b/lib/BuriedLib/proto/burying.pb.dart @@ -9,85 +9,473 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -class HomeNote extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('HomeNote', - package: const $pb.PackageName('likebury'), createEmptyInstance: create) - ..aOS(1, 'event') - ..aOS(2, 'message') +class BuryingRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('BuryingRequest', + package: const $pb.PackageName('data'), createEmptyInstance: create) + ..m<$core.String, $core.String>(1, 'params', + entryClassName: 'BuryingRequest.ParamsEntry', + keyFieldType: $pb.PbFieldType.OS, + valueFieldType: $pb.PbFieldType.OS, + packageName: const $pb.PackageName('data')) + ..aOM<DeviceInfo>(2, 'device', subBuilder: DeviceInfo.create) + ..aOM<AppInfo>(3, 'app', subBuilder: AppInfo.create) + ..aOS(4, 'type') + ..aOS(5, 'userId') + ..aOS(6, 'createAt') + ..a<$core.double>(7, 'gmNginxTimestamp', $pb.PbFieldType.OF) + ..aOS(8, 'appSessionId') + ..aOS(9, 'version') + ..a<$core.int>(10, 'gmNginxKey', $pb.PbFieldType.O3) ..hasRequiredFields = false; - HomeNote._() : super(); - factory HomeNote() => create(); - factory HomeNote.fromBuffer($core.List<$core.int> i, + BuryingRequest._() : super(); + factory BuryingRequest() => create(); + factory BuryingRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory HomeNote.fromJson($core.String i, + factory BuryingRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - HomeNote clone() => HomeNote()..mergeFromMessage(this); - HomeNote copyWith(void Function(HomeNote) updates) => - super.copyWith((message) => updates(message as HomeNote)); + BuryingRequest clone() => BuryingRequest()..mergeFromMessage(this); + BuryingRequest copyWith(void Function(BuryingRequest) updates) => + super.copyWith((message) => updates(message as BuryingRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static HomeNote create() => HomeNote._(); - HomeNote createEmptyInstance() => create(); - static $pb.PbList<HomeNote> createRepeated() => $pb.PbList<HomeNote>(); + static BuryingRequest create() => BuryingRequest._(); + BuryingRequest createEmptyInstance() => create(); + static $pb.PbList<BuryingRequest> createRepeated() => + $pb.PbList<BuryingRequest>(); @$core.pragma('dart2js:noInline') - static HomeNote getDefault() => - _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<HomeNote>(create); - static HomeNote _defaultInstance; + static BuryingRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor<BuryingRequest>(create); + static BuryingRequest _defaultInstance; @$pb.TagNumber(1) - $core.String get event => $_getSZ(0); + $core.Map<$core.String, $core.String> get params => $_getMap(0); + + @$pb.TagNumber(2) + DeviceInfo get device => $_getN(1); + @$pb.TagNumber(2) + set device(DeviceInfo v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasDevice() => $_has(1); + @$pb.TagNumber(2) + void clearDevice() => clearField(2); + @$pb.TagNumber(2) + DeviceInfo ensureDevice() => $_ensure(1); + + @$pb.TagNumber(3) + AppInfo get app => $_getN(2); + @$pb.TagNumber(3) + set app(AppInfo v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasApp() => $_has(2); + @$pb.TagNumber(3) + void clearApp() => clearField(3); + @$pb.TagNumber(3) + AppInfo ensureApp() => $_ensure(2); + + @$pb.TagNumber(4) + $core.String get type => $_getSZ(3); + @$pb.TagNumber(4) + set type($core.String v) { + $_setString(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasType() => $_has(3); + @$pb.TagNumber(4) + void clearType() => clearField(4); + + @$pb.TagNumber(5) + $core.String get userId => $_getSZ(4); + @$pb.TagNumber(5) + set userId($core.String v) { + $_setString(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasUserId() => $_has(4); + @$pb.TagNumber(5) + void clearUserId() => clearField(5); + + @$pb.TagNumber(6) + $core.String get createAt => $_getSZ(5); + @$pb.TagNumber(6) + set createAt($core.String v) { + $_setString(5, v); + } + + @$pb.TagNumber(6) + $core.bool hasCreateAt() => $_has(5); + @$pb.TagNumber(6) + void clearCreateAt() => clearField(6); + + @$pb.TagNumber(7) + $core.double get gmNginxTimestamp => $_getN(6); + @$pb.TagNumber(7) + set gmNginxTimestamp($core.double v) { + $_setFloat(6, v); + } + + @$pb.TagNumber(7) + $core.bool hasGmNginxTimestamp() => $_has(6); + @$pb.TagNumber(7) + void clearGmNginxTimestamp() => clearField(7); + + @$pb.TagNumber(8) + $core.String get appSessionId => $_getSZ(7); + @$pb.TagNumber(8) + set appSessionId($core.String v) { + $_setString(7, v); + } + + @$pb.TagNumber(8) + $core.bool hasAppSessionId() => $_has(7); + @$pb.TagNumber(8) + void clearAppSessionId() => clearField(8); + + @$pb.TagNumber(9) + $core.String get version => $_getSZ(8); + @$pb.TagNumber(9) + set version($core.String v) { + $_setString(8, v); + } + + @$pb.TagNumber(9) + $core.bool hasVersion() => $_has(8); + @$pb.TagNumber(9) + void clearVersion() => clearField(9); + + @$pb.TagNumber(10) + $core.int get gmNginxKey => $_getIZ(9); + @$pb.TagNumber(10) + set gmNginxKey($core.int v) { + $_setSignedInt32(9, v); + } + + @$pb.TagNumber(10) + $core.bool hasGmNginxKey() => $_has(9); + @$pb.TagNumber(10) + void clearGmNginxKey() => clearField(10); +} + +class DeviceInfo extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeviceInfo', + package: const $pb.PackageName('data'), createEmptyInstance: create) + ..aOS(1, 'deviceId') + ..aOS(2, 'deviceType') + ..aOS(3, 'manufacturer') + ..aOS(4, 'lat') + ..aOS(5, 'lng') + ..aOS(6, 'isWiFi', protoName: 'is_WiFi') + ..aOS(7, 'ip') + ..aOS(8, 'netType') + ..aOS(9, 'model') + ..aOS(10, 'sysVersion') + ..aOS(11, 'androidDeviceId') + ..hasRequiredFields = false; + + DeviceInfo._() : super(); + factory DeviceInfo() => create(); + factory DeviceInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory DeviceInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + DeviceInfo clone() => DeviceInfo()..mergeFromMessage(this); + DeviceInfo copyWith(void Function(DeviceInfo) updates) => + super.copyWith((message) => updates(message as DeviceInfo)); + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static DeviceInfo create() => DeviceInfo._(); + DeviceInfo createEmptyInstance() => create(); + static $pb.PbList<DeviceInfo> createRepeated() => $pb.PbList<DeviceInfo>(); + @$core.pragma('dart2js:noInline') + static DeviceInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor<DeviceInfo>(create); + static DeviceInfo _defaultInstance; + + @$pb.TagNumber(1) + $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set event($core.String v) { + set deviceId($core.String v) { $_setString(0, v); } @$pb.TagNumber(1) - $core.bool hasEvent() => $_has(0); + $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) - void clearEvent() => clearField(1); + void clearDeviceId() => clearField(1); @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); + $core.String get deviceType => $_getSZ(1); @$pb.TagNumber(2) - set message($core.String v) { + set deviceType($core.String v) { $_setString(1, v); } @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); + $core.bool hasDeviceType() => $_has(1); @$pb.TagNumber(2) - void clearMessage() => clearField(2); + void clearDeviceType() => clearField(2); + + @$pb.TagNumber(3) + $core.String get manufacturer => $_getSZ(2); + @$pb.TagNumber(3) + set manufacturer($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasManufacturer() => $_has(2); + @$pb.TagNumber(3) + void clearManufacturer() => clearField(3); + + @$pb.TagNumber(4) + $core.String get lat => $_getSZ(3); + @$pb.TagNumber(4) + set lat($core.String v) { + $_setString(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasLat() => $_has(3); + @$pb.TagNumber(4) + void clearLat() => clearField(4); + + @$pb.TagNumber(5) + $core.String get lng => $_getSZ(4); + @$pb.TagNumber(5) + set lng($core.String v) { + $_setString(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasLng() => $_has(4); + @$pb.TagNumber(5) + void clearLng() => clearField(5); + + @$pb.TagNumber(6) + $core.String get isWiFi => $_getSZ(5); + @$pb.TagNumber(6) + set isWiFi($core.String v) { + $_setString(5, v); + } + + @$pb.TagNumber(6) + $core.bool hasIsWiFi() => $_has(5); + @$pb.TagNumber(6) + void clearIsWiFi() => clearField(6); + + @$pb.TagNumber(7) + $core.String get ip => $_getSZ(6); + @$pb.TagNumber(7) + set ip($core.String v) { + $_setString(6, v); + } + + @$pb.TagNumber(7) + $core.bool hasIp() => $_has(6); + @$pb.TagNumber(7) + void clearIp() => clearField(7); + + @$pb.TagNumber(8) + $core.String get netType => $_getSZ(7); + @$pb.TagNumber(8) + set netType($core.String v) { + $_setString(7, v); + } + + @$pb.TagNumber(8) + $core.bool hasNetType() => $_has(7); + @$pb.TagNumber(8) + void clearNetType() => clearField(8); + + @$pb.TagNumber(9) + $core.String get model => $_getSZ(8); + @$pb.TagNumber(9) + set model($core.String v) { + $_setString(8, v); + } + + @$pb.TagNumber(9) + $core.bool hasModel() => $_has(8); + @$pb.TagNumber(9) + void clearModel() => clearField(9); + + @$pb.TagNumber(10) + $core.String get sysVersion => $_getSZ(9); + @$pb.TagNumber(10) + set sysVersion($core.String v) { + $_setString(9, v); + } + + @$pb.TagNumber(10) + $core.bool hasSysVersion() => $_has(9); + @$pb.TagNumber(10) + void clearSysVersion() => clearField(10); + + @$pb.TagNumber(11) + $core.String get androidDeviceId => $_getSZ(10); + @$pb.TagNumber(11) + set androidDeviceId($core.String v) { + $_setString(10, v); + } + + @$pb.TagNumber(11) + $core.bool hasAndroidDeviceId() => $_has(10); + @$pb.TagNumber(11) + void clearAndroidDeviceId() => clearField(11); +} + +class AppInfo extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('AppInfo', + package: const $pb.PackageName('data'), createEmptyInstance: create) + ..aOS(1, 'name') + ..aOS(2, 'version') + ..aOS(3, 'channel') + ..aOS(4, 'currentCityId') + ..aOS(5, 'greyType') + ..a<$core.int>(6, 'serialId', $pb.PbFieldType.O3) + ..m<$core.String, $core.String>(7, 'userType', + entryClassName: 'AppInfo.UserTypeEntry', + keyFieldType: $pb.PbFieldType.OS, + valueFieldType: $pb.PbFieldType.OS, + packageName: const $pb.PackageName('data')) + ..hasRequiredFields = false; + + AppInfo._() : super(); + factory AppInfo() => create(); + factory AppInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory AppInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + AppInfo clone() => AppInfo()..mergeFromMessage(this); + AppInfo copyWith(void Function(AppInfo) updates) => + super.copyWith((message) => updates(message as AppInfo)); + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static AppInfo create() => AppInfo._(); + AppInfo createEmptyInstance() => create(); + static $pb.PbList<AppInfo> createRepeated() => $pb.PbList<AppInfo>(); + @$core.pragma('dart2js:noInline') + static AppInfo getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AppInfo>(create); + static AppInfo _defaultInstance; + + @$pb.TagNumber(1) + $core.String get name => $_getSZ(0); + @$pb.TagNumber(1) + set name($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasName() => $_has(0); + @$pb.TagNumber(1) + void clearName() => clearField(1); + + @$pb.TagNumber(2) + $core.String get version => $_getSZ(1); + @$pb.TagNumber(2) + set version($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasVersion() => $_has(1); + @$pb.TagNumber(2) + void clearVersion() => clearField(2); + + @$pb.TagNumber(3) + $core.String get channel => $_getSZ(2); + @$pb.TagNumber(3) + set channel($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasChannel() => $_has(2); + @$pb.TagNumber(3) + void clearChannel() => clearField(3); + + @$pb.TagNumber(4) + $core.String get currentCityId => $_getSZ(3); + @$pb.TagNumber(4) + set currentCityId($core.String v) { + $_setString(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasCurrentCityId() => $_has(3); + @$pb.TagNumber(4) + void clearCurrentCityId() => clearField(4); + + @$pb.TagNumber(5) + $core.String get greyType => $_getSZ(4); + @$pb.TagNumber(5) + set greyType($core.String v) { + $_setString(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasGreyType() => $_has(4); + @$pb.TagNumber(5) + void clearGreyType() => clearField(5); + + @$pb.TagNumber(6) + $core.int get serialId => $_getIZ(5); + @$pb.TagNumber(6) + set serialId($core.int v) { + $_setSignedInt32(5, v); + } + + @$pb.TagNumber(6) + $core.bool hasSerialId() => $_has(5); + @$pb.TagNumber(6) + void clearSerialId() => clearField(6); + + @$pb.TagNumber(7) + $core.Map<$core.String, $core.String> get userType => $_getMap(6); } -class ServiceNote extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceNote', - package: const $pb.PackageName('likebury'), createEmptyInstance: create) +class BuryingResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('BuryingResponse', + package: const $pb.PackageName('data'), createEmptyInstance: create) ..aOS(1, 'message') ..hasRequiredFields = false; - ServiceNote._() : super(); - factory ServiceNote() => create(); - factory ServiceNote.fromBuffer($core.List<$core.int> i, + BuryingResponse._() : super(); + factory BuryingResponse() => create(); + factory BuryingResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ServiceNote.fromJson($core.String i, + factory BuryingResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ServiceNote clone() => ServiceNote()..mergeFromMessage(this); - ServiceNote copyWith(void Function(ServiceNote) updates) => - super.copyWith((message) => updates(message as ServiceNote)); + BuryingResponse clone() => BuryingResponse()..mergeFromMessage(this); + BuryingResponse copyWith(void Function(BuryingResponse) updates) => + super.copyWith((message) => updates(message as BuryingResponse)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static ServiceNote create() => ServiceNote._(); - ServiceNote createEmptyInstance() => create(); - static $pb.PbList<ServiceNote> createRepeated() => $pb.PbList<ServiceNote>(); + static BuryingResponse create() => BuryingResponse._(); + BuryingResponse createEmptyInstance() => create(); + static $pb.PbList<BuryingResponse> createRepeated() => + $pb.PbList<BuryingResponse>(); @$core.pragma('dart2js:noInline') - static ServiceNote getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor<ServiceNote>(create); - static ServiceNote _defaultInstance; + static BuryingResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor<BuryingResponse>(create); + static BuryingResponse _defaultInstance; @$pb.TagNumber(1) $core.String get message => $_getSZ(0); diff --git a/lib/BuriedLib/proto/burying.pbgrpc.dart b/lib/BuriedLib/proto/burying.pbgrpc.dart index 2cf6fb3bcb02ba596df879779a88ba606629fcf3..d631363e242237aa5507074ee737507d347522ae 100644 --- a/lib/BuriedLib/proto/burying.pbgrpc.dart +++ b/lib/BuriedLib/proto/burying.pbgrpc.dart @@ -13,36 +13,38 @@ import 'package:grpc/service_api.dart' as $grpc; import 'burying.pb.dart' as $0; export 'burying.pb.dart'; -class BuryingClient extends $grpc.Client { - static final _$homeBury = $grpc.ClientMethod<$0.HomeNote, $0.ServiceNote>( - '/likebury.Burying/HomeBury', - ($0.HomeNote value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $0.ServiceNote.fromBuffer(value)); - - BuryingClient($grpc.ClientChannel channel, {$grpc.CallOptions options}) +class ReportingClient extends $grpc.Client { + static final _$dataReport = + $grpc.ClientMethod<$0.BuryingRequest, $0.BuryingResponse>( + '/data.Reporting/dataReport', + ($0.BuryingRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => + $0.BuryingResponse.fromBuffer(value)); + + ReportingClient($grpc.ClientChannel channel, {$grpc.CallOptions options}) : super(channel, options: options); - $grpc.ResponseStream<$0.ServiceNote> homeBury( - $async.Stream<$0.HomeNote> request, + $grpc.ResponseStream<$0.BuryingResponse> dataReport( + $async.Stream<$0.BuryingRequest> request, {$grpc.CallOptions options}) { - final call = $createCall(_$homeBury, request, options: options); + final call = $createCall(_$dataReport, request, options: options); return $grpc.ResponseStream(call); } } -abstract class BuryingServiceBase extends $grpc.Service { - $core.String get $name => 'likebury.Burying'; +abstract class ReportingServiceBase extends $grpc.Service { + $core.String get $name => 'data.Reporting'; - BuryingServiceBase() { - $addMethod($grpc.ServiceMethod<$0.HomeNote, $0.ServiceNote>( - 'HomeBury', - homeBury, + ReportingServiceBase() { + $addMethod($grpc.ServiceMethod<$0.BuryingRequest, $0.BuryingResponse>( + 'dataReport', + dataReport, true, true, - ($core.List<$core.int> value) => $0.HomeNote.fromBuffer(value), - ($0.ServiceNote value) => value.writeToBuffer())); + ($core.List<$core.int> value) => $0.BuryingRequest.fromBuffer(value), + ($0.BuryingResponse value) => value.writeToBuffer())); } - $async.Stream<$0.ServiceNote> homeBury( - $grpc.ServiceCall call, $async.Stream<$0.HomeNote> request); + $async.Stream<$0.BuryingResponse> dataReport( + $grpc.ServiceCall call, $async.Stream<$0.BuryingRequest> request); } diff --git a/lib/BuriedLib/proto/burying.pbjson.dart b/lib/BuriedLib/proto/burying.pbjson.dart new file mode 100644 index 0000000000000000000000000000000000000000..ae4f3525446c5a001dedc3717846b412a64e9f43 --- /dev/null +++ b/lib/BuriedLib/proto/burying.pbjson.dart @@ -0,0 +1,125 @@ +/// +// Generated code. Do not modify. +// source: burying.proto +// +// @dart = 2.3 +// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type + +const BuryingRequest$json = const { + '1': 'BuryingRequest', + '2': const [ + const { + '1': 'params', + '3': 1, + '4': 3, + '5': 11, + '6': '.data.BuryingRequest.ParamsEntry', + '10': 'params' + }, + const { + '1': 'device', + '3': 2, + '4': 1, + '5': 11, + '6': '.data.DeviceInfo', + '10': 'device' + }, + const { + '1': 'app', + '3': 3, + '4': 1, + '5': 11, + '6': '.data.AppInfo', + '10': 'app' + }, + const {'1': 'type', '3': 4, '4': 1, '5': 9, '10': 'type'}, + const {'1': 'user_id', '3': 5, '4': 1, '5': 9, '10': 'userId'}, + const {'1': 'create_at', '3': 6, '4': 1, '5': 9, '10': 'createAt'}, + const { + '1': 'gm_nginx_timestamp', + '3': 7, + '4': 1, + '5': 2, + '10': 'gmNginxTimestamp' + }, + const {'1': 'app_session_id', '3': 8, '4': 1, '5': 9, '10': 'appSessionId'}, + const {'1': 'version', '3': 9, '4': 1, '5': 9, '10': 'version'}, + const {'1': 'gm_nginx_key', '3': 10, '4': 1, '5': 5, '10': 'gmNginxKey'}, + ], + '3': const [BuryingRequest_ParamsEntry$json], +}; + +const BuryingRequest_ParamsEntry$json = const { + '1': 'ParamsEntry', + '2': const [ + const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'}, + const {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'}, + ], + '7': const {'7': true}, +}; + +const DeviceInfo$json = const { + '1': 'DeviceInfo', + '2': const [ + const {'1': 'device_id', '3': 1, '4': 1, '5': 9, '10': 'deviceId'}, + const {'1': 'device_type', '3': 2, '4': 1, '5': 9, '10': 'deviceType'}, + const {'1': 'manufacturer', '3': 3, '4': 1, '5': 9, '10': 'manufacturer'}, + const {'1': 'lat', '3': 4, '4': 1, '5': 9, '10': 'lat'}, + const {'1': 'lng', '3': 5, '4': 1, '5': 9, '10': 'lng'}, + const {'1': 'is_WiFi', '3': 6, '4': 1, '5': 9, '10': 'isWiFi'}, + const {'1': 'ip', '3': 7, '4': 1, '5': 9, '10': 'ip'}, + const {'1': 'net_type', '3': 8, '4': 1, '5': 9, '10': 'netType'}, + const {'1': 'model', '3': 9, '4': 1, '5': 9, '10': 'model'}, + const {'1': 'sys_version', '3': 10, '4': 1, '5': 9, '10': 'sysVersion'}, + const { + '1': 'android_device_id', + '3': 11, + '4': 1, + '5': 9, + '10': 'androidDeviceId' + }, + ], +}; + +const AppInfo$json = const { + '1': 'AppInfo', + '2': const [ + const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'}, + const {'1': 'version', '3': 2, '4': 1, '5': 9, '10': 'version'}, + const {'1': 'channel', '3': 3, '4': 1, '5': 9, '10': 'channel'}, + const { + '1': 'current_city_id', + '3': 4, + '4': 1, + '5': 9, + '10': 'currentCityId' + }, + const {'1': 'grey_type', '3': 5, '4': 1, '5': 9, '10': 'greyType'}, + const {'1': 'serial_id', '3': 6, '4': 1, '5': 5, '10': 'serialId'}, + const { + '1': 'user_type', + '3': 7, + '4': 3, + '5': 11, + '6': '.data.AppInfo.UserTypeEntry', + '10': 'userType' + }, + ], + '3': const [AppInfo_UserTypeEntry$json], +}; + +const AppInfo_UserTypeEntry$json = const { + '1': 'UserTypeEntry', + '2': const [ + const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'}, + const {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'}, + ], + '7': const {'7': true}, +}; + +const BuryingResponse$json = const { + '1': 'BuryingResponse', + '2': const [ + const {'1': 'message', '3': 1, '4': 1, '5': 9, '10': 'message'}, + ], +}; diff --git a/lib/EmptyPage.dart b/lib/EmptyPage.dart new file mode 100644 index 0000000000000000000000000000000000000000..96577f100dcca5fdf7d2df7eb6989a0269b59694 --- /dev/null +++ b/lib/EmptyPage.dart @@ -0,0 +1,17 @@ +/* + * @author lsy + * @date 2019-09-30 + **/ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class EmptyPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + body: Container(), + ), + ); + } +} diff --git a/lib/Error_Page.dart b/lib/Error_Page.dart index ef18d6b11d52dab4bdc4db6036b7b12f7ad80583..77503e286eae3ea65b709b48ebe3845bf892c3e7 100644 --- a/lib/Error_Page.dart +++ b/lib/Error_Page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:gmalpha_flutter/Annotations/RouterCenterRestore.mark.dart'; class ErrorPage extends StatelessWidget { final String reason; diff --git a/lib/PrestigeModel/PrestigeRouter.dart b/lib/PrestigeModel/PrestigeRouter.dart index c72ed18520a8b8493fc51d6315e104074eef796b..d7b3f64347379f32c34badaf9052ba2b299ac9a6 100644 --- a/lib/PrestigeModel/PrestigeRouter.dart +++ b/lib/PrestigeModel/PrestigeRouter.dart @@ -7,7 +7,7 @@ import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; import 'package:gmalpha_flutter/PrestigeModel/PrestigeImpl.dart'; -@Router("prestigeModel", PrestigeImpl) +@Router("prestigeModel", PrestigeImpl,true) abstract class PrestigeRouter implements RouterBaser { Widget getReputationsPage(int userId,String userName,String fromPage); } diff --git a/lib/PrestigeModel/page/reputation/ReputationsModel.dart b/lib/PrestigeModel/page/reputation/ReputationsModel.dart index 116ed2ab3a965cb9aa4bea71d14719bb61508a8a..3281d89a800e9671b6e2550820abdadfd924c068 100644 --- a/lib/PrestigeModel/page/reputation/ReputationsModel.dart +++ b/lib/PrestigeModel/page/reputation/ReputationsModel.dart @@ -21,24 +21,6 @@ class ReputationsModel extends BaseModel { ReputationsModel(this.userId, this.userName, this.fromPage); - start() { - pageStart("my_expert_reputation", fromPage) - .listen((value) { - print("埋点 pageStart æˆåŠŸï¼Ÿ:$value"); - }).onError((error) { - print(error); - }); - } - - end() { - pageEnd("my_expert_reputation", fromPage) - .listen((value) { - print("埋点 pageEnd æˆåŠŸï¼Ÿ:$value"); - }).onError((error) { - print(error); - }); - } - init(BuildContext context) { titleLive.notifyView(userName); PrestigeRepository.getInstance().getReputations(userId).listen((value) { diff --git a/lib/PrestigeModel/page/reputation/ReputationsPage.dart b/lib/PrestigeModel/page/reputation/ReputationsPage.dart index 7fcb3b90884f6e385c831ad76d65fd0609416a40..857340d07dbe961beb4863688b489c8706dacd01 100644 --- a/lib/PrestigeModel/page/reputation/ReputationsPage.dart +++ b/lib/PrestigeModel/page/reputation/ReputationsPage.dart @@ -5,9 +5,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_boost/flutter_boost.dart'; +import 'package:gmalpha_flutter/Annotations/RouterCenterRestore.mark.dart'; import 'package:gmalpha_flutter/PrestigeModel/page/reputation/ReputationsModel.dart'; import 'package:gmalpha_flutter/PrestigeModel/service/remote/entity/PrestigeEntity.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:gmalpha_flutter/commonModel/base/BasePage.dart'; class ReputationsPage extends StatefulWidget { ReputationsModel _model; @@ -20,7 +22,7 @@ class ReputationsPage extends StatefulWidget { State<StatefulWidget> createState() => ReputationsState(_model); } -class ReputationsState extends State<ReputationsPage> { +class ReputationsState extends BasePage<ReputationsPage> { ReputationsModel _model; double screenWidth; @@ -29,7 +31,6 @@ class ReputationsState extends State<ReputationsPage> { @override void initState() { super.initState(); - _model.start(); _model.init(context); } @@ -224,7 +225,16 @@ class ReputationsState extends State<ReputationsPage> { @override void dispose() { super.dispose(); - _model.end(); _model.dispose(); } + + @override + String pageName() { + return "my_expert_reputation"; + } + + @override + String referrer() { + return _model.fromPage; + } } diff --git a/lib/commonModel/app_module.dart b/lib/commonModel/app_module.dart index b530863166145537c3e510a2fc8b8c2b8e75bd3e..ccf0cc8db613fd4c9d738ef0589f7163ae2f8b4d 100644 --- a/lib/commonModel/app_module.dart +++ b/lib/commonModel/app_module.dart @@ -1,8 +1,11 @@ +import 'package:gmalpha_flutter/commonModel/base/Temp.dart'; import 'package:gmalpha_flutter/commonModel/mmkv/MmkvUtil.dart'; MmKvUtil mmKvUtil; + applicationInit() async { mmKvUtil = await MmKvUtil.getInstance(); } + diff --git a/lib/commonModel/base/BasePage.dart b/lib/commonModel/base/BasePage.dart new file mode 100644 index 0000000000000000000000000000000000000000..760a6e0e9764d1eb56a37b1fc4b7a021e395e30a --- /dev/null +++ b/lib/commonModel/base/BasePage.dart @@ -0,0 +1,43 @@ +/* + * @author lsy + * @date 2019-10-08 + **/ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:gmalpha_flutter/Annotations/RouterCenterRestore.mark.dart'; +import 'package:gmalpha_flutter/commonModel/base/Temp.dart'; +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; + +abstract class BasePage<T extends StatefulWidget> extends State<T> { + var startTime; + + String pageName(); + + String referrer(); + + @override + void initState() { + super.initState(); + startTime = DateTime.now().millisecondsSinceEpoch; + if (CacheManager.getInstance().get(MEMORY_CACHE).get("version") == null) { + getBuriedInfo().then((value) { + Map temp=new Map<String, dynamic>.from(value); + print("lsy $temp"); + temp.forEach((k, v) { + CacheManager.getInstance().get(MEMORY_CACHE).save(k, v); + }); + }).catchError((error) { + print(error); + }); + } + } + + @override + void dispose() { + super.dispose(); + print("lsy SENDDDD "); + RouterCenterImpl().findBuriedRouter()?.onPageEnd( + pageName(), "$startTime", "${DateTime.now().millisecondsSinceEpoch}", + referrer: referrer()); + } +} diff --git a/lib/commonModel/base/NativeChannel.dart b/lib/commonModel/base/NativeChannel.dart new file mode 100644 index 0000000000000000000000000000000000000000..f2ff18d7c376980df3073a5adea6b2056f19b321 --- /dev/null +++ b/lib/commonModel/base/NativeChannel.dart @@ -0,0 +1,16 @@ +/* + * @author lsy + * @date 2019-09-30 + **/ + +import 'package:flutter/services.dart'; + +const platform = const MethodChannel('gengmei_flutter_native_channel'); + +class NativeChannel { + static void getNativeArguements() { + platform.invokeMethod("get_native_data").then((value) { + print("VALUE=-="); + }); + } +} diff --git a/lib/commonModel/base/Temp.dart b/lib/commonModel/base/Temp.dart index 63cd257b793f382fc6d507c8f72d4bde5ff7e016..bb36d2637a01b0f8ddcb154043fa9e4d8afd6136 100644 --- a/lib/commonModel/base/Temp.dart +++ b/lib/commonModel/base/Temp.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart'; import 'package:rxdart/rxdart.dart'; +const BURIED_METHOD = "FLUTTER_BURIED"; const platform = const MethodChannel('flutter_bury_channel'); var startTime; @@ -61,6 +62,10 @@ Observable<bool> jumpToSearch( })); } +Future getBuriedInfo() async { + return await platform.invokeMethod(BURIED_METHOD, null); +} + String getNowTimeSecond() { return "${DateTime.now().millisecondsSinceEpoch}"; // String year = "${DateTime.now().year}".length == 4 diff --git a/lib/commonModel/cache/CacheManager.dart b/lib/commonModel/cache/CacheManager.dart new file mode 100644 index 0000000000000000000000000000000000000000..774e7b7abfc0ed6dbfaf1a0ce819f86b355eed96 --- /dev/null +++ b/lib/commonModel/cache/CacheManager.dart @@ -0,0 +1,34 @@ +/* + * @author lsy + * @date 2019-10-08 + **/ +import 'package:gmalpha_flutter/commonModel/cache/MemoryCache.dart'; + +const MEMORY_CACHE = "MEMORY_CACHE"; +const SHARE_CACHE = "SHARE_CACHE"; + +class CacheManager { + MemoryCache memoryCache; + + static CacheManager _instance = CacheManager._(); + + CacheManager._() { + memoryCache = new MemoryCache(); + } + + static CacheManager getInstance() { + return _instance; + } + + ICache get(String whichCache) { + if (whichCache == MEMORY_CACHE) { + return memoryCache; + } + } +} + +class ICache { + dynamic get(String key) {} + + void save(String key, dynamic value) {} +} diff --git a/lib/commonModel/cache/MemoryCache.dart b/lib/commonModel/cache/MemoryCache.dart new file mode 100644 index 0000000000000000000000000000000000000000..6405ecce9e27674f795b559fd1df4b2e77ea53ce --- /dev/null +++ b/lib/commonModel/cache/MemoryCache.dart @@ -0,0 +1,19 @@ +/* + * @author lsy + * @date 2019-10-08 + **/ +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; + +class MemoryCache implements ICache { + Map<String, dynamic> _cacheMap = new Map(); + + @override + get(String key) { + return _cacheMap[key]; + } + + @override + void save(String key, value) { + _cacheMap.putIfAbsent(key, () => value); + } +} diff --git a/lib/commonModel/cache/ShareCache.dart b/lib/commonModel/cache/ShareCache.dart new file mode 100644 index 0000000000000000000000000000000000000000..d1a0fd6fd8278205f34baa889dc0f6f65576e9bc --- /dev/null +++ b/lib/commonModel/cache/ShareCache.dart @@ -0,0 +1,23 @@ +/* + * @author lsy + * @date 2019-10-08 + **/ +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; + +class ShareCache implements ICache{ + + + + @override + get(String key) { + + return null; + } + + @override + void save(String key, value) { + } + + + +} \ No newline at end of file diff --git a/lib/testPage/animationTest.dart b/lib/commonModel/testPage/animationTest.dart similarity index 100% rename from lib/testPage/animationTest.dart rename to lib/commonModel/testPage/animationTest.dart diff --git a/lib/testPage/applicationTest.dart b/lib/commonModel/testPage/applicationTest.dart similarity index 100% rename from lib/testPage/applicationTest.dart rename to lib/commonModel/testPage/applicationTest.dart diff --git a/lib/testPage/assetsChannel.dart b/lib/commonModel/testPage/assetsChannel.dart similarity index 100% rename from lib/testPage/assetsChannel.dart rename to lib/commonModel/testPage/assetsChannel.dart diff --git a/lib/testPage/battery.dart b/lib/commonModel/testPage/battery.dart similarity index 100% rename from lib/testPage/battery.dart rename to lib/commonModel/testPage/battery.dart diff --git a/lib/testPage/layoutTest.dart b/lib/commonModel/testPage/layoutTest.dart similarity index 100% rename from lib/testPage/layoutTest.dart rename to lib/commonModel/testPage/layoutTest.dart diff --git a/lib/testPage/netWorkTest.dart b/lib/commonModel/testPage/netWorkTest.dart similarity index 96% rename from lib/testPage/netWorkTest.dart rename to lib/commonModel/testPage/netWorkTest.dart index 4f6ceb469b91278287addf4104c5ef2735514d39..b06160308344f920397940f2e098457f8cfcf326 100644 --- a/lib/testPage/netWorkTest.dart +++ b/lib/commonModel/testPage/netWorkTest.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../commonModel/net/ALNetWork.dart'; +import 'package:gmalpha_flutter/commonModel/net/ALNetWork.dart'; void main() => runApp(MaterialApp( home: NetWorkTestPage(), diff --git a/lib/main.dart b/lib/main.dart index fecca2e235f07ee7671f033b9b35affb859ec401..4a74f4e8d3d9eeb2a3adbaab01bc965baa617777 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,18 +4,18 @@ import 'package:flutter/material.dart'; import 'package:flutter_boost/flutter_boost.dart'; import 'package:gmalpha_flutter/Annotations/RouterCenterRestore.mark.dart'; import 'package:gmalpha_flutter/Error_Page.dart'; +import 'package:gmalpha_flutter/commonModel/app_module.dart'; import 'package:gmalpha_flutter/commonModel/base/Temp.dart'; +import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; import 'package:gmalpha_flutter/commonModel/net/Api.dart'; import 'package:gmalpha_flutter/messageModel/home/message_home.dart'; import 'comment_suggest.dart'; void main() async { -// await applicationInit(); -// String temp="${DateTime.now().year}${DateTime.now().month}${DateTime.now().day}${DateTime.now().hour}" -// "${DateTime.now().minute}${DateTime.now().second}"; -// print("RESIGN!!!"+getNowTimeSecond()); + //create_at is_release runApp(MyApp()); + } class MyApp extends StatefulWidget { @@ -46,6 +46,7 @@ class _MyAppState extends State<MyApp> { : params["selectedPath"] as List<String>); }, "prestige": (pageName, params, _) { + print("ERROR , PRESTIGE"); String fromPage = params["fromPage"]; if (params == null || fromPage == null || @@ -87,22 +88,22 @@ class _MyAppState extends State<MyApp> { // initialRoute: '/test', //// 调试的时候å¯ä»¥æ‰“å¼€ - routes: { - // '/': (context) => CommentSuggest({"Cookie":" _gm_token=7e48641558699683; sessionid=nb3ze4ur7ucosln8sd8pzwojddenv9ym; _gtid=a1bc0a387e1911e996b9525400fa516d4094"}), - '/': (context) { -// Api.getInstance().initBuildConfig({ -// 'Cookie': -// '_gm_token=72ee1c1569466411; _gtid=58d3cc14df8711e99736525400e82fab81; sessionid=vhksn66854pejzjwi8ljhrmcew3domh2', -// "buildConfig": "debug" -// }); +// routes: { +// // '/': (context) => CommentSuggest({"Cookie":" _gm_token=7e48641558699683; sessionid=nb3ze4ur7ucosln8sd8pzwojddenv9ym; _gtid=a1bc0a387e1911e996b9525400fa516d4094"}), +// '/': (context) { +//// Api.getInstance().initBuildConfig({ +//// 'Cookie': +//// '_gm_token=72ee1c1569466411; _gtid=58d3cc14df8711e99736525400e82fab81; sessionid=vhksn66854pejzjwi8ljhrmcew3domh2', +//// "buildConfig": "debug" +//// }); +//// return RouterCenterImpl() +//// .findActivityReportRouter() +//// ?.getActivityReportPage(279, 1, ''); // return RouterCenterImpl() -// .findActivityReportRouter() -// ?.getActivityReportPage(279, 1, ''); - return RouterCenterImpl() - .findAlbumRouter() - .getAlbumPage("com.example.gengmei_flutter_plugin_example",true, 2, null); - }, - }, +// .findAlbumRouter() +// .getAlbumPage("com.example.gengmei_flutter_plugin_example",true, 2, null); +// }, +// }, //调试的时候å¯ä»¥æ‰“å¼€ builder: FlutterBoost.init(postPush: _onRoutePushed), diff --git a/lib/messageModel/MessageRouter.dart b/lib/messageModel/MessageRouter.dart index 72acce3efa06a43debdeba3140bd30ffe6efab77..c5e18562c69778d95e55c476c90dc7d683bac24f 100644 --- a/lib/messageModel/MessageRouter.dart +++ b/lib/messageModel/MessageRouter.dart @@ -8,7 +8,7 @@ import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; import 'package:gmalpha_flutter/messageModel/MessageRouterImpl.dart'; -@Router("messageModel",MessageRouterImpl) +@Router("messageModel",MessageRouterImpl,true) abstract class MessageRouter implements RouterBaser{ void openMessagePage(Map map,BuildContext context); diff --git a/lib/userModel/UserRouter.dart b/lib/userModel/UserRouter.dart index d8c3d02c2c76a04f758e73068cbd904243ae02fe..a6b54c28a9a0b7bfc431d648b2c0c0b071b1c50d 100644 --- a/lib/userModel/UserRouter.dart +++ b/lib/userModel/UserRouter.dart @@ -8,7 +8,7 @@ import 'package:gmalpha_flutter/Annotations/RouterBaser.dart'; import 'package:gmalpha_flutter/Annotations/anno/Router.dart'; import 'package:gmalpha_flutter/userModel/UserRouterImpl.dart'; -@Router("userModel",UserRouterImpl) +@Router("userModel",UserRouterImpl,true) abstract class UserRouter implements RouterBaser{ Widget getUserPage(); diff --git a/protos/burying.proto b/protos/burying.proto index 1af3b3ea9dc263fdb8ed2355e68922d19a555ac8..66c230722e390526020e259999b442c27ac9df04 100644 --- a/protos/burying.proto +++ b/protos/burying.proto @@ -1,51 +1,48 @@ syntax = "proto3"; +package data; -package likebury; +service Reporting { + rpc dataReport (stream BuryingRequest) returns (stream BuryingResponse) { + } +} -// 定义一个å«åšBuryingçš„grpcæœåŠ¡ -service Burying { - // 定一个Homebury的方法, - // 傿•°æ˜¯HomeNote eg: {event: "click", message: "user click the homepage"} - // 返回值是ServiceNote eg: {message: "success"} - rpc HomeBury (stream HomeNote) returns (stream ServiceNote) {} +message BuryingRequest { + map<string, string> params = 1; + DeviceInfo device = 2; + AppInfo app = 3; + string type = 4; + string user_id = 5; + string create_at = 6; + float gm_nginx_timestamp = 7; + string app_session_id = 8; + string version = 9; + int32 gm_nginx_key = 10; } -message HomeNote { - string event = 1; - string message = 2; +message DeviceInfo { + string device_id = 1; + string device_type = 2; + string manufacturer = 3; + string lat = 4; + string lng = 5; + string is_WiFi = 6; + string ip = 7; + string net_type = 8; + string model = 9; + string sys_version = 10; + string android_device_id = 11; } -message ServiceNote { - string message = 1; +message AppInfo { + string name = 1; + string version = 2; + string channel = 3; + string current_city_id = 4; + string grey_type = 5; + int32 serial_id = 6; + map<string, string> user_type = 7; } -//package cos; -// -//service CosService { -// // Cos æœåŠ¡ -// -// // 获å–临时å‡è¯æœåŠ¡ -// rpc GetCredential (GetCredentialRequest) returns (GetCredentialResponse) { -// } -//} -// -// -//message GetCredentialRequest { -// // 获å–临时å‡è¯è¯·æ±‚ -//} -// -//message GetCredentialResponse { -// // 获å–临时å‡è¯å“应 -// -// message Credential { -// string session_token = 1; -// string tmp_secret_id = 2; -// string tmp_secret_key = 3; -// } -// -// Credential credential = 1; -// int64 expired_time = 2; -// string request_id = 3; -// -//} -// +message BuryingResponse { + string message = 1; +} diff --git a/pubspec.lock b/pubspec.lock index 4ee83ee1f7d95d2a1d0d5fa7e9088e5ab9a12191..5e53b1a204922ae25f5442dea2321809813d4b62 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -211,8 +211,8 @@ packages: dependency: "direct main" description: path: "." - ref: "4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae" - resolved-ref: "4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae" + ref: "11f928f7165e76994978f521a25e89d8d25824b7" + resolved-ref: "11f928f7165e76994978f521a25e89d8d25824b7" url: "git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git" source: git version: "0.0.735" diff --git a/pubspec.yaml b/pubspec.yaml index 1a8a4f19036f7d0a4ad8126d258072f566d77ecd..8c48c28d1831faac083bc679435b5f225ad2c48c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: gengmei_flutter_plugin: git: url: 'git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git' - ref: "4e7c15a7f1e1b7c17655e87ab3ad3434bbe5cdae" + ref: "11f928f7165e76994978f521a25e89d8d25824b7" protobuf: ^0.14.4 grpc: ^2.1.2