我是Dart/Flutter的新手,我见过examples,其中setState()
是必需的。在下面的代码中,_bottomSheetController
用于关闭底部工作表,目前没有在setState()
内部更新。由于它是一个控制器,因此它不保存任何需要在UI中显示的值-控制器仅用于调用_bottomSheetController?.close()
,显然(?)导致部件树被重建。代码按预期工作,但我不知道是否应该使用setState()
?
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: SafeArea(
child: MapExample(),
),
),
);
}
}
class MapExample extends StatefulWidget {
const MapExample({super.key});
@override
State<MapExample> createState() => _MapExampleState();
}
class _MapExampleState extends State<MapExample> {
PersistentBottomSheetController<void>? _bottomSheetController;
@override
Widget build(BuildContext context) {
return GoogleMap(
onTap: (position) {
if (_bottomSheetController != null) {
_bottomSheetController?.close();
_bottomSheetController = null;
}
},
markers: {
Marker(
markerId: const MarkerId('0'),
position: const LatLng(0, 0),
onTap: () {
_bottomSheetController = Scaffold.of(context).showBottomSheet<void>(
(BuildContext context) {
return const SizedBox(
height: 200,
child: Center(
child: Text('BottomSheet'),
),
);
},
);
},
)
},
initialCameraPosition: const CameraPosition(
target: LatLng(0, 0),
zoom: 11.0,
),
);
}
}
1条答案
按热度按时间rwqw0loc1#
在这种情况下,您不需要调用setState。