mirror of
https://github.com/flutter/samples.git
synced 2025-11-12 15:58:32 +00:00
initial gallery
This commit is contained in:
49
cupertino_gallery/lib/widgets/action_sheet_page.dart
Normal file
49
cupertino_gallery/lib/widgets/action_sheet_page.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ActionSheetPage extends StatelessWidget {
|
||||
const ActionSheetPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Action Sheet'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoButton(
|
||||
child: const Text('Show Action Sheet'),
|
||||
onPressed: () {
|
||||
showCupertinoModalPopup<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => CupertinoActionSheet(
|
||||
title: const Text('Title'),
|
||||
message: const Text('Message'),
|
||||
actions: <CupertinoActionSheetAction>[
|
||||
CupertinoActionSheetAction(
|
||||
child: const Text('Action One'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
CupertinoActionSheetAction(
|
||||
child: const Text('Action Two'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
)
|
||||
],
|
||||
cancelButton: CupertinoActionSheetAction(
|
||||
isDefaultAction: true,
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
17
cupertino_gallery/lib/widgets/activity_indicator_page.dart
Normal file
17
cupertino_gallery/lib/widgets/activity_indicator_page.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ActivityIndicatorPage extends StatelessWidget {
|
||||
const ActivityIndicatorPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const CupertinoPageScaffold(
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text('Activity Indicator'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoActivityIndicator(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
36
cupertino_gallery/lib/widgets/alert_dialog_page.dart
Normal file
36
cupertino_gallery/lib/widgets/alert_dialog_page.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class AlertDialogPage extends StatelessWidget {
|
||||
const AlertDialogPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Alert Dialog'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoButton(
|
||||
child: const Text('Show Alert Dialog'),
|
||||
onPressed: () {
|
||||
showCupertinoDialog<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => CupertinoAlertDialog(
|
||||
title: const Text('Alert'),
|
||||
content: const Text('This is a sample alert dialog.'),
|
||||
actions: <CupertinoDialogAction>[
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
42
cupertino_gallery/lib/widgets/button_page.dart
Normal file
42
cupertino_gallery/lib/widgets/button_page.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ButtonPage extends StatelessWidget {
|
||||
const ButtonPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(middle: Text('Button')),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'CupertinoButton widget',
|
||||
style: CupertinoTheme.of(context).textTheme.textStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
CupertinoButton(child: const Text('Enabled'), onPressed: () {}),
|
||||
const SizedBox(height: 16),
|
||||
const CupertinoButton(onPressed: null, child: Text('Disabled')),
|
||||
const SizedBox(height: 32),
|
||||
Text(
|
||||
'CupertinoButton.filled widget',
|
||||
style: CupertinoTheme.of(context).textTheme.textStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
CupertinoButton.filled(
|
||||
child: const Text('Enabled'),
|
||||
onPressed: () {},
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
const CupertinoButton.filled(
|
||||
onPressed: null,
|
||||
child: Text('Disabled'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
42
cupertino_gallery/lib/widgets/context_menu_page.dart
Normal file
42
cupertino_gallery/lib/widgets/context_menu_page.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ContextMenuPage extends StatelessWidget {
|
||||
const ContextMenuPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(middle: Text('Context Menu')),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text('Long press to activate context menu:'),
|
||||
SizedBox(height: 16),
|
||||
SizedBox(
|
||||
width: 100,
|
||||
height: 100,
|
||||
child: CupertinoContextMenu(
|
||||
actions: <Widget>[
|
||||
CupertinoContextMenuAction(
|
||||
child: const Text('Action one'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
CupertinoContextMenuAction(
|
||||
child: const Text('Action two'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
child: Container(color: CupertinoColors.activeBlue),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
22
cupertino_gallery/lib/widgets/date_picker_page.dart
Normal file
22
cupertino_gallery/lib/widgets/date_picker_page.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class DatePickerPage extends StatelessWidget {
|
||||
const DatePickerPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Date Picker'),
|
||||
),
|
||||
child: Center(
|
||||
child: SizedBox(
|
||||
height: 200,
|
||||
child: CupertinoDatePicker(
|
||||
onDateTimeChanged: (DateTime newDate) {},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
62
cupertino_gallery/lib/widgets/list_tile_page.dart
Normal file
62
cupertino_gallery/lib/widgets/list_tile_page.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ListTilePage extends StatelessWidget {
|
||||
const ListTilePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(middle: Text('List Tile')),
|
||||
child: Center(
|
||||
child: ListView(
|
||||
children: [
|
||||
CupertinoListSection(
|
||||
children: [
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.info),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.person),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.wifi),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
],
|
||||
),
|
||||
CupertinoListSection(
|
||||
children: [
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.search),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.heart_fill),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
CupertinoListTile(
|
||||
title: Text('Title'),
|
||||
subtitle: Text('Subtitle'),
|
||||
leading: Icon(CupertinoIcons.ant),
|
||||
trailing: Icon(CupertinoIcons.forward),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
28
cupertino_gallery/lib/widgets/picker_page.dart
Normal file
28
cupertino_gallery/lib/widgets/picker_page.dart
Normal file
@@ -0,0 +1,28 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class PickerPage extends StatelessWidget {
|
||||
const PickerPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Picker'),
|
||||
),
|
||||
child: Center(
|
||||
child: SizedBox(
|
||||
height: 200,
|
||||
child: CupertinoPicker(
|
||||
itemExtent: 32,
|
||||
onSelectedItemChanged: (int index) {},
|
||||
children: const <Widget>[
|
||||
Text('One'),
|
||||
Text('Two'),
|
||||
Text('Three'),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
36
cupertino_gallery/lib/widgets/popup_surface_page.dart
Normal file
36
cupertino_gallery/lib/widgets/popup_surface_page.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class PopupSurfacePage extends StatelessWidget {
|
||||
const PopupSurfacePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Popup Surface'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoButton(
|
||||
child: const Text('Show Popup Surface'),
|
||||
onPressed: () {
|
||||
showCupertinoModalPopup<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return CupertinoPopupSurface(
|
||||
child: Container(
|
||||
color: CupertinoColors.white,
|
||||
width: 200,
|
||||
height: 200,
|
||||
child: const Center(
|
||||
child: Text('This is a popup surface.'),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
26
cupertino_gallery/lib/widgets/scrollbar_page.dart
Normal file
26
cupertino_gallery/lib/widgets/scrollbar_page.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class ScrollbarPage extends StatelessWidget {
|
||||
const ScrollbarPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ScrollController _controller = ScrollController();
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: CupertinoNavigationBar(middle: Text('Scrollbar')),
|
||||
child: CupertinoScrollbar(
|
||||
controller: _controller,
|
||||
child: ListView.separated(
|
||||
controller: _controller,
|
||||
itemCount: 100,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return CupertinoListTile(title: Text('Item $index'));
|
||||
},
|
||||
separatorBuilder: (BuildContext context, int index) {
|
||||
return Container(height: 1, color: CupertinoColors.opaqueSeparator);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
20
cupertino_gallery/lib/widgets/search_text_field_page.dart
Normal file
20
cupertino_gallery/lib/widgets/search_text_field_page.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class SearchTextFieldPage extends StatelessWidget {
|
||||
const SearchTextFieldPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const CupertinoPageScaffold(
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text('Search Text Field'),
|
||||
),
|
||||
child: Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: CupertinoSearchTextField(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
36
cupertino_gallery/lib/widgets/segmented_control_page.dart
Normal file
36
cupertino_gallery/lib/widgets/segmented_control_page.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class SegmentedControlPage extends StatefulWidget {
|
||||
const SegmentedControlPage({super.key});
|
||||
|
||||
@override
|
||||
State<SegmentedControlPage> createState() => _SegmentedControlPageState();
|
||||
}
|
||||
|
||||
class _SegmentedControlPageState extends State<SegmentedControlPage> {
|
||||
int _selectedIndex = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Segmented Control'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoSegmentedControl<int>(
|
||||
children: const <int, Widget>{
|
||||
0: Text('One'),
|
||||
1: Text('Two'),
|
||||
2: Text('Three'),
|
||||
},
|
||||
onValueChanged: (int val) {
|
||||
setState(() {
|
||||
_selectedIndex = val;
|
||||
});
|
||||
},
|
||||
groupValue: _selectedIndex,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
31
cupertino_gallery/lib/widgets/slider_page.dart
Normal file
31
cupertino_gallery/lib/widgets/slider_page.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class SliderPage extends StatefulWidget {
|
||||
const SliderPage({super.key});
|
||||
|
||||
@override
|
||||
State<SliderPage> createState() => _SliderPageState();
|
||||
}
|
||||
|
||||
class _SliderPageState extends State<SliderPage> {
|
||||
double _value = 0.5;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Slider'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoSlider(
|
||||
value: _value,
|
||||
onChanged: (double value) {
|
||||
setState(() {
|
||||
_value = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class SlidingSegmentedControlPage extends StatefulWidget {
|
||||
const SlidingSegmentedControlPage({super.key});
|
||||
|
||||
@override
|
||||
State<SlidingSegmentedControlPage> createState() =>
|
||||
_SlidingSegmentedControlPageState();
|
||||
}
|
||||
|
||||
class _SlidingSegmentedControlPageState
|
||||
extends State<SlidingSegmentedControlPage> {
|
||||
int? _groupValue = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Sliding Segmented Control'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoSlidingSegmentedControl<int>(
|
||||
children: const <int, Widget>{
|
||||
0: Text('One'),
|
||||
1: Text('Two'),
|
||||
2: Text('Three'),
|
||||
},
|
||||
onValueChanged: (int? value) {
|
||||
setState(() {
|
||||
_groupValue = value;
|
||||
});
|
||||
},
|
||||
groupValue: _groupValue,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
31
cupertino_gallery/lib/widgets/switch_page.dart
Normal file
31
cupertino_gallery/lib/widgets/switch_page.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class SwitchPage extends StatefulWidget {
|
||||
const SwitchPage({super.key});
|
||||
|
||||
@override
|
||||
State<SwitchPage> createState() => _SwitchPageState();
|
||||
}
|
||||
|
||||
class _SwitchPageState extends State<SwitchPage> {
|
||||
bool _value = true;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Switch'),
|
||||
),
|
||||
child: Center(
|
||||
child: CupertinoSwitch(
|
||||
value: _value,
|
||||
onChanged: (bool value) {
|
||||
setState(() {
|
||||
_value = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
22
cupertino_gallery/lib/widgets/text_field_page.dart
Normal file
22
cupertino_gallery/lib/widgets/text_field_page.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class TextFieldPage extends StatelessWidget {
|
||||
const TextFieldPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const CupertinoPageScaffold(
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text('Text Field'),
|
||||
),
|
||||
child: Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: CupertinoTextField(
|
||||
placeholder: 'Enter text',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
58
cupertino_gallery/lib/widgets/text_theme_page.dart
Normal file
58
cupertino_gallery/lib/widgets/text_theme_page.dart
Normal file
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class TextThemePage extends StatelessWidget {
|
||||
const TextThemePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Text Theme'),
|
||||
),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'This is the default text style',
|
||||
style: CupertinoTheme.of(context).textTheme.textStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the action text style',
|
||||
style: CupertinoTheme.of(context).textTheme.actionTextStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the tab label text style',
|
||||
style: CupertinoTheme.of(context).textTheme.tabLabelTextStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the nav title text style',
|
||||
style: CupertinoTheme.of(context).textTheme.navTitleTextStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the nav large title text style',
|
||||
style: CupertinoTheme.of(context)
|
||||
.textTheme
|
||||
.navLargeTitleTextStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the picker text style',
|
||||
style: CupertinoTheme.of(context).textTheme.pickerTextStyle,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'This is the date time picker text style',
|
||||
style:
|
||||
CupertinoTheme.of(context).textTheme.dateTimePickerTextStyle,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
22
cupertino_gallery/lib/widgets/time_picker_page.dart
Normal file
22
cupertino_gallery/lib/widgets/time_picker_page.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class TimePickerPage extends StatelessWidget {
|
||||
const TimePickerPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Time Picker'),
|
||||
),
|
||||
child: Center(
|
||||
child: SizedBox(
|
||||
height: 200,
|
||||
child: CupertinoTimerPicker(
|
||||
onTimerDurationChanged: (Duration newDuration) {},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user