mirror of
https://github.com/asjqkkkk/flutter-todos.git
synced 2025-08-06 14:19:24 +08:00
直接干掉定位获取,真麻烦!
This commit is contained in:
@ -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}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user