Commit 5347674b authored by skeyboy's avatar skeyboy

1 私人助理增加刷新 2 添加空页面

parent 5f368f69
......@@ -194,10 +194,15 @@ class UserAPI {
}
static Future<SceneEntity> getSceneList() async {
var response = await HttpUtil().get(
'/scene/getSceneList',
);
return SceneEntity.fromJson(response);
try{
var response = await HttpUtil().get(
'/scene/getSceneList',
);
return SceneEntity.fromJson(response);
}catch(e){
return Future.error(e);
}
// UserInfoEntity.fromMap(response['data']);
// UserLoginResponseEntity.fromJson(response);
}
......
import 'package:bruno/bruno.dart';
import 'package:flutter/material.dart';
class BlankPageWidgetController extends ChangeNotifier {
bool isBlanked = true;
void showBlankPage() {
isBlanked = true;
notifyListeners();
}
void hideBlankPage() {
isBlanked = false;
notifyListeners();
}
}
typedef BlankPageBuilder = Widget Function(Widget);
class BlankPageWidget extends StatefulWidget {
BlankPageWidgetController controller;
// BlankPageBuilder builder;
Widget child;
void Function()? retryCallback;
BlankPageWidget(
{Key? key,
required this.controller,
required this.child,
required this.retryCallback})
: super(key: key);
@override
State<BlankPageWidget> createState() => _BlankPageWidgetState();
}
class _BlankPageWidgetState extends State<BlankPageWidget> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
if (mounted) {
setState(() {});
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return widget.controller.isBlanked == false
? widget.child
: BrnAbnormalStateWidget(
bgColor: Color.fromARGB(0, 29, 33, 60),
img: Image.asset(
'assets/images/ic_launcher.png',
scale: 3.0,
),
isCenterVertical: true,
themeData: BrnAbnormalStateConfig(titleTextStyle: BrnTextStyle(color: Colors.white54)),
title: "网络开小差了",
operateTexts: <String>["重试"],
operateAreaType: OperateAreaType.textButton,
action: (index) {
widget.retryCallback?.call();
},
);
}
}
......@@ -7,15 +7,35 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class AssistantController extends GetxController {
AssistantController();
final sceneList = [].obs;
RxBool enablePullDown = true.obs;
RxBool enablePullUp = false.obs;
late RefreshController refreshController =
RefreshController(initialRefresh: false);
onRefresh() async {
try {
SceneEntity res = await UserAPI.getSceneList();
if (res.data?.isNotEmpty ?? false) {
sceneList.clear();
}
sceneList.addAll(res.data!);
refreshController.refreshCompleted();
} catch (e) {
print("网络异常$e");
refreshController.refreshCompleted();
}
}
_initData() async {
SceneEntity res = await UserAPI.getSceneList();
sceneList.addAll(res.data!);
onRefresh();
// SceneEntity res = await UserAPI.getSceneList();
// sceneList.addAll(res.data!);
}
void onTap(item) async {
......
......@@ -6,6 +6,7 @@ import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import '../index.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
......@@ -13,6 +14,16 @@ import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
class GridWidget extends GetView<AssistantController> {
@override
Widget build(BuildContext context) {
return Obx(() => SmartRefresher(
enablePullDown: controller.enablePullDown.value,
enablePullUp: controller.enablePullUp.value,
onRefresh: controller.onRefresh,
controller: controller.refreshController,
child: _buildBlankPage(),
));
}
Widget _buildBlankPage() {
return CustomScrollView(
slivers: [
SliverPersistentHeader(
......@@ -27,13 +38,15 @@ class GridWidget extends GetView<AssistantController> {
borderRadius: BorderRadius.circular(10),
child: FadeInImage(
fadeInDuration: Duration(milliseconds: 500),
placeholder: const AssetImage(
'assets/images/loading.gif'), // 加载指示器
placeholder:
const AssetImage('assets/images/loading.gif'),
// 加载指示器
image: NetworkImage(
'https://www.hahagpt.com/images/assets/banner2.png'),
// image: NetworkImage(
// 'https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.pinterest.com%2Fpin%2Fai-visualization-design-fui-artificial-intelligence-siri-filter-ai-loading-logo-flow-light--400538960609301125%2F&psig=AOvVaw0X4iFGabqA_JwUiW9zEG4u&ust=1680859399497000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCLiAnK33lP4CFQAAAAAdAAAAABAb'), // 图像URL
fit: BoxFit.cover, // 图像适应方式
fit: BoxFit.cover,
// 图像适应方式
placeholderFit: BoxFit.cover, // 图像适应
),
)
......@@ -105,11 +118,13 @@ class GridWidget extends GetView<AssistantController> {
fadeInDuration:
Duration(milliseconds: 500),
placeholder: const AssetImage(
'assets/images/loading.gif'), // 加载指示器
'assets/images/loading.gif'),
// 加载指示器
image: NetworkImage('${element.icon}'),
// image: NetworkImage(
// 'https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.pinterest.com%2Fpin%2Fai-visualization-design-fui-artificial-intelligence-siri-filter-ai-loading-logo-flow-light--400538960609301125%2F&psig=AOvVaw0X4iFGabqA_JwUiW9zEG4u&ust=1680859399497000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCLiAnK33lP4CFQAAAAAdAAAAABAb'), // 图像URL
fit: BoxFit.cover, // 图像适应方式
fit: BoxFit.cover,
// 图像适应方式
placeholderFit: BoxFit.cover, // 图像适应
),
),
......@@ -140,7 +155,8 @@ class GridWidget extends GetView<AssistantController> {
increaseHeightBy: -5.00,
increaseWidthBy: -10.00,
callback: () {
controller.onTap(element);
controller
.onTap(element);
},
// controller.requestPurchase,
gradient:
......@@ -169,8 +185,10 @@ class GridWidget extends GetView<AssistantController> {
Text("${element.sceneDesc}",
maxLines: 2,
textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 10))
overflow:
TextOverflow.ellipsis,
style:
TextStyle(fontSize: 10))
]),
),
)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment