flutter-thrio/flutter_thrio

hello,能否以 demo 为例说明一下模块、子模块、页面之间的关系

hw20101101 opened this issue · 13 comments

我在文档中也没有找到相关的说明。
另外,我把 demo 中的 ThrioNavigator.notify 搬到项目中但是却走不通。

谢谢!!

example 目录下有

如果要搭建 tab 导航类型的根页面,那应该把 tab 导航页面放在哪里呢?

我目前用的是 DefaultTabController 和 BottomNavigationBar,把它们放在了 biz1/flutter1 相关的页面中。

但是当我在 biz2/flutter4 页面返回 biz2/flutter2 页面时,给 biz2/flutter2 页面发送通知却没有响应。

biz2/flutter2 部分代码:

  @override
  Widget build(BuildContext context) => NavigatorPageNotify(
    name: 'flutter2_notify',
    onPageNotify: (params) =>
        print('-->> mine receive notify: $params'),
    child: makeScaffold()  
  );

biz2/flutter4 调用代码:

 ThrioNavigator.notify(url: '/biz2/flutter2', name: 'flutter2_notify', params: {'age': 11} );
  1. tab类型的页面这个要看你的需求了,thrio只是路由整个页面
  2. notify 你看看 demo 其它示例,还有就是页面通知在页面出现的时候才会调用

谢谢,你说的第二点文档中有写。

能否帮忙看看这个 demo 呢?现在的问题是:我从我的页面(Flutter2Page)点击 ==== push flutter4 ==== 之后,然后点击页面底部的 ==== pop and Notify ==== 之后,我的页面(Flutter2Page)没有收到通知。

https://github.com/hw20101101/thrio_demo

demo 的示例是这样的,你的没有 await,你的例子里面,至少要await notify

 if (!await ThrioNavigator.notify(
    url: '/biz1/flutter1',
    name: 'page1Notify',
  )) {
    await ThrioNavigator.push(
        url: '/biz1/flutter1', params: {'page1Notify': {}});
  }

你这种情况,可以考虑 push 的 popResult 是否适用

谢谢!我刚改了 flutter4 页面的点击事件:

InkWell(
    onTap: () async {
      
        if (!await ThrioNavigator.notify(
            url: '/biz2/flutter2',
            name: 'page2Notify',
            params: 'name'
        )) {

          await ThrioNavigator.pop();
        }
    },
    child: Container(
        padding: const EdgeInsets.all(8),
        margin: const EdgeInsets.all(8),
        color: Colors.grey,
        child: const Text(
          ' === pop and Notify === ',
          style: TextStyle(fontSize: 22, color: Colors.black),
        )),
  )

为什么点击 === pop and Notify === 返回到 flutter2 页面之后,flutter2 页面还是没有收到通知呢?

非常感谢!我刚试了一下,poppedResult 可以满足需求。

但是 Flutter2Page 相关的 module 中的 didAppear 等生命周期方法为什么一直没有触发呢 ?

这里会有个类似命名空间的概念,只能收到该 module 下的页面的生命周期

抱歉,demo 中的 module 有点多,你说的 该 module 是指 biz1 目录下的 module 还是指 biz1/flutter1 目录下的 module?

另外,是否可以使我的 demo 中的 biz2/flutter2 目录下的 module 正常运行 didAppear 等方法?如果可以的话该怎么做呢?

    if (!await ThrioNavigator.notify(
        url: '/biz2/flutter2',
        name: 'page2Notify',
        params: 'name'
    )) {

      await ThrioNavigator.pop();
    }

这里 ! 要去掉,我的例子是如果通知不到该页面表示没有打开过该页面,然后再 push

抱歉,demo 中的 module 有点多,你说的 该 module 是指 biz1 目录下的 module 还是指 biz1/flutter1 目录下的 module?

另外,是否可以使我的 demo 中的 biz2/flutter2 目录下的 module 正常运行 didAppear 等方法?如果可以的话该怎么做呢?

子模块,包括子模块的子模块

这里 ! 要去掉,我的例子是如果通知不到该页面表示没有打开过该页面,然后再 push

😺 好的,谢谢!我试试