diff --git a/lib/i10n/localization_intl.dart b/lib/i10n/localization_intl.dart index 9aa1b86..bb27231 100644 --- a/lib/i10n/localization_intl.dart +++ b/lib/i10n/localization_intl.dart @@ -309,14 +309,14 @@ class DemoLocalizations { String get version100 => Intl.message('Version:1.0.0 \n\n' - 'The Version 1.0.0 released!\n\n', name: 'version100', desc: '版本:1.0.0 \n\n' + 'The Version 1.0.0 released!\n', name: 'version100', desc: '版本:1.0.0 \n\n' '版本 1.0.0 发布啦!',); String get version101 => Intl.message('Version:1.0.1 \n\n' - '1.Fixed: done list show error \n\n' - '2.Add: Edit page can add start-date and deadline\n\n', name: 'version101', desc: '版本:1.0.1 \n\n' - '1.修复完成列表界面的显示bug\n\n' - '2.新增编辑任务可以添加起止时间,用作提醒\n\n',); + '1.Fixed: done list show error \n' + '2.Add: Edit page can add start-date and deadline\n', name: 'version101', desc: '版本:1.0.1 \n\n' + '1.修复完成列表界面的显示bug\n' + '2.新增编辑任务可以添加起止时间,用作提醒\n',); diff --git a/lib/i10n/messages_en_US.dart b/lib/i10n/messages_en_US.dart index 2f6bc7e..ca030e9 100644 --- a/lib/i10n/messages_en_US.dart +++ b/lib/i10n/messages_en_US.dart @@ -127,8 +127,8 @@ class MessageLookup extends MessageLookupByLibrary { "unknownDes" : MessageLookupByLibrary.simpleMessage("Unknown permission"), "update" : MessageLookupByLibrary.simpleMessage("update"), "userNameCantBeNull" : MessageLookupByLibrary.simpleMessage("username can not be empty"), - "version100" : MessageLookupByLibrary.simpleMessage("Version:1.0.0 \n\nThe Version 1.0.0 released!\n\n"), - "version101" : MessageLookupByLibrary.simpleMessage("Version:1.0.1 \n\n1.Fixed: done list show error \n\n2.Add: Edit page can add start-date and deadline\n\n"), + "version100" : MessageLookupByLibrary.simpleMessage("Version:1.0.0 \n\nThe Version 1.0.0 released!\n"), + "version101" : MessageLookupByLibrary.simpleMessage("Version:1.0.1 \n\n1.Fixed: done list show error \n2.Add: Edit page can add start-date and deadline\n"), "versionDescription" : MessageLookupByLibrary.simpleMessage("Version Description"), "waitAMoment" : MessageLookupByLibrary.simpleMessage("please wait for a moment..."), "weatherGetWrong" : MessageLookupByLibrary.simpleMessage("failed to get the weather,please try again"), diff --git a/lib/i10n/messages_zh_CN.dart b/lib/i10n/messages_zh_CN.dart index a3b0743..1fc0fa5 100644 --- a/lib/i10n/messages_zh_CN.dart +++ b/lib/i10n/messages_zh_CN.dart @@ -128,7 +128,7 @@ class MessageLookup extends MessageLookupByLibrary { "update" : MessageLookupByLibrary.simpleMessage("升级"), "userNameCantBeNull" : MessageLookupByLibrary.simpleMessage("昵称不能为空哦!"), "version100" : MessageLookupByLibrary.simpleMessage("版本:1.0.0 \n\n版本 1.0.0 发布啦!"), - "version101" : MessageLookupByLibrary.simpleMessage("版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n\n2.新增编辑任务可以添加起止时间,用作提醒\n\n"), + "version101" : MessageLookupByLibrary.simpleMessage("版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n2.新增编辑任务可以添加起止时间,用作提醒\n"), "versionDescription" : MessageLookupByLibrary.simpleMessage("版本描述"), "waitAMoment" : MessageLookupByLibrary.simpleMessage("请稍后..."), "weatherGetWrong" : MessageLookupByLibrary.simpleMessage("天气获取失败,请重新尝试"), diff --git a/lib/model/global_model.dart b/lib/model/global_model.dart index 4e43483..49f6d74 100644 --- a/lib/model/global_model.dart +++ b/lib/model/global_model.dart @@ -42,7 +42,7 @@ class GlobalModel extends ChangeNotifier { //当前天气的json WeatherBean weatherBean; - //用于控制天气获取的loading加载框 + //设置页面,用于控制天气获取的loading加载框 LoadingController loadingController = LoadingController(); //当前语言 @@ -86,11 +86,6 @@ class GlobalModel extends ChangeNotifier { void setMainPageModel(MainPageModel mainPageModel) { if (this.mainPageModel == null) { this.mainPageModel = mainPageModel; - - //延时1秒后再去获取天气 - Future.delayed(Duration(seconds: 1), (){ - if (enableWeatherShow) logic.getWeatherNow(currentPosition); - }); } } diff --git a/lib/model/main_page_model.dart b/lib/model/main_page_model.dart index aba3cfd..bc08be1 100644 --- a/lib/model/main_page_model.dart +++ b/lib/model/main_page_model.dart @@ -29,7 +29,7 @@ class MainPageModel extends ChangeNotifier { //是否开启天气 bool enableWeatherShow = false; - //当前位置信息(经纬度) + //当前位置信息 String currentPosition = ""; MainPageModel() { diff --git a/lib/pages/nav_page.dart b/lib/pages/nav_page.dart index b09f855..58d0e1f 100644 --- a/lib/pages/nav_page.dart +++ b/lib/pages/nav_page.dart @@ -9,8 +9,10 @@ import 'package:todo_list/json/weather_bean.dart'; import 'package:todo_list/model/global_model.dart'; import 'package:todo_list/pages/language_page.dart'; import 'package:todo_list/pages/setting_page.dart'; +import 'package:todo_list/widgets/loading_widget.dart'; import 'package:todo_list/widgets/nav_head.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:todo_list/widgets/weather_widget.dart'; import 'image_page.dart'; import 'navigator_setting_page.dart'; @@ -25,7 +27,7 @@ class NavPage extends StatelessWidget { children: [ getNavHeader(globalModel, context), globalModel.enableWeatherShow - ? getWeatherNow(globalModel, context) + ? WeatherWidget(globalModel: globalModel,) : SizedBox(), ListTile( title: Text(DemoLocalizations.of(context).doneList), @@ -124,64 +126,4 @@ class NavPage extends StatelessWidget { } ; } - - Widget getWeatherNow(GlobalModel globalModel, BuildContext context) { - final color = globalModel.logic.isDarkNow() ? Colors.white : Colors.grey; - final weatherBean = globalModel.weatherBean; - if (weatherBean == null) { - return FlatButton( - child: Text(DemoLocalizations.of(context).weatherGetWrong), - onPressed: () => globalModel.logic.getWeatherNow(globalModel.currentPosition ?? ""), - ); - } - final BasicBean basicBean = - weatherBean.HeWeather6[weatherBean.HeWeather6.length - 1].basic; - final NowBean nowBean = - weatherBean.HeWeather6[weatherBean.HeWeather6.length - 1].now; - return Container( - margin: EdgeInsets.only(left: 5, top: 5), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - child: Image.asset( - "images/weather/${nowBean.cond_code}.png", - color: color, - width: 60, - height: 60, - ), - ), - Container( - height: 50, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - child: Text( - "${basicBean.location}", - style: TextStyle( - fontSize: 16, - color: color, - ), - overflow: TextOverflow.ellipsis, - maxLines: 2, - ), - ), - Text( - "${nowBean.tmp} ℃ ${nowBean.cond_txt}", - style: TextStyle( - fontSize: 16, - color: color, - ), - overflow: TextOverflow.ellipsis, - maxLines: 2, - ), - ], - ), - ) - ], - ), - ); - } } diff --git a/lib/pages/webview_page.dart b/lib/pages/webview_page.dart index 588f212..6ce5da5 100644 --- a/lib/pages/webview_page.dart +++ b/lib/pages/webview_page.dart @@ -17,62 +17,69 @@ class WebViewPage extends StatefulWidget { class _WebViewPageState extends State { FlutterWebviewPlugin flutterWebviewPlugin; - bool isError = false; - + LoadingFlag loadingFlag = LoadingFlag.loading; @override void initState() { super.initState(); flutterWebviewPlugin = new FlutterWebviewPlugin(); - } - @override void dispose() { super.dispose(); flutterWebviewPlugin.dispose(); - } @override Widget build(BuildContext context) { - flutterWebviewPlugin.onProgressChanged.listen((value){ - if (value==1) { + flutterWebviewPlugin.onProgressChanged.listen((value) { + if (value == 1) { + setState(() { + loadingFlag = LoadingFlag.success; + }); flutterWebviewPlugin.show(); } }); - flutterWebviewPlugin.onHttpError.listen((error){ + flutterWebviewPlugin.onHttpError.listen((error) { setState(() { - isError = true; + loadingFlag = LoadingFlag.error; }); }); return WillPopScope( - onWillPop: (){ - flutterWebviewPlugin.close().then((a){ + onWillPop: () { + flutterWebviewPlugin.close().then((a) { Navigator.of(context).pop(); }); }, child: Scaffold( - appBar: AppBar(title: Text(widget.title??widget.url, overflow: TextOverflow.ellipsis,), - leading: IconButton(icon: Platform.isIOS?Icon(Icons.arrow_back_ios):Icon(Icons.arrow_back), onPressed: (){ - flutterWebviewPlugin.close().then((a){ - Navigator.of(context).pop(); - }); - }), + appBar: AppBar( + title: Text( + widget.title ?? widget.url, + overflow: TextOverflow.ellipsis, + ), + leading: IconButton( + icon: Platform.isIOS + ? Icon(Icons.arrow_back_ios) + : Icon(Icons.arrow_back), + onPressed: () { + flutterWebviewPlugin.close().then((a) { + Navigator.of(context).pop(); + }); + }), ), body: WebviewScaffold( url: widget.url, hidden: true, initialChild: Center( child: Container( - alignment: Alignment.center, - child: LoadingWidget( - flag: isError ? LoadingFlag.error : LoadingFlag.loading, - errorCallBack: (){ - flutterWebviewPlugin.reload(); - }, - ), + alignment: Alignment.center, + child: LoadingWidget( + flag: loadingFlag, + errorCallBack: () { + flutterWebviewPlugin.reload(); + }, + ), ), ), ), diff --git a/lib/widgets/net_loading_widget.dart b/lib/widgets/net_loading_widget.dart index b2c4021..41d118e 100644 --- a/lib/widgets/net_loading_widget.dart +++ b/lib/widgets/net_loading_widget.dart @@ -90,6 +90,8 @@ class _NetLoadingWidgetState extends State { ); } + + @override void initState() { super.initState(); @@ -130,9 +132,11 @@ class _NetLoadingWidgetState extends State { //这里面的state没有去执行dispose,不知道会不会内存泄漏 class LoadingController { _NetLoadingWidgetState _state; + LoadingFlag _flag = LoadingFlag.loading; void setFlag(LoadingFlag loadingFlag) { _state?.loadingFlag = loadingFlag; + _flag = loadingFlag; if (_state?.mounted ?? false) { _state?.setState(() {}); } @@ -148,4 +152,8 @@ class LoadingController { } print("设置了:${this._state}"); } + + LoadingFlag get flag => _flag; + + } diff --git a/lib/widgets/weather_widget.dart b/lib/widgets/weather_widget.dart new file mode 100644 index 0000000..d48eab1 --- /dev/null +++ b/lib/widgets/weather_widget.dart @@ -0,0 +1,135 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:todo_list/config/api_service.dart'; +import 'package:todo_list/json/weather_bean.dart'; +import 'package:todo_list/model/global_model.dart'; +import 'package:todo_list/utils/shared_util.dart'; + +import 'loading_widget.dart'; + + +class WeatherWidget extends StatefulWidget { + + final GlobalModel globalModel; + + const WeatherWidget({Key key, this.globalModel}) : super(key: key); + + @override + _WeatherWidgetState createState() => _WeatherWidgetState(); +} + +class _WeatherWidgetState extends State { + + LoadingFlag loadingFlag = LoadingFlag.error; + WeatherBean weatherBean; + CancelToken cancelToken; + + @override + void initState() { + cancelToken = CancelToken(); + getWeatherNow(widget.globalModel.currentPosition, + widget.globalModel.currentLocale.languageCode); + super.initState(); + } + + @override + void dispose() { + cancelToken?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final globalModel = widget.globalModel; + final color = globalModel.logic.isDarkNow() ? Colors.white : Colors.grey; + if (weatherBean == null) { + return Padding( + padding: EdgeInsets.all(10), + child: LoadingWidget( + size: 80, + flag: loadingFlag, + errorCallBack: (){ + setState(() { + loadingFlag = LoadingFlag.loading; + }); + getWeatherNow(globalModel.currentPosition ?? "", + globalModel.currentLocale.languageCode); + }, + ), + ); + } + final BasicBean basicBean = + weatherBean.HeWeather6[weatherBean.HeWeather6.length - 1].basic; + final NowBean nowBean = + weatherBean.HeWeather6[weatherBean.HeWeather6.length - 1].now; + return Container( + margin: EdgeInsets.only(left: 5, top: 5), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + child: Image.asset( + "images/weather/${nowBean.cond_code}.png", + color: color, + width: 60, + height: 60, + ), + ), + Container( + height: 50, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: Text( + "${basicBean.location}", + style: TextStyle( + fontSize: 16, + color: color, + ), + overflow: TextOverflow.ellipsis, + maxLines: 2, + ), + ), + Text( + "${nowBean.tmp} ℃ ${nowBean.cond_txt}", + style: TextStyle( + fontSize: 16, + color: color, + ), + overflow: TextOverflow.ellipsis, + maxLines: 2, + ), + ], + ), + ) + ], + ), + ); + } + + + void getWeatherNow(String position, String languageCode) { + ApiService.instance.getWeatherNow((WeatherBean weatherBean) { + this.weatherBean = weatherBean; + SharedUtil.instance.saveString(Keys.currentPosition, position); + SharedUtil.instance.saveBoolean(Keys.enableWeatherShow, true); + setState(() { + loadingFlag = LoadingFlag.success; + }); + }, (WeatherBean weatherBean) { + setState(() { + loadingFlag = LoadingFlag.error; + }); + }, (error) { + setState(() { + loadingFlag = LoadingFlag.error; + }); + }, { + "key": "d381a4276ed349daa3bf63646f12d8ae", + "location": position, + "lang": languageCode + }, CancelToken()); + } +} diff --git a/res/intl_en_US.arb b/res/intl_en_US.arb index 19cf3ab..cd5ecbb 100644 --- a/res/intl_en_US.arb +++ b/res/intl_en_US.arb @@ -647,15 +647,15 @@ "type": "text", "placeholders": {} }, - "version100": "Version:1.0.0 \n\nThe Version 1.0.0 released!\n\n", + "version100": "Version:1.0.0 \n\nThe Version 1.0.0 released!\n", "@version100": { "description": "版本:1.0.0 \n\n版本 1.0.0 发布啦!", "type": "text", "placeholders": {} }, - "version101": "Version:1.0.1 \n\n1.Fixed: done list show error \n\n2.Add: Edit page can add start-date and deadline\n\n", + "version101": "Version:1.0.1 \n\n1.Fixed: done list show error \n2.Add: Edit page can add start-date and deadline\n", "@version101": { - "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n\n2.新增编辑任务可以添加起止时间,用作提醒\n\n", + "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n2.新增编辑任务可以添加起止时间,用作提醒\n", "type": "text", "placeholders": {} } diff --git a/res/intl_messages.arb b/res/intl_messages.arb index f019643..2081c18 100644 --- a/res/intl_messages.arb +++ b/res/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2019-08-01T15:29:51.772803", + "@@last_modified": "2019-08-05T14:24:11.101848", "appName": "One Day List", "@appName": { "description": "app的名字", @@ -646,15 +646,15 @@ "type": "text", "placeholders": {} }, - "version100": "Version:1.0.0 \n\nThe Version 1.0.0 released!\n\n", + "version100": "Version:1.0.0 \n\nThe Version 1.0.0 released!\n", "@version100": { "description": "版本:1.0.0 \n\n版本 1.0.0 发布啦!", "type": "text", "placeholders": {} }, - "version101": "Version:1.0.1 \n\n1.Fixed: done list show error \n\n2.Add: Edit page can add start-date and deadline\n\n", + "version101": "Version:1.0.1 \n\n1.Fixed: done list show error \n2.Add: Edit page can add start-date and deadline\n", "@version101": { - "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n\n2.新增编辑任务可以添加起止时间,用作提醒\n\n", + "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n2.新增编辑任务可以添加起止时间,用作提醒\n", "type": "text", "placeholders": {} } diff --git a/res/intl_zh_CN.arb b/res/intl_zh_CN.arb index 49040d7..3ff78cd 100644 --- a/res/intl_zh_CN.arb +++ b/res/intl_zh_CN.arb @@ -652,9 +652,9 @@ "type": "text", "placeholders": {} }, - "version101": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n\n2.新增编辑任务可以添加起止时间,用作提醒\n\n", + "version101": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n2.新增编辑任务可以添加起止时间,用作提醒\n", "@version101": { - "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n\n2.新增编辑任务可以添加起止时间,用作提醒\n\n", + "description": "版本:1.0.1 \n\n1.修复完成列表界面的显示bug\n2.新增编辑任务可以添加起止时间,用作提醒\n", "type": "text", "placeholders": {} }