虽然RefreshIndicator以前在移动的和网络上都运行良好,但它不再刷新Flutter Web上的屏幕。在我的任何屏幕上都不可能再过度滚动,即使它是一个很长的列表,在移动版本上很容易做到。
从flutter 3.3.x更新到3.7.9后,我注意到了这个问题
这里是另一个简化的例子.在手机上它工作得很好,重新加载随机生成的数字,在网络上什么也没有发生:
import 'package:flutter/material.dart';
import 'dart:math';
void main() => runApp(const MyHomePage());
class MyHomePage extends StatefulWidget {
const MyHomePage({
Key? key,
}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String title = 'Hello';
var rng = Random();
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: RefreshIndicator(
onRefresh: () async => setState(() {
title = 'Hey';
}),
child: ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
itemBuilder: (_, i) => Container(
padding: const EdgeInsets.all(10),
color: Colors.lightBlue,
width: double.infinity,
height: 50,
child: Text(
rng.nextInt(100).toString(),
style: Theme.of(context).textTheme.bodyLarge!.copyWith(
color: Colors.white,
),
),
),
itemCount: 200,
),
),
),
);
}
}
我试着用谷歌搜索了好几个小时,但没有找到任何有用的信息。有什么想法吗?谢谢
编辑:Niladri Raychaudhuri的版本。仍然是同样的问题
1条答案
按热度按时间eimct9ow1#
更新2
将
PointerDeviceKind.trackpad
添加到PointerDeviceKind集合更新:
这是一个已知的问题,或者可能是针对Flutter Web的,并且已在Flutter Github中报告
Reported Issue
您需要一个自定义滚动行为来覆盖行为方法和getter(如dragDevices)。
请按照以下步骤操作:
1.添加插件
custom_refresh_indicator: ^2.0.1
。该解决方案还应该与本机refreshIndicator一起工作。
2.编写自定义滚动行为
3.定义滚动控制器
4.使用ScrollConfiguration小部件 Package listView,并添加自定义滚动行为
5.最后使用CustomRefreshIndicator或原生RefreshIndicator封装
最后一点:我在这里使用了CustomRefreshIndicator,您可以使用本机RefreshIndicator
完整编码