Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 颤振与复飞_Flutter_Dart_Redux - Fatal编程技术网

Flutter 颤振与复飞

Flutter 颤振与复飞,flutter,dart,redux,Flutter,Dart,Redux,我写了一个使用Redux管理我的状态的应用程序。我不知道为什么,但当我启动我的应用程序时,我的控制台会向我抛出此类错误: The getter 'length' was called on null. Receiver: null Tried calling: length 我只是一个使用redux的初学者,所以如果这只是一个小的、有趣的错误,请原谅:) 我将代码粘贴到下面: 订单号 class OrdersScreen extends StatelessWidget{ void hand

我写了一个使用Redux管理我的状态的应用程序。我不知道为什么,但当我启动我的应用程序时,我的控制台会向我抛出此类错误:

The getter 'length' was called on null.
Receiver: null
Tried calling: length
我只是一个使用redux的初学者,所以如果这只是一个小的、有趣的错误,请原谅:)

我将代码粘贴到下面: 订单号

class OrdersScreen extends StatelessWidget{
  void handleInitialBuild(OrdersScreenProps props){
    props.getOrders();
  }

  @override
  Widget build(BuildContext context){
    return StoreConnector<AppState, OrdersScreenProps>(
      converter: (store) => mapStateToProps(store),
      onInitialBuild: (props) => this.handleInitialBuild(props),
      builder: (context, props){
        List<Order> data = props.listResponse.data;
        bool loading = props.listResponse.loading;

        Widget body;
        if(loading){
          body = Center(
            child: CircularProgressIndicator(),
          );
        }else{
          body = ListView.separated(
            padding: const EdgeInsets.all(16.0),
            itemCount: data.length,
            separatorBuilder: (context, index) => Divider(),
            itemBuilder: (context, i) {
              Order order = data[i];

              return ListTile(
                title: Text(
                  order.title,
                ),
                onTap: () {
                  props.getOrderDetails(order.id);
                  Navigator.pushNamed(context, AppRoutes.orderDetails);
                },
              );
            },
          );
        }
        return Scaffold(
          appBar: AppBar(
            title: Text('Orders list'),
          ),
          body: body,
        );
      },
    );
  }
}

class OrdersScreenProps {
  final Function getOrders;
  final Function getOrderDetails;
  final ListOrdersState listResponse;

  OrdersScreenProps({
    this.getOrders,
    this.listResponse,
    this.getOrderDetails,
  });
}

OrdersScreenProps mapStateToProps(Store<AppState> store) {
  return OrdersScreenProps(
    listResponse: store.state.order.list,
    getOrders: () => store.dispatch(getOrders()),
    getOrderDetails: (int id) => store.dispatch(getOrderDetails(id)),
  );
}
订单号

OrderState orderResucer(OrderState state, FSA action){
  OrderState newState = state;

  switch (action.type) {
    case LIST_ORDERS_REQUEST:
      newState.list.error = null;
      newState.list.loading = true;
      newState.list.data = null;
      return newState;

    case LIST_ORDERS_SUCCESS:
      newState.list.error = null;
      newState.list.loading = false;
      newState.list.data = ordersFromJSONStr(action.payload);
      return newState;

    case LIST_ORDERS_FAILURE:
      newState.list.error = action.payload;
      newState.list.loading = false;
      newState.list.data = null;
      return newState;


    case GET_ORDERS_DETAILS_REQUEST:
      newState.details.error = null;
      newState.details.loading = true;
      newState.details.data = null;
      return newState;

    case GET_ORDERS_DETAILS_SUCCESS:
      newState.details.error = null;
      newState.details.loading = false;
      newState.details.data = orderFromJSONStr(action.payload);
      return newState;

    case GET_ORDERS_DETAILS_FAILURE:
      newState.details.error = action.payload;
      newState.details.loading = false;
      newState.details.data = null;
      return newState;

    default:
      return newState;
  }
}

List<Order> ordersFromJSONStr(dynamic payload) {
  Iterable jsonArray = json.decode(payload);
  return jsonArray.map((j) => Order.fromJSON(j)).toList();
}

