gpt4 book ai didi

flutter - Flutter:提供程序的UI react

转载 作者:行者123 更新时间:2023-12-03 03:04:01 26 4
gpt4 key购买 nike

  • 在某些情况下,我想使用导航器导航到另一个屏幕。
    我可以使用BlocListener轻松实现它:

  •   BlocListener<BlocA, BlocAState>(
    bloc: blocA,
    listener: (context, state) {
    if (state is Success) {
    Navigator.of(context).pushNamed('/details');
    }
    },
    child: Container(),
    )
    但是我在纯提供程序中找不到它的直接等效项。
    我看到的唯一方法是交换屏幕:
    home: Consumer<Auth>(
    builder: (_, auth, __) => auth.user == null ? LoginPage() : MainPage()
    )
    这是一种常见的方式。但是它不会使用导航器,因此它只会在不进行屏幕转换的情况下“弹出” MainPage。
  • 在某些事件中,我想在UI中播放一些动画。

  • 我在文档中发现 Listenable类旨在用于处理动画,但未对其进行详细说明。
  • 在某些事件上,我想清除TextEditingController。
  • 在某些事件上,我想显示一个对话框。

  • 还有更多类似的任务...
    怎么解决呢?提前致谢!

    最佳答案

    经过研究,我找到了一种方法。我不确定这是否是唯一或最佳方法,还是提供商创建者预见的方法,但是它确实有效。
    这个想法是在我的Store类(我的意思是Provider附带的业务逻辑类)中保留一个辅助流,并在我的小部件中订阅其更改。
    因此,在我的商店类(class)中,我有:

      final _eventStream = StreamController.broadcast();
    Stream get eventStream => _eventStream.stream;

    void dispose() {
    _eventStream.close();
    super.dispose();
    }
    我将 Action 添加到此流中的 Action 内:
      void navigateToNextScreen() {    
    _eventStream.sink.add('nav');
    }

    void openDialog() {
    _eventStream.sink.add('dialog');
    }
    在我的UI小部件中,我有:
      @override
    void afterFirstLayout(BuildContext context) {
    context.read<Transactions>().eventStream.listen((event) {
    if (event == 'nav') {
    Navigator.push(
    context,
    MaterialPageRoute(
    builder: (ctx) => SecondScreen(),
    ),
    );
    } else if (event == 'dialog') {
    showDialog(
    context: context,
    builder: (context) => AlertDialog(content: Text("Meow")));
    }
    });
    }
    我在这里使用了 afterFirstLayout包中的 after_layout生命周期方法,它只是 WidgetsBinding.instance.addPostFrameCallback的包装

    UPD 07.07.20:刚刚找到了可用于事件响应的程序包:
    https://pub.dev/packages/event_bus
    它基本上在底层使用与StreamController相同的方法。

    关于flutter - Flutter:提供程序的UI react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62487016/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com