Flutter HTTP调用永远不会发出颤振 编辑
移动代码修复了这个问题,但我现在收到了这个错误。 我试图调试一个问题,但我的http调用从未被命中。我不得不重新设计wiget,使它有状态,所以我想我错过了一些东西。我从来没有对屏幕加载进行过http调用,我们通常是通过点击按钮来实现的 代码如下:Flutter HTTP调用永远不会发出颤振 编辑,flutter,dart,Flutter,Dart,移动代码修复了这个问题,但我现在收到了这个错误。 我试图调试一个问题,但我的http调用从未被命中。我不得不重新设计wiget,使它有状态,所以我想我错过了一些东西。我从来没有对屏幕加载进行过http调用,我们通常是通过点击按钮来实现的 代码如下: class FlutterReduxApp extends StatefulWidget { final User user; const FlutterReduxApp({Key key, @required this.user}) :
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;
}
类flatterReduxapp扩展StatefulWidget{
最终用户;
constflutreduxapp({Key-Key,@required this.user}):super(Key:Key);
@凌驾
State createState()=>\u flatterReduxappState(用户);
}
类ReduxappState扩展状态{
最终用户;
最终存储=存储(stateReducer,
初始状态:CategoryState([
如果(features.isCheckInOn)HomeCategory(0,Icons.check,Colors.blue[800],“签入”,[Task(0,“签入”,true),]),
HomeCategory(1,Icons.chat_bubble,Colors.red,“论坛”,[任务(1,“问题”,true),]),
HomeCategory(2,Icons.star,Colors.blue[200],“Goals”,[Task(2,“Goals”,true),]),
HomeCategory(3,Icons.monetization\u 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],“我的日子和日历”,[Task(4,“Events”,false),],
HomeCategory(6个,图标。检查圆\轮廓,颜色。teal[700],“签出”,“任务(4,“任务”,错误),]),
HomeCategory(7,Icons.dock,Colors.grey[700],“Connect”,[Task(4,“Tasks”,false),]),
HomeCategory(8,Icons.local_pharmacy,Colors.green,“我的药物”,“任务(4,“任务”,false)”),
HomeCategory(9,Icons.settings,Colors.yellow[800],“settings”,任务(4,“Tasks”,false),),
]),
);
_flatterReduxappState(this.user);
静态特征;
@凌驾
void initState(){
super.initState();
features=getFeatureStatus(user.userId)作为功能;
}
HTTP呼叫
Future getFeatureStatus(字符串用户ID)异步{
特征(u特征),;
最后答复=
等待http.post('http://url/api/FeaturesGet',
标题:{“内容类型”:“应用程序/json”,
'Accept':'application/json',},
body:json.encode({'userID':userID}));
//如果对服务器的调用成功,则解析JSON
_features=features.fromJson(json.decode(response.body));
返回功能;
}
根本没有断点被命中
getFeatureStatus
返回一个未来
而不是功能
,因此您的分配(features=getFeatureStatus(user.userId)作为功能
)类型错误。您需要等待getFeatureStatus
返回的Future
或使用Future。然后注册一个回调,在Future完成时设置功能
另外,您正在存储
的初始值设定项中引用功能
,这可能会导致问题,因为当您创建\u flatterReduxappState
的实例时,它很可能是空的
。这将导致您在if(features.isCheckInOn)处获得空点异常
在代码中。在代码中没有HTTP调用。它的features=getFeatureStatus(user.userId)作为功能;我将编辑并添加它。我甚至无法在任何地方找到断点来命中你的post调用似乎没有任何问题。你已经仔细检查了你的API是否按预期工作?因为它是你自己的API,只有你可以测试它。Features.initState()如何被调用?是的,我想我发现了问题:在创建features对象之前调用它。如果(features.isCheckInOn)HomeCategory(0,Icons.check,Colors.blue[800],“签入”,[任务(0,“签入”,true),],
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;
}