mirror of
https://github.com/qinglong-app/qinglong_app.git
synced 2025-10-09 16:48:19 +08:00
懒加载优化性能
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:qinglong_app/base/ui/lazy_load_state.dart';
|
||||||
import 'package:qinglong_app/utils/extension.dart';
|
import 'package:qinglong_app/utils/extension.dart';
|
||||||
import 'base_viewmodel.dart';
|
import 'base_viewmodel.dart';
|
||||||
|
|
||||||
@@ -8,6 +9,7 @@ class BaseStateWidget<T extends BaseViewModel> extends ConsumerStatefulWidget {
|
|||||||
final ProviderBase<T> model;
|
final ProviderBase<T> model;
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
final Function(T)? onReady;
|
final Function(T)? onReady;
|
||||||
|
final bool lazyLoad;
|
||||||
|
|
||||||
const BaseStateWidget({
|
const BaseStateWidget({
|
||||||
Key? key,
|
Key? key,
|
||||||
@@ -15,26 +17,14 @@ class BaseStateWidget<T extends BaseViewModel> extends ConsumerStatefulWidget {
|
|||||||
required this.model,
|
required this.model,
|
||||||
this.child,
|
this.child,
|
||||||
this.onReady,
|
this.onReady,
|
||||||
|
this.lazyLoad = false,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_BaseStateWidgetState<T> createState() => _BaseStateWidgetState<T>();
|
_BaseStateWidgetState<T> createState() => _BaseStateWidgetState<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _BaseStateWidgetState<T extends BaseViewModel>
|
class _BaseStateWidgetState<T extends BaseViewModel> extends ConsumerState<BaseStateWidget<T>> with LazyLoadState<BaseStateWidget<T>> {
|
||||||
extends ConsumerState<BaseStateWidget<T>> {
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
WidgetsBinding.instance?.addPostFrameCallback(
|
|
||||||
(timeStamp) {
|
|
||||||
if (widget.onReady != null) {
|
|
||||||
widget.onReady!(ref.read<T>(widget.model));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var viewModel = ref.watch<T>(widget.model);
|
var viewModel = ref.watch<T>(widget.model);
|
||||||
@@ -65,32 +55,27 @@ class _BaseStateWidgetState<T extends BaseViewModel>
|
|||||||
if (viewModel.currentState == PageState.EMPTY) {
|
if (viewModel.currentState == PageState.EMPTY) {
|
||||||
return Container(
|
return Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Text("暂无数据"),
|
child: const Text("暂无数据"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Container();
|
return Container();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
abstract class BaseState<T extends StatefulWidget> extends State {
|
@override
|
||||||
late T parent;
|
void onLazyLoad() {
|
||||||
|
if (widget.onReady != null && widget.lazyLoad) {
|
||||||
|
widget.onReady!(ref.read<T>(widget.model));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
parent = widget as T;
|
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance?.endOfFrame.then((_) {
|
WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {
|
||||||
firstFrameCalled();
|
if (widget.onReady != null && !widget.lazyLoad) {
|
||||||
|
widget.onReady!(ref.read<T>(widget.model));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void firstFrameCalled() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return buildWidgets(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget buildWidgets(BuildContext context);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:qinglong_app/base/http/http.dart';
|
|||||||
import 'package:qinglong_app/base/ql_app_bar.dart';
|
import 'package:qinglong_app/base/ql_app_bar.dart';
|
||||||
import 'package:qinglong_app/base/routes.dart';
|
import 'package:qinglong_app/base/routes.dart';
|
||||||
import 'package:qinglong_app/base/theme.dart';
|
import 'package:qinglong_app/base/theme.dart';
|
||||||
|
import 'package:qinglong_app/base/ui/lazy_load_state.dart';
|
||||||
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
||||||
import 'package:qinglong_app/utils/extension.dart';
|
import 'package:qinglong_app/utils/extension.dart';
|
||||||
|
|
||||||
@@ -17,15 +18,9 @@ class ScriptPage extends ConsumerStatefulWidget {
|
|||||||
_ScriptPageState createState() => _ScriptPageState();
|
_ScriptPageState createState() => _ScriptPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ScriptPageState extends ConsumerState<ScriptPage> {
|
class _ScriptPageState extends ConsumerState<ScriptPage> with LazyLoadState<ScriptPage> {
|
||||||
List<ScriptBean> list = [];
|
List<ScriptBean> list = [];
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
loadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@@ -51,9 +46,8 @@ class _ScriptPageState extends ConsumerState<ScriptPage> {
|
|||||||
title: Text(
|
title: Text(
|
||||||
item.title ?? "",
|
item.title ?? "",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: (item.disabled ?? false)
|
color:
|
||||||
? ref.watch(themeProvider).themeColor.descColor()
|
(item.disabled ?? false) ? ref.watch(themeProvider).themeColor.descColor() : ref.watch(themeProvider).themeColor.titleColor(),
|
||||||
: ref.watch(themeProvider).themeColor.titleColor(),
|
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -93,9 +87,8 @@ class _ScriptPageState extends ConsumerState<ScriptPage> {
|
|||||||
title: Text(
|
title: Text(
|
||||||
item.title ?? "",
|
item.title ?? "",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: (item.disabled ?? false)
|
color:
|
||||||
? ref.watch(themeProvider).themeColor.descColor()
|
(item.disabled ?? false) ? ref.watch(themeProvider).themeColor.descColor() : ref.watch(themeProvider).themeColor.titleColor(),
|
||||||
: ref.watch(themeProvider).themeColor.titleColor(),
|
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -118,4 +111,9 @@ class _ScriptPageState extends ConsumerState<ScriptPage> {
|
|||||||
response.message?.toast();
|
response.message?.toast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onLazyLoad() {
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user