有时候,加载页面数据可能是一个接口,或者多个接口,这里就会出现各种各样的判断处理逻辑,代码看上去非常不好维护,作者在这方面也深有体会,在经过项目的锤炼,越来越简化,最终实现如下效果

provider:

class UserProvider extends BaseProvider<User> {

  @override
  Future? get dataFuture => Http.getUserData(); // 页面首次启动会请求该Future

  @override
  void initState() {
    super.initState();
  }
}

page:

class UserPage extends StatefulWidget {
  @override
  _UserPageState createState() => _UserPageState();
}

class _UserPageState extends State<UserPage>
    with PagePresenter<UserPage, UserProvider> {
  @override
  Widget get buildWidget => Scaffold(
        appBar: AppBar(
          title: const Text('示例工程'),
        ),
        body: Center(
            child: dataSelector<String>(
          selector: (__, _) => _.data.name, // _.data 为网络获取到的数据 , _ 为 UserProvider
          builder: (BuildContext context, String value, Widget? child) => Text(
            '用户名:$value',
            textAlign: TextAlign.center,
          ),
        )),
      );
}

这里面脚手架已经帮大家处理了大部分的逻辑,例如加载过程中页面显示loading、加载成功后显示使用者声明的Widget、加载过程中出现网络错误页面显示重新加载,当控制的User 为一个List 时,返回了一个空列表,页面显示空数据等等,基本上是傻瓜式操作哦,使用者只关心需要显示什么内容即可,非常便捷

评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片