Closed Misutesu closed 9 months ago
这个代码测试没有问题呢
这个代码测试没有问题呢
麻烦试试这个代码能不能复现呢?我这次是在本项目的example
里运行的
我在onRefresh
方法里加了一个Snackbar
打印,这是运行的录屏
现在具体的现象是:
onRefresh
onRefresh
onRefresh
MaterialHeader
不会出现问题import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
main() {
runApp(const TestPage());
}
class TestPage extends StatefulWidget {
const TestPage({super.key});
@override
State<TestPage> createState() => _TestPageState();
}
class _TestPageState extends State<TestPage> {
final _scaffoldKey = GlobalKey<ScaffoldState>();
late EasyRefreshController _refreshController;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
}
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
key: _scaffoldKey,
body: EasyRefresh(
controller: _refreshController,
refreshOnStart: true,
onRefresh: () async {
print("on refresh");
ScaffoldMessenger.of(_scaffoldKey.currentContext!)
.showSnackBar(const SnackBar(content: Text("On Refresh")));
await Future.delayed(const Duration(seconds: 2));
if (!mounted) {
return;
}
_refreshController.finishRefresh();
_refreshController.resetFooter();
},
child: ListView(children: const [
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
Text("123"),
]),
),
),
);
}
}
我没用真机测。是不是只有启动App就刷新会出现这种情况?
不是的,用Navigator
跳转到有问题的界面也会有这个问题,我用的是雷电模拟器测试的
刚才我测试了一下,只有雷电模拟器会有这个问题,AS的安卓模拟器和真机是正常的
雷电模拟器是Android9
没问题的真机是小米13Ultra Android14和AS自带的Android14模拟器
我明天再详细测试一下如果只在雷电模拟器上有问题的话那就不用管了
我这边也发现了这个问题,具体代码如下:
Widget build(BuildContext context) {
return Scaffold(
//设置这个appBar为null,即可复现该问题
appBar: null,
body: EasyRefresh(
refreshOnStart: true,
onRefresh: () async {
debugPrint("on refresh");
await Future.delayed(const Duration(seconds: 2));
},
onLoad: () async {
debugPrint("on load");
await Future.delayed(const Duration(seconds: 2));
},
child: CustomScrollView(
slivers: [
SliverList.builder(
itemCount: 20,
itemBuilder: (context, index) {
return Text("$index");
})
],
),
),
);
}```
我这边也发现了这个问题,具体代码如下:
Widget build(BuildContext context) { return Scaffold( //设置这个appBar为null,即可复现该问题 appBar: null, body: EasyRefresh( refreshOnStart: true, onRefresh: () async { debugPrint("on refresh"); await Future.delayed(const Duration(seconds: 2)); }, onLoad: () async { debugPrint("on load"); await Future.delayed(const Duration(seconds: 2)); }, child: CustomScrollView( slivers: [ SliverList.builder( itemCount: 20, itemBuilder: (context, index) { return Text("$index"); }) ], ), ), ); }```
真机吗?
我这边也发现了这个问题,具体代码如下:
Widget build(BuildContext context) { return Scaffold( //设置这个appBar为null,即可复现该问题 appBar: null, body: EasyRefresh( refreshOnStart: true, onRefresh: () async { debugPrint("on refresh"); await Future.delayed(const Duration(seconds: 2)); }, onLoad: () async { debugPrint("on load"); await Future.delayed(const Duration(seconds: 2)); }, child: CustomScrollView( slivers: [ SliverList.builder( itemCount: 20, itemBuilder: (context, index) { return Text("$index"); }) ], ), ), ); }```
真机吗?
是的,iPhone13、三星S22都会出现
3.3.2没问题,升级到最新版确实有这个问题
可以试试github最新的代码是否修复。我没有复现设备,所以只是理论猜测
3.3.4已尝试修复,如还有问题,请重新开启此issue
问题:
refreshOnStart
设置为true
时首次加载只有动画onRefresh
不回调onRefresh
是正常执行的EasyRefreshController
的finishRefresh
方法也无法停止首次加载的动画example
中的refresh_on_start_page.dart
这个界面是没问题的onRefresh
能正常触发3.16.5
,easy_refresh版本是^3.3.3+1
以下是我的测试代码