Flutter 将项添加到Flatter中的提供程序

Flutter 将项添加到Flatter中的提供程序,flutter,Flutter,在api调用中使用提供者的正确方法是什么 虽然我不知道它是否正确,但我当前的设置是我有一个响应模型和一个响应类,响应模型被传递给响应类。ui正在使用提供程序。代码如下: class InfoProvider extends ChangeNotifier { Future<Response> getSomeInfo(SomeInfo someInfo) async { try { final responseJson = await _provider.post('

在api调用中使用提供者的正确方法是什么

虽然我不知道它是否正确,但我当前的设置是我有一个响应模型和一个响应类,响应模型被传递给响应类。ui正在使用提供程序。代码如下:

class InfoProvider extends ChangeNotifier {
Future<Response> getSomeInfo(SomeInfo someInfo) async {
    try {
      final responseJson = await _provider.post('/info', someInfo.toJson());

      ResponseModel someResponse = ResponseModel.fromJson(responseJson['payload']);
      return Response.success(someResponse);
    } catch (e) {
      if (e.toString() == 'refresh_token_not_found') return Response.unauthenticated();
      return Response.error(e.getError());
    }
  }

Future<Response> fetchInfo() async {
try {
  final responseJson = await _provider.get('info');
  if (responseJson['payload'].isEmpty) return Response.success([]);

  AllInfoResponse alLInfoResponse = AllInfoResponse.fromJson(responseJson['payload']);
  _allInfo = alLInfoResponse.AllInfoResponse;
  return Response.success(alLInfoResponse);
} catch (e) {
  if (e.toString() == 'refresh_token_not_found') return Response.unauthenticated();
  return Response.error(e.toString());
}
类InfoProvider扩展了ChangeNotifier{
未来的getSomeInfo(SomeInfo-SomeInfo)异步{
试一试{
final responseJson=wait_provider.post('/info',someInfo.toJson());
ResponseModel someResponse=ResponseModel.fromJson(responseJson['payload']);
返回响应。成功(someResponse);
}捕获(e){
if(例如,toString()=='refresh\u token\u not\u found')返回Response.unauthenticated();
返回Response.error(例如getError());
}
}
Future fetchInfo()异步{
试一试{
final responseJson=wait_provider.get('info');
if(responseJson['payload'].isEmpty)返回Response.success([]);
AllInfo响应AllInfo响应=AllInfo响应.fromJson(responseJson['payload']);
_allInfo=allInfo响应。allInfo响应;
返回响应。成功(AllInfo响应);
}捕获(e){
if(例如,toString()=='refresh\u token\u not\u found')返回Response.unauthenticated();
返回Response.error(例如toString());
}
} }

ui有这样一个未来构建器:
future:Provider.of(context.getSomeInfo(),

这样所有的功能都可以正常工作,但是我怎样才能向ui添加更多的项目呢

这是我的模型:

class ResponseModel {
  final List<SingleResponseModel> ResponseModel;
  ResponseModel({this.ResponseModel});

  factory ResponseModel.fromJson(List<dynamic> json) => ResponseModel(
        ResponseModel: List<SingleResponseModel>.from(json.map((x) => SingleResponseModel.fromJson(x))),
      );
}

class SingleResponseModel {
  final String id;
  final String title;

  SingleResponseModel({
    this.id,
    this.title,
  });

  factory SingleResponseModel.fromJson(Map<String, dynamic> json) {
    return SingleResponseModel(
      id: json['_id'],
      title: json['title'],
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();

    data['id'] = this.id;
    data['title'] = this.title;

    return data;
  }
}
类响应模型{
最终列表响应模型;
ResponseModel({this.ResponseModel});
factory ResponseModel.fromJson(列表json)=>ResponseModel(
ResponseModel:List.from(json.map((x)=>SingleResponseModel.fromJson(x)),
);
}
类SingleResponseModel{
最终字符串id;
最后的字符串标题;
单响应模型({
这个身份证,
这个名字,
});
factory SingleResponseModel.fromJson(映射json){
返回单响应模式(
id:json[''u id'],
标题:json['title'],
);
}
映射到JSON(){
最终地图数据=新地图();
数据['id']=this.id;
数据['title']=this.title;
返回数据;
}
}

在您的场景中执行此操作的最佳方法是使用MultiProvider将MaterialApp封装在main.dart文件中的MyApp()中。尝试以下方法:您可以在其中放置ChangeNotifierProvider

以下是如何在UI中访问ResponseModel的值:

final model=Provider.of<ResponseModel>(context,listen:false);
final model=Provider.of(上下文,listen:false);
不要忘记添加getter和setter,这样,如果有依赖于它的ui,就可以使用notifyListeners()

您的模型应该是这样的:

class ResponseModel extends ChangeNotifier {
  List<SingleResponseModel> _myModel;
  get myModel => _myModel;
  set myModel(List<SingleResponseModel> myModel) {
    _myModel = myModel;
    notifyListeners();
  }
}
class ResponseModel扩展了ChangeNotifier{
列出我的模型;
获取myModel=>\u myModel;
设置myModel(列出myModel){
_myModel=myModel;
notifyListeners();
}
}
以下是如何在文本小部件中显示数据(理想情况下,您应该使用选择器而不是使用者,以便小部件仅在其侦听的值发生更改时重建):

@覆盖
小部件构建(构建上下文){
//其他小部件
选择器(
选择器:(u,model)=>model.myModel,
建筑商:(uu,模型,uu){
返回ListView.builder(
itemCount:model.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(模型[索引].标题),
字幕:文本(型号[index].id),
);
},
);
}
)
}

希望这有帮助!祝你好运

在场景中执行此操作的最佳方法是使用MultiProvider将MaterialApp封装在main.dart文件中的MyApp()中。尝试以下方法:您可以在其中放置ChangeNotifierProvider

以下是如何在UI中访问ResponseModel的值:

final model=Provider.of<ResponseModel>(context,listen:false);
final model=Provider.of(上下文,listen:false);
不要忘记添加getter和setter,这样,如果有依赖于它的ui,就可以使用notifyListeners()

您的模型应该是这样的:

class ResponseModel extends ChangeNotifier {
  List<SingleResponseModel> _myModel;
  get myModel => _myModel;
  set myModel(List<SingleResponseModel> myModel) {
    _myModel = myModel;
    notifyListeners();
  }
}
class ResponseModel扩展了ChangeNotifier{
列出我的模型;
获取myModel=>\u myModel;
设置myModel(列出myModel){
_myModel=myModel;
notifyListeners();
}
}
以下是如何在文本小部件中显示数据(理想情况下,您应该使用选择器而不是使用者,以便小部件仅在其侦听的值发生更改时重建):

@覆盖
小部件构建(构建上下文){
//其他小部件
选择器(
选择器:(u,model)=>model.myModel,
建筑商:(uu,模型,uu){
返回ListView.builder(
itemCount:model.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(模型[索引].标题),
字幕:文本(型号[index].id),
);
},
);
}
)
}

希望这有帮助!祝你好运

刚刚加上我的model@Jessica你能告诉我你想在这里做什么吗?你说的如何向ui添加更多项是什么意思?我基本上有一个“获取所有数据”函数和一个“添加新数据”函数。我上面的代码与fetch all data函数配合得很好,但是当有post请求,并且新数据被添加到后端时,我希望ui也能接收到新数据。为此,您可以执行上面的操作,并使用Listview.builder()显示数据。我更新了我的答案,现在得到了这个错误:一个构建函数返回null。刚刚添加了我的model@Jessica你能告诉我你想在这里做什么吗?你说的如何向ui添加更多项是什么意思?我基本上有一个“获取所有数据”函数和一个“添加新数据”函数。我上面的代码与fetch all data函数配合得很好,但是当有post请求,并且新数据被添加到后端时,我希望ui也能接收到新数据。为此,您可以执行上面的操作,并使用Listview.builder()显示数据。我更新了我的答案,现在得到这个错误:一个构建函数返回null。