直接干掉定位获取,真麻烦!

This commit is contained in:
oldchen
2019-07-25 11:08:56 +08:00
parent 32af05900c
commit 03e9aa07d1
16 changed files with 263 additions and 173 deletions

View File

@ -1,30 +1,38 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:todo_list/i10n/localization_intl.dart';
import 'loading_widget.dart';
class NetLoadingWidget extends StatefulWidget {
final LoadingController loadingController;
final Widget successWidget;
final String loadingText;
final String errorText;
final String successText;
final String emptyText;
final String idleText;
final VoidCallback onRequest;
final VoidCallback onSuccess;
final CancelToken cancelToken;
const NetLoadingWidget({Key key, this.loadingController, this.successWidget,}) : super(key: key);
const NetLoadingWidget({
Key key,
this.loadingController,
this.successWidget, this.loadingText, this.errorText, this.successText, this.emptyText, this.idleText, this.onRequest, this.cancelToken, this.onSuccess,
}) : super(key: key);
@override
_NetLoadingWidgetState createState() => _NetLoadingWidgetState();
}
class _NetLoadingWidgetState extends State<NetLoadingWidget> {
LoadingFlag loadingFlag = LoadingFlag.loading;
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Colors.black.withOpacity(0.3),
body: Container(
@ -41,7 +49,31 @@ class _NetLoadingWidgetState extends State<NetLoadingWidget> {
child: LoadingWidget(
flag: loadingFlag,
loadingText: getLoadingText(),
successWidget: widget.successWidget,
successWidget: widget.successWidget ?? Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Column(
children: <Widget>[
Text(
widget.successText,
style: TextStyle(fontSize: 30),
),
],
),
FlatButton(
color: Theme.of(context).primaryColor,
highlightColor: Theme.of(context).primaryColorLight,
colorBrightness: Brightness.dark,
splashColor: Theme.of(context).primaryColorDark,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),
onPressed: widget.onSuccess ?? (){},
child: Text(DemoLocalizations.of(context).ok),
)
],
),
errorCallBack: widget.onRequest ?? (){},
errorText: getLoadingText(),
),
),
),
@ -49,58 +81,62 @@ class _NetLoadingWidgetState extends State<NetLoadingWidget> {
);
}
@override
void initState() {
super.initState();
widget?.loadingController?._setState(this);
if(widget.onRequest != null){
widget.onRequest();
}
}
@override
void dispose() {
widget?.cancelToken?.cancel();
super.dispose();
}
String getLoadingText() {
switch (loadingFlag) {
case LoadingFlag.loading:
return DemoLocalizations.of(context).waitAMoment;
return widget.loadingText ?? DemoLocalizations.of(context).waitAMoment;
break;
case LoadingFlag.error:
return DemoLocalizations.of(context).submitAgain;
return widget.emptyText ?? DemoLocalizations.of(context).submitAgain;
break;
case LoadingFlag.success:
return DemoLocalizations.of(context).submitSuccess;
return widget.successText ?? DemoLocalizations.of(context).submitSuccess;
break;
case LoadingFlag.empty:
return "";
return widget.emptyText ?? "";
break;
case LoadingFlag.idle:
return "";
return widget.idleText ?? "";
break;
}
}
}
//这里面的state没有去执行dispose不知道会不会内存泄漏
class LoadingController{
class LoadingController {
_NetLoadingWidgetState _state;
void setFlag(LoadingFlag loadingFlag){
void setFlag(LoadingFlag loadingFlag) {
_state?.loadingFlag = loadingFlag;
if(_state.mounted){
_state?.setState((){});
if (_state?.mounted ?? false) {
_state?.setState(() {});
}
print("设置:${_state?.loadingFlag}");
}
void _setState(_NetLoadingWidgetState state){
if(this?._state == null){
void _setState(_NetLoadingWidgetState state) {
if (this?._state == null) {
this?._state = state;
} else {
this._state = null;
this._state = state;
}
print("设置了:${this._state}");
}
}
}