所以我得到了一个Flutter应用的模板,它使用HTTP get请求从一个网站上检索其所有数据。
我有下面的方法,得到resturaunts的列表。
Future<Stream<Restaurant>> getNearRestaurants(LocationData myLocation, LocationData areaLocation) async {
String _nearParams = '';
String _orderLimitParam = '';
if (myLocation != null && areaLocation != null) {
_orderLimitParam = 'orderBy=area&limit=5';
_nearParams = '&myLon=${myLocation.longitude}&myLat=${myLocation.latitude}&areaLon=${areaLocation.longitude}&areaLat=${areaLocation.latitude}';
}
final String url = '${GlobalConfiguration().getString('api_base_url')}restaurants?$_nearParams&$_orderLimitParam';
final client = new http.Client();
final streamedRest = await client.send(http.Request('get', Uri.parse(url)));
return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).expand((data) => (data as List)).map((data) {
return Restaurant.fromJSON(data);
});
}
但是当我把模板的url变量换成我自己的网站时 应用程序就卡住了,然后... 溪流 返回一个错误的404页面。
尝试了解决方案。
更新1.我的web.php是这样的
我的web.php是这样的 https:/pastebin.comQRG300uL. 这似乎与下面的建议相似
更新2:
我跑了 php artisan route::list 并显示所有的路由似乎都在那里。
| | POST | api/restaurant_reviews | restaurant_reviews.store | App\Http\Controllers\API\RestaurantReviewAPIController@store | api |
| | GET|HEAD | api/restaurant_reviews | restaurant_reviews.index | App\Http\Controllers\API\RestaurantReviewAPIController@index | api |
| | GET|HEAD | api/restaurant_reviews/create | restaurant_reviews.create | App\Http\Controllers\API\RestaurantReviewAPIController@create | api |
| | DELETE | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.destroy | App\Http\Controllers\API\RestaurantReviewAPIController@destroy | api |
| | GET|HEAD | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.show | App\Http\Controllers\API\RestaurantReviewAPIController@show | api |
| | PUT|PATCH | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.update | App\Http\Controllers\API\RestaurantReviewAPIController@update | api |
| | GET|HEAD | api/restaurant_reviews/{restaurant_review}/edit | restaurant_reviews.edit | App\Http\Controllers\API\RestaurantReviewAPIController@edit | api |
| | GET|HEAD | api/restaurants | restaurants.index | App\Http\Controllers\API\RestaurantAPIController@index | api |
| | POST | api/restaurants | restaurants.store | App\Http\Controllers\API\RestaurantAPIController@store | api |
| | GET|HEAD | api/restaurants/create | restaurants.create | App\Http\Controllers\API\RestaurantAPIController@create | api |
| | GET|HEAD | api/restaurants/{restaurant} | restaurants.show | App\Http\Controllers\API\RestaurantAPIController@show | api |
| | DELETE | api/restaurants/{restaurant} | restaurants.destroy | App\Http\Controllers\API\RestaurantAPIController@destroy | api |
| | PUT|PATCH | api/restaurants/{restaurant} | restaurants.update | App\Http\Controllers\API\RestaurantAPIController@update | api |
| | GET|HEAD | api/restaurants/{restaurant}/edit | restaurants.edit | App\Http\Controllers\API\RestaurantAPIController@edit | api |
| | POST | api/send_reset_link_email | | App\Http\Controllers\API\UserAPIController@sendResetLinkEmail | api |
| | GET|HEAD | api/settings | | App\Http\Controllers\API\UserAPIController@settings | api |
解决方法:
我改了很多东西之后,这个办法就奏效了 我把GET请求的网址从 "www.domain.comapiresturants "改成了 "www.domain.compublicapiresturants"
好吧,我不知道你的flutter代码,因为我使用不同的方法从api检索数据,但关于路线,我建议你像我这样做。
在web.php中,路由文件
//Api routes
Route::get('/company/api/fetch', 'ApiController@fetch_companies');
我的api控制器
public function fetch_companies()
{
$companies = Companies::all();
return response()->json($companies);
}
这样你就可以得到传递给路由companyapifetch的数据(你可以根据自己的需要进行修改),当进入这个页面的get请求时,它将回到 json
的请求处理。飘扬 我建议你把你的函数和类做得像在 文件
注意:我建议的扑动解决方案可能不适合您的情况,因为您使用的是 溪流 与这种类型的请求不同,因为这种类型的请求只运行一个,而Stream运行很多次,每次从服务器获得新的数据时,都会获得数据