用户登录

创建内容的时候需要用的数据还有方法可以放在一个数据模型里,在项目下面新建一个文件,放在 lib/post/create 目录的下面,名字是 post_create_model.dart。在文件里定义一个类,名字是 PostCreateModel,继承一下 ChangeNotifier 。

这个模型有个依赖类型是 AppService,名字是 appService,它里面有我们在请求接口的时候需要用的客户端。添加一个构造方法,PostCreateModel ,里面添加一个带名字的参数,用 required 标记一下,this.appService。

再添加几个属性,String? 类型的 title,表示内容的标题,String? 类型的 content,表示内容的正文。

然后再添加一个 bool 类型的 loading ,默认值是 false,用它表示请求的加载状态,请求接口的时候可以把它的值设置成 true,请求完成以后再把它的值设置成 false。

定义几个方法,setTitle 接收一个 String? 类型的 data 参数,方法里让 title 等于这个 data 参数的值。再定义一个 setContent,同样接收一个 String? 类型的 data 参数,在方法里,让 content 等于 data。然后是 setLoading,接收一个 bool 类型的 data,在方法里让 loading 等于 data,再执行一下 notifyListeners()。

再定义一个 reset,这个方法可以重置一些东西,这里可以把 title 设置成 null,再把 content 也设置成 null。要重置 title 还有 content 的时候可以调用这个 model 里的 reset 方法。

createPost

下面再定义一个请求创建内容用的方法,方法返回的值是 Future,名字是 createPost ,用 async 标记一下。方法里面声明一个 uri ,值用 Uri.parse 处理一下创建内容接口地址,AppConfig,导入这个 AppConfig,用一下它里面的 apiBaseUrl,再加上 /posts 。

然后发送一个创建内容的请求,声明一个 response ,等于 await 用一下 appService.apiHttpClient.post 这个方法发送一个 HTTP 请求,地址是 uri,请求里带着要创建的内容相关的数据,添加一个 'title' 对应的值是 title,再添加一个 'content',对应的值是 content。

声明一个 responseBody,它的值可以用 jsonDecode 处理一下 response.body。然后判断一下 response.statusCode 是不是等于 201,如果不是,可以 throw 一个异常,新建一个 HttpException ,异常信息是 responseBody['message']。

如果响应的状态码是 201,就说明成功创建了内容,这里可以声明一个 postId,它的值是 responseBody['insertId'],在服务端给出的响应的主体里面,这个 insertId 就是新创建的这个内容的 id 号。 下面可以 return 这个 postId,让它作为这个 createPost 方法返回的值,也就是如果成功创建了内容,这个方法最终返回的值就是新创建的这个内容的 id。

postCreateProvider

下面再定义一个 Provider 提供这个数据模型,打开 post_provider.dart,在里面声明一个 postCreateProvider,它的值可以新建一个 ChangeNotifierProxyProvider ,两个类型,第一个是 AppService,第二个是 PostCreateModel。

设置一下 create 参数,方法有个 context 参数,返回的是一个 PostCreateModel 实例,设置一下 appService,值是 context.read,类型是 AppService。再添加一个 update,三个参数,context,appService,还有 postCreateModel,return 的是一个 PostCreateModel 实例,appService 的值是 appService。

在这个 postProviders 里面,再添加一个 postCreateProvider。

定义创建内容数据模型(PostCreateModel)《 Flutter 2:创建内容 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点