flutter cindularProgressIndicator()动画在Riverpod的Ref.Watch()中都无法使用。
循环progressIndicator屏幕截图
正在使用 riverpod 用于州 - 管理
我 代码>
在我在物理设备和模拟器上测试的
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_web_lights/providers.dart';
class SearchDevices extends ConsumerStatefulWidget {
const SearchDevices({Key? key}) : super(key: key);
@override
_SearchDevicesState createState() => _SearchDevicesState();
}
class _SearchDevicesState extends ConsumerState<SearchDevices> {
@override
Widget build(BuildContext context) {
final ip = ref.watch(FutureIPsProvider);
return Scaffold(
appBar: AppBar(),
// backgroundColor: Theme.of(context).backgroundColor,
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ip.when(
data: ((data) {
return ListView.builder(
shrinkWrap: true,
itemCount: data.length,
itemBuilder: (BuildContext context, int index) {
return Text(data[index]);
},
);
}),
error: (error, stack) {
return Text('err');
},
loading: () => const SizedBox.square(
dimension: 40,
child: FittedBox(
fit: BoxFit.fill,
child: CircularProgressIndicator(),
),
),
),
],
),
),
);
}
}
任何条件下仅占用4个像素
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_web_lights/services/scan_service.dart';
final FutureIPsProvider = FutureProvider<List<String>>(((ref) async {
return await ref.watch(IpProvider).Scan();
}));
ipprovider
dimension
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:network_info_plus/network_info_plus.dart';
import 'package:network_tools/network_tools.dart';
final IpProvider = Provider<IPScaner>(
(ref) => IPScaner(),
);
class IPScaner {
String ip = "";
String subnet = "";
int port = 80;
Future<List<String>> Scan() async {
List<String> IPs = [];
var wifiInfo = NetworkInfo();
ip = (await wifiInfo.getWifiIP())!;
subnet = ip.substring(0, ip.lastIndexOf('.'));
final stream = HostScanner.discover(subnet, firstSubnet: 1, lastSubnet: 50,
progressCallback: (progress) {
print('Progress for host discovery : $progress');
});
stream.listen((host) {
print('Found device: ${host}');
IPs.toList();
IPs.add(host.ip);
}, onDone: () {
print('Scan completed');
});
return IPs;
}
}
dimension:300
代码>仅像这样的作品
return Scaffold(
// backgroundColor: Theme.of(context).backgroundColor,
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
CircularProgressIndicator()
],
),
),
);
CircularProgressIndicator Screen Shot
I'm using Riverpod for state-management
CircularProgressIndicator
occupies only 4 pixels under any conditions
I tested on a physical device and on an emulator
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_web_lights/providers.dart';
class SearchDevices extends ConsumerStatefulWidget {
const SearchDevices({Key? key}) : super(key: key);
@override
_SearchDevicesState createState() => _SearchDevicesState();
}
class _SearchDevicesState extends ConsumerState<SearchDevices> {
@override
Widget build(BuildContext context) {
final ip = ref.watch(FutureIPsProvider);
return Scaffold(
appBar: AppBar(),
// backgroundColor: Theme.of(context).backgroundColor,
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ip.when(
data: ((data) {
return ListView.builder(
shrinkWrap: true,
itemCount: data.length,
itemBuilder: (BuildContext context, int index) {
return Text(data[index]);
},
);
}),
error: (error, stack) {
return Text('err');
},
loading: () => const SizedBox.square(
dimension: 40,
child: FittedBox(
fit: BoxFit.fill,
child: CircularProgressIndicator(),
),
),
),
],
),
),
);
}
}
FutureIPsProvider
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_web_lights/services/scan_service.dart';
final FutureIPsProvider = FutureProvider<List<String>>(((ref) async {
return await ref.watch(IpProvider).Scan();
}));
IpProvider
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:network_info_plus/network_info_plus.dart';
import 'package:network_tools/network_tools.dart';
final IpProvider = Provider<IPScaner>(
(ref) => IPScaner(),
);
class IPScaner {
String ip = "";
String subnet = "";
int port = 80;
Future<List<String>> Scan() async {
List<String> IPs = [];
var wifiInfo = NetworkInfo();
ip = (await wifiInfo.getWifiIP())!;
subnet = ip.substring(0, ip.lastIndexOf('.'));
final stream = HostScanner.discover(subnet, firstSubnet: 1, lastSubnet: 50,
progressCallback: (progress) {
print('Progress for host discovery : $progress');
});
stream.listen((host) {
print('Found device: ${host}');
IPs.toList();
IPs.add(host.ip);
}, onDone: () {
print('Scan completed');
});
return IPs;
}
}
dimension: 300
CircularProgressIndicator()
works only like this
return Scaffold(
// backgroundColor: Theme.of(context).backgroundColor,
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
CircularProgressIndicator()
],
),
),
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
虽然第一个示例已经使用了ConsumerWidget,但您可以直接观看并使用其变量
ip
。While the first example already using ConsumerWidget, you can directly watch and use its variable
ip
.我的提供商正在造成Issure
修复程序:
我知道这是什么愚蠢的EROOR,但感谢@yeasin Sheikh帮助我
My Provider was causing the issure
FIX:
I know what it was stupid eroor but Huuuge thanks to @Yeasin Sheikh for helping me out