Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 将值传递到bloc存储库_Flutter_Dart - Fatal编程技术网

Flutter 将值传递到bloc存储库

Flutter 将值传递到bloc存储库,flutter,dart,Flutter,Dart,试图在《颤栗》中研究集团。我有bloc、events和存储库文件。我知道如何在页面之间传递数据,但无法将参数传递到存储库 我需要向存储库传递一个参数,以便对数据库进行查询。例如,类别id 按类别分类的产品存储库。dart import 'package:billfort/models/products_model.dart'; import 'package:billfort/strings/strings.dart'; import 'package:http/http.dart' as ht

试图在《颤栗》中研究集团。我有bloc、events和存储库文件。我知道如何在页面之间传递数据,但无法将参数传递到存储库 我需要向存储库传递一个参数,以便对数据库进行查询。例如,类别id

按类别分类的产品存储库。dart

import 'package:billfort/models/products_model.dart';
import 'package:billfort/strings/strings.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

abstract class ProductsByCategoryRepository {
  Future<List<HydraMember>> getProducts();
}

class ProductsByCategoryRepositoryImpl implements ProductsByCategoryRepository {

  @override
  Future<List<HydraMember>> getProducts() async {
    var response = await http.get(Uri.parse("${AppStrings.api}products?category=here need pass id"));
    if (response.statusCode == 200) {
      var data = json.decode(response.body);
      List<HydraMember> products = Products.fromJson(data).hydraMember;
      return products;
    } else {
      throw Exception();
    }
  }

}
import 'package:bloc/bloc.dart';
import 'package:billfort/bloc/products_event.dart';
import 'package:billfort/bloc/products_state.dart';
import 'package:billfort/models/products_model.dart';
import 'package:billfort/repository/products_repository.dart';
import 'package:meta/meta.dart';

class ProductsBloc extends Bloc < ProductsEvent, ProductsState > {

    ProductsRepository repository;

    ProductsBloc({
        @required this.repository
    }): super(null);

    @override
    // TODO: implement initialState
    ProductsState get initialState => ProductsInitialState();

    @override
    Stream < ProductsState > mapEventToState(ProductsEvent event) async *{
        if (event is FetchProductsEvent) {
            yield ProductsLoadingState();
            try {
                List < HydraMember > products = await repository.getProducts();
                yield ProductsLoadedState(products: products);
            } catch (e) {
                yield ProductsErrorState(message: e.toString());
            }
        }
    }

}
import'包:billfort/models/products_model.dart';
导入“package:billfort/strings/strings.dart”;
将“package:http/http.dart”导入为http;
导入“dart:convert”;
抽象类ProductsByCategoryRepository{
未来产品();
}
类ProductsByCategoryRepositoryImpl实现ProductsByCategoryRepository{
@凌驾
Future getProducts()异步{
var response=wait http.get(Uri.parse(${AppStrings.api}products?category=here need pass id));
如果(response.statusCode==200){
var data=json.decode(response.body);
List products=products.fromJson(data).hydraMember;
退货产品;
}否则{
抛出异常();
}
}
}
产品\u-bloc.dart

import 'package:billfort/models/products_model.dart';
import 'package:billfort/strings/strings.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

abstract class ProductsByCategoryRepository {
  Future<List<HydraMember>> getProducts();
}

class ProductsByCategoryRepositoryImpl implements ProductsByCategoryRepository {

  @override
  Future<List<HydraMember>> getProducts() async {
    var response = await http.get(Uri.parse("${AppStrings.api}products?category=here need pass id"));
    if (response.statusCode == 200) {
      var data = json.decode(response.body);
      List<HydraMember> products = Products.fromJson(data).hydraMember;
      return products;
    } else {
      throw Exception();
    }
  }

}
import 'package:bloc/bloc.dart';
import 'package:billfort/bloc/products_event.dart';
import 'package:billfort/bloc/products_state.dart';
import 'package:billfort/models/products_model.dart';
import 'package:billfort/repository/products_repository.dart';
import 'package:meta/meta.dart';

class ProductsBloc extends Bloc < ProductsEvent, ProductsState > {

    ProductsRepository repository;

    ProductsBloc({
        @required this.repository
    }): super(null);

    @override
    // TODO: implement initialState
    ProductsState get initialState => ProductsInitialState();

    @override
    Stream < ProductsState > mapEventToState(ProductsEvent event) async *{
        if (event is FetchProductsEvent) {
            yield ProductsLoadingState();
            try {
                List < HydraMember > products = await repository.getProducts();
                yield ProductsLoadedState(products: products);
            } catch (e) {
                yield ProductsErrorState(message: e.toString());
            }
        }
    }

}
import'包:bloc/bloc.dart';
导入“package:billfort/bloc/products_event.dart”;
进口“包装:billfort/bloc/products_state.dart”;
进口“包装:billfort/models/products_model.dart”;
导入“package:billfort/repository/products_repository.dart”;
导入“package:meta/meta.dart”;
类别ProductsBloc扩展了集团{
产品存储库;
ProductsBloc({
@此存储库是必需的
}):super(空);
@凌驾
//TODO:实现初始状态
ProductsState get initialState=>ProductsSinitialState();
@凌驾
流mapEventToState(ProductsEvent事件)异步*{
if(事件为FetchProductsEvent){
产量产品sloadingstate();
试一试{
Listproducts=wait repository.getProducts();
产量产品等级(产品:产品);
}捕获(e){
yield ProductsErrorState(消息:e.toString());
}
}
}
}

如果获取产品的过程需要输入,那么类
FetchProductsEvent
应该有一个提供输入的属性,就像state类
ProductsLoadedState
有一个提供输出的
products
属性一样


也就是说,您是否在没有真正了解更改的情况下升级了bloc包?为什么要将
null
传递给基本构造函数,但仍然为
initialState
提供重载?您的基本构造函数应该直接获取
ProductsInitialState()
,并且应该删除重载。如果它没有为您发出警告,您可能需要启动编译器设置,以便编译器更好地指导您。

我现在删除了ProductsBloc中的super(null)。在ide中有警告但工作正常如果同一个bloc category实例的id保持不变,则将其传递给bloc构造函数,否则正如@nvoigt编写的那样,使用
FetchProductsEvent