懒加载优化性能

This commit is contained in:
jyuesong
2022-01-19 14:47:11 +08:00
parent 6185a92759
commit 16f4f27f17
2 changed files with 26 additions and 43 deletions

View File

@@ -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);
} }

View File

@@ -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();
}
} }