OrderDetails orderFromJSONStr(dynamic payload) {
  return OrderDetails.fromJSON(json.decode(payload));
}
OrderState orderResucer(OrderState,FSA操作){
OrderState newState=状态;
开关(动作类型){
案例列表\u订单\u请求:
newState.list.error=null;
newState.list.load=true;
newState.list.data=null;
返回新闻状态;
案例列表\u订单\u成功:
newState.list.error=null;
newState.list.load=false;
newState.list.data=ordersFromJSONStr(action.payload);
返回新闻状态;
案例列表\u订单\u失败:
newState.list.error=action.payload;
newState.list.load=false;
newState.list.data=null;
返回新闻状态;
案例获取\订单\详细信息\请求:
newState.details.error=null;
newState.details.loading=true;
newState.details.data=null;
返回新闻状态;
案例获取\订单\详细信息\成功:
newState.details.error=null;
newState.details.loading=false;
newState.details.data=orderFromJSONStr(action.payload);
返回新闻状态;
案例获取\订单\详细信息\失败:
newState.details.error=action.payload;
newState.details.loading=false;
newState.details.data=null;
返回新闻状态;
违约:
返回新闻状态;
}
}
列表ordersFromJSONStr(动态有效负载){
Iterable jsonArray=json.decode(有效载荷);
返回jsonArray.map((j)=>Order.fromJSON(j)).toList();
}
OrderDetails orderFromJSONStr(动态负载){
返回OrderDetails.fromJSON(json.decode(payload));
}

您需要做的第一件事是对减速器执行操作,并调用相关操作以更改状态

TypedReducer<OrderState, FSA>(orderReducer>); //pass it your reducers in store
TypedReducer(orderReducer>)//把它传给你的减速机
触发相关行动

ThunkAction<AppState> getOrders() => (Store<AppState> store) ={
    store.dispatch(FSA(type: LIST_ORDERS_REQUEST);
    store.dispatch(getOrdersRequest().then((orders){
     store.dispatch(FSA(type: LIST_ORDERS_REQUEST);
}), onError(e){
     store.dispatch(FSA(type: LIST_ORDERS_FAILURE);
  }
};
ThunkAction getOrders()=>(存储)={
存储调度(FSA(类型:列表、订单和请求);
store.dispatch(getOrdersRequest()。然后((订单){
存储调度(FSA(类型:列表、订单和请求);
}),onError(e){
存储调度(FSA(类型:列表\订单\失败);
}
};
getOrders()应该返回future。执行ThunkAction的全部目的是返回一个函数,一旦其中的异步函数完成,该函数就会分派常规的同步操作

OrderState orderResucer(OrderState state, FSA action){
  OrderState newState = state;

  switch (action.type) {
    case LIST_ORDERS_REQUEST:
      newState.list.error = null;
      newState.list.loading = true;
      newState.list.data = null;
      return newState;

    case LIST_ORDERS_SUCCESS:
      newState.list.error = null;
      newState.list.loading = false;
      newState.list.data = ordersFromJSONStr(action.payload);
      return newState;

    case LIST_ORDERS_FAILURE:
      newState.list.error = action.payload;
      newState.list.loading = false;
      newState.list.data = null;
      return newState;


    case GET_ORDERS_DETAILS_REQUEST:
      newState.details.error = null;
      newState.details.loading = true;
      newState.details.data = null;
      return newState;

    case GET_ORDERS_DETAILS_SUCCESS:
      newState.details.error = null;
      newState.details.loading = false;
      newState.details.data = orderFromJSONStr(action.payload);
      return newState;

    case GET_ORDERS_DETAILS_FAILURE:
      newState.details.error = action.payload;
      newState.details.loading = false;
      newState.details.data = null;
      return newState;

    default:
      return newState;
  }
}

List<Order> ordersFromJSONStr(dynamic payload) {
  Iterable jsonArray = json.decode(payload);
  return jsonArray.map((j) => Order.fromJSON(j)).toList();
}

OrderDetails orderFromJSONStr(dynamic payload) {
  return OrderDetails.fromJSON(json.decode(payload));
}
TypedReducer<OrderState, FSA>(orderReducer>); //pass it your reducers in store
ThunkAction<AppState> getOrders() => (Store<AppState> store) ={
    store.dispatch(FSA(type: LIST_ORDERS_REQUEST);
    store.dispatch(getOrdersRequest().then((orders){
     store.dispatch(FSA(type: LIST_ORDERS_REQUEST);
}), onError(e){
     store.dispatch(FSA(type: LIST_ORDERS_FAILURE);
  }
};