【问题标题】:HTTP call is never made flutterHTTP 调用永远不会颤抖
【发布时间】:2020-01-13 18:55:03
【问题描述】:

编辑

移动代码修复了问题,但我现在收到此错误。

我正在尝试调试一个问题,但我的 http 调用从未被命中。我不得不重新设计 wiget 以使其具有状态,所以我想我错过了一些东西。我从来没有在屏幕加载时进行过 http 调用,我们通常在按钮点击中进行。

代码如下:

class FlutterReduxApp extends StatefulWidget {
  final User user;

 const FlutterReduxApp({Key key, @required this.user}) : super(key: key);

   @override
   State<StatefulWidget> createState() => _FlutterReduxAppState(user);
}


class _FlutterReduxAppState extends State<FlutterReduxApp> {
final User user;

 final store = Store<CategoryState>(stateReducer,
     initialState: CategoryState([

    if(features.isCheckInOn) HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]),
    HomeCategory(1, Icons.chat_bubble, Colors.red, "Forums", [ Task(1, "Questions", true),]),
    HomeCategory(2, Icons.star, Colors.blue[200], "Goals", [ Task(2, "Goals", true),]),
    HomeCategory(3, Icons.monetization_on, Colors.orange[700], "Budget", [ Task(3, "Budget", true),]),
    HomeCategory(4, Icons.shopping_basket, Colors.brown[300], "Shopping", [ Task(4, "Items", true),]),
    HomeCategory(5, Icons.calendar_today, Colors.purple[900], "My Day & Calendar", [ Task(4, "Events", false),]),
    HomeCategory(6, Icons.check_circle_outline, Colors.teal[700], "Check Out", [ Task(4, "Tasks", false),]),
    HomeCategory(7, Icons.dock, Colors.grey[700], "Connect", [ Task(4, "Tasks", false),]),
    HomeCategory(8, Icons.local_pharmacy, Colors.green, "My Medication", [ Task(4, "Tasks", false),]),
    HomeCategory(9, Icons.settings, Colors.yellow[800], "Settings", [ Task(4, "Tasks", false),]),
  ]),

  );

   _FlutterReduxAppState(this.user);


 static Features features;
  @override
  void initState () {
   super.initState();
   features = getFeatureStatus(user.userId) as Features;


}

HTTP 调用

  Future<Features> getFeatureStatus(String userID) async {

   Features _features;

   final response =
  await http.post('http://url/api/FeaturesGet',
  headers: {"Content-Type": "application/json", 
             'Accept': 'application/json',},
  body: json.encode({'userID' : userID }));

// If the call to the server was successful, parse the JSON 

      _features = Features.fromJson(json.decode(response.body));



      return _features;



 } 

根本没有遇到断点

【问题讨论】:

  • 您的代码中没有 HTTP 调用。
  • 它的特征 = getFeatureStatus(user.userId) 作为特征;我会编辑它并添加它。我什至无法在任何地方设置断点
  • 您的邮寄电话似乎没有任何问题。您已经仔细检查过您的 API 是否按预期工作?既然是你自己的API,只有你自己可以测试。
  • features.initState() 是如何被调用的?
  • 是的,我想我发现了问题:在创建功能对象之前调用它。 if(features.isCheckInOn) HomeCategory(0, Icons.check, Colors.blue[800], "签入", [Task(0, "签入", true),]),

标签: flutter dart


【解决方案1】:

getFeatureStatus 返回 Future&lt;Features&gt; 而不是 Feature,因此您的分配 (features = getFeatureStatus(user.userId) as Features) 类型错误。您需要 await getFeatureStatus 返回的 Future&lt;Features&gt; 或使用 Future.then 注册一个回调,在未来完成时设置 features

此外,您在 store 的初始化程序中引用了 features,这可能会导致问题,因为当您创建 _FlutterReduxAppState 的实例时,它很可能是 null。这将导致您在代码中的if(features.isCheckInOn) 处获得NullPointerException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2014-11-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2012-10-27
    相关资源
    最近更新 更多