flutter cindularProgressIndicator()动画在Riverpod的Ref.Watch()中都无法使用。

发布于 2025-02-02 12:56:15 字数 4078 浏览 3 评论 0原文

循环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()
            ],
          
        ),
      ),
    );

”文本而不是循环progressIndicator”

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()
            ],
          
        ),
      ),
    );

Text instead of CircularProgressIndicator

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

﹂绝世的画 2025-02-09 12:56:15

虽然第一个示例已经使用了ConsumerWidget,但您可以直接观看并使用其变量ip

class SearchDevices extends ConsumerWidget {
  const SearchDevices({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, ref) {
    final ip = ref.watch(FutureIPsProvider);
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          ip.when(
            data: ((data) {
              return Text("Got Data");
            }),
            error: (error, stack) {
              return Text('err');
            },
            loading: () => const SizedBox.square(
              dimension: 40,
              child: FittedBox(
                fit: BoxFit.fill,
                child: CircularProgressIndicator(),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

While the first example already using ConsumerWidget, you can directly watch and use its variable ip.

class SearchDevices extends ConsumerWidget {
  const SearchDevices({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, ref) {
    final ip = ref.watch(FutureIPsProvider);
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          ip.when(
            data: ((data) {
              return Text("Got Data");
            }),
            error: (error, stack) {
              return Text('err');
            },
            loading: () => const SizedBox.square(
              dimension: 40,
              child: FittedBox(
                fit: BoxFit.fill,
                child: CircularProgressIndicator(),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
琉璃梦幻 2025-02-09 12:56:15

我的提供商正在造成Issure

stream.listen(
      (host) {
        print('Found device: ${host}');
      },
      onDone: () {
        print('Scan completed');
        isDone = true;
      },
    );
    return IPs;

修复程序:

await for (final res in stream) {
      IPs.toList();
      IPs.add(res.ip);
    }
    return IPs;

我知道这是什么愚蠢的EROOR,但感谢@yeasin Sheikh帮助我

My Provider was causing the issure

stream.listen(
      (host) {
        print('Found device: ${host}');
      },
      onDone: () {
        print('Scan completed');
        isDone = true;
      },
    );
    return IPs;

FIX:

await for (final res in stream) {
      IPs.toList();
      IPs.add(res.ip);
    }
    return IPs;

I know what it was stupid eroor but Huuuge thanks to @Yeasin Sheikh for helping me out

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文