Future第一次返回null



下面是一个使用Google Place:的类

class PlaceProvider extends ChangeNotifier {
NearBySearchResponse _places;
NearBySearchResponse get getPlaces => _places;
GooglePlace googlePlace;
PlaceProvider() {
loadAPI();
}
void loadAPI() async {
await DotEnv.load(fileName: '.env');
googlePlace = GooglePlace(DotEnv.env['API_KEY']);
}
Future<void> loadPlaces() async {
print('We are here');
_places = await googlePlace.search.getNearBySearch(
Location(lat: 40.79, lng: -73.96), 1500,
type: "restaurant", keyword: "hamburger");.
notifyListeners();
}
}

现在,当我调用loadPlaces((时,它总是在第一次时使_places为null。第二次我叫它,它运行得很好。我错过了什么?

这是使用上述类的类:

class SearchPage extends StatelessWidget {
const SearchPage({Key key}) : super(key: key);
void testPlaces(BuildContext context) {
Provider.of<PlaceProvider>(context, listen: false).loadPlaces();
}
@override
Widget build(BuildContext context) {
NearBySearchResponse places = Provider.of<PlaceProvider>(context).getPlaces;
return Column(
children: [
Text('Search Page'),
ElevatedButton(
onPressed: () {
testPlaces(context);
},
child: Text('Test'),
),
Expanded(
child: places == null
? Container(child: CupertinoActivityIndicator(radius: 50.0))
: ListView.builder(
itemCount: places.results.length,
itemBuilder: (context, index) {
return Container(
color: Colors.grey[(index * 200) % 400],
child: Center(
child: Text(
places.results[index].name,
style: TextStyle(fontSize: 18.0),
),
),
);
},
),
),
],
);
}
}

我已经在这里添加了整个应用程序。正如我所提到的,当第一次按下测试按钮时,_places的值保持为空。第二次,该值很好,并且ListView填充正确。

您必须为所有两个进程使用一个变量:在事件按钮中,调用变量:代码:

class SearchPage extends StatelessWidget {
const SearchPage({Key key}) : super(key: key);

@override
Widget build(BuildContext context) {
NearBySearchResponse places = Provider.of<PlaceProvider>(context,listen: false).getPlaces;
return Column(
children: [
Text('Search Page'),
ElevatedButton(
onPressed: () {
places.loadPlaces();

},
child: Text('Test'),
),
Expanded(
child: places == null
? Container(child: CupertinoActivityIndicator(radius: 50.0))
: ListView.builder(
itemCount: places.results.length,
itemBuilder: (context, index) {
return Container(
color: Colors.grey[(index * 200) % 400],
child: Center(
child: Text(
places.results[index].name,
style: TextStyle(fontSize: 18.0),
),
),
);
},
),
),
],
);
}
}

我希望我帮了你

最新更新