Commit 5347674b authored by skeyboy's avatar skeyboy

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

parent 5f368f69
...@@ -194,10 +194,15 @@ class UserAPI { ...@@ -194,10 +194,15 @@ class UserAPI {
} }
static Future<SceneEntity> getSceneList() async { static Future<SceneEntity> getSceneList() async {
var response = await HttpUtil().get( try{
'/scene/getSceneList', var response = await HttpUtil().get(
); '/scene/getSceneList',
return SceneEntity.fromJson(response); );
return SceneEntity.fromJson(response);
}catch(e){
return Future.error(e);
}
// UserInfoEntity.fromMap(response['data']); // UserInfoEntity.fromMap(response['data']);
// UserLoginResponseEntity.fromJson(response); // 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'; ...@@ -7,15 +7,35 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart'; import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class AssistantController extends GetxController { class AssistantController extends GetxController {
AssistantController(); AssistantController();
final sceneList = [].obs; 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 { _initData() async {
SceneEntity res = await UserAPI.getSceneList(); onRefresh();
sceneList.addAll(res.data!); // SceneEntity res = await UserAPI.getSceneList();
// sceneList.addAll(res.data!);
} }
void onTap(item) async { void onTap(item) async {
......
...@@ -6,6 +6,7 @@ import 'package:flutter_vibrate/flutter_vibrate.dart'; ...@@ -6,6 +6,7 @@ import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gradient_widgets/gradient_widgets.dart'; import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import '../index.dart'; import '../index.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.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'; ...@@ -13,6 +14,16 @@ import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
class GridWidget extends GetView<AssistantController> { class GridWidget extends GetView<AssistantController> {
@override @override
Widget build(BuildContext context) { 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( return CustomScrollView(
slivers: [ slivers: [
SliverPersistentHeader( SliverPersistentHeader(
...@@ -27,13 +38,15 @@ class GridWidget extends GetView<AssistantController> { ...@@ -27,13 +38,15 @@ class GridWidget extends GetView<AssistantController> {
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: FadeInImage( child: FadeInImage(
fadeInDuration: Duration(milliseconds: 500), fadeInDuration: Duration(milliseconds: 500),
placeholder: const AssetImage( placeholder:
'assets/images/loading.gif'), // 加载指示器 const AssetImage('assets/images/loading.gif'),
// 加载指示器
image: NetworkImage( image: NetworkImage(
'https://www.hahagpt.com/images/assets/banner2.png'), 'https://www.hahagpt.com/images/assets/banner2.png'),
// image: NetworkImage( // 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 // '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, // 图像适应 placeholderFit: BoxFit.cover, // 图像适应
), ),
) )
...@@ -105,11 +118,13 @@ class GridWidget extends GetView<AssistantController> { ...@@ -105,11 +118,13 @@ class GridWidget extends GetView<AssistantController> {
fadeInDuration: fadeInDuration:
Duration(milliseconds: 500), Duration(milliseconds: 500),
placeholder: const AssetImage( placeholder: const AssetImage(
'assets/images/loading.gif'), // 加载指示器 'assets/images/loading.gif'),
// 加载指示器
image: NetworkImage('${element.icon}'), image: NetworkImage('${element.icon}'),
// image: NetworkImage( // 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 // '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, // 图像适应 placeholderFit: BoxFit.cover, // 图像适应
), ),
), ),
...@@ -140,7 +155,8 @@ class GridWidget extends GetView<AssistantController> { ...@@ -140,7 +155,8 @@ class GridWidget extends GetView<AssistantController> {
increaseHeightBy: -5.00, increaseHeightBy: -5.00,
increaseWidthBy: -10.00, increaseWidthBy: -10.00,
callback: () { callback: () {
controller.onTap(element); controller
.onTap(element);
}, },
// controller.requestPurchase, // controller.requestPurchase,
gradient: gradient:
...@@ -169,8 +185,10 @@ class GridWidget extends GetView<AssistantController> { ...@@ -169,8 +185,10 @@ class GridWidget extends GetView<AssistantController> {
Text("${element.sceneDesc}", Text("${element.sceneDesc}",
maxLines: 2, maxLines: 2,
textAlign: TextAlign.left, textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis, overflow:
style: TextStyle(fontSize: 10)) 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