cupertino_setting_control 1.1.0 cupertino_setting_control: ^1.1.0 copied to clipboard
Wrapper for multiple kind of Cupertino Inputs (Textfield, Dropdown, Slider)
import 'package:cupertino_setting_control/cupertino_setting_control.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() => runApp(ExampleApp());
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyHome(),
);
}
}
class MyHome extends StatefulWidget {
@override
_MyHomeState createState() => new _MyHomeState();
}
class _MyHomeState extends State<MyHome> {
bool _chatResult = true;
String _searchAreaResult = 'Germany';
bool _titleOnTop = false;
@override
Widget build(BuildContext context) {
final titleOnTopSwitch = SettingRow(
rowData: SettingsYesNoConfig(
initialValue: _titleOnTop, title: 'Title on top'),
config: const SettingsRowConfiguration(showAsSingleSetting: true),
onSettingDataRowChange: (newVal) => setState(() {
_titleOnTop = newVal;
}));
final legalStuff = new Material(
color: Colors.transparent,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Padding(
padding: const EdgeInsets.fromLTRB(25.0, 5.0, 25.0, 5.0),
child: const Text('Legal',
style: TextStyle(
color: CupertinoColors.systemBlue,
fontWeight: FontWeight.bold,
fontSize: 15.0,
))),
new SettingRow(
config: SettingsRowConfiguration(
showTitleLeft: !_titleOnTop, showTopTitle: _titleOnTop),
rowData: SettingsURLConfig(
title: 'Privacy', url: 'https://yourprivacystuff.de'),
onSettingDataRowChange: () => {},
),
SizedBox(height: _titleOnTop ? 10.0 : 0.0),
new SettingRow(
config: SettingsRowConfiguration(
showTitleLeft: !_titleOnTop, showTopTitle: _titleOnTop),
rowData: SettingsButtonConfig(
title: 'Licenses',
tick: true,
functionToCall: () => showLicensePage(
context: context,
applicationName: 'example',
applicationVersion: 'v1.1',
useRootNavigator: true)),
onSettingDataRowChange: () => {},
),
],
),
);
final privacySettings = new Material(
color: Colors.transparent,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Padding(
padding: EdgeInsets.fromLTRB(25.0, 5.0, 25.0, 5.0),
child: const Text(
'Privacy Settings',
style: TextStyle(
color: CupertinoColors.systemBlue,
fontWeight: FontWeight.bold,
fontSize: 15.0,
),
)),
new SettingRow(
config: SettingsRowConfiguration(
showTitleLeft: !_titleOnTop, showTopTitle: _titleOnTop),
rowData: SettingsYesNoConfig(
initialValue: _chatResult, title: 'Allow Chat'),
onSettingDataRowChange: onChatSettingChange,
),
],
),
);
final profileSettingsTile = new Material(
color: Colors.transparent,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Padding(
padding: EdgeInsets.fromLTRB(25.0, 5.0, 25.0, 5.0),
child: const Text(
'Profile',
style: TextStyle(
color: CupertinoColors.systemBlue,
fontSize: 15.0,
fontWeight: FontWeight.bold,
),
)),
new SettingRow(
rowData: SettingsDropDownConfig(
title: 'User Area',
initialKey: _searchAreaResult,
choices: {
'Germany': 'Germany',
'Spain': 'Spain',
'France': 'France'
},
onDropdownFinished: () => {}),
onSettingDataRowChange: onSearchAreaChange,
config: SettingsRowConfiguration(
showAsTextField: false,
showTitleLeft: !_titleOnTop,
showTopTitle: _titleOnTop,
showAsSingleSetting: false),
),
SizedBox(height: _titleOnTop ? 10.0 : 0.0),
new SettingRow(
rowData: SettingsSliderConfig(
title: 'Age',
from: 18,
to: 120,
initialValue: 20,
justIntValues: true,
unit: ' years',
),
onSettingDataRowChange: (double resultVal) {},
config: SettingsRowConfiguration(
showAsTextField: false,
showTitleLeft: !_titleOnTop,
showTopTitle: _titleOnTop,
showAsSingleSetting: false),
),
SizedBox(height: _titleOnTop ? 10.0 : 0.0),
new SettingRow(
rowData: SettingsSliderFromToConfig(
title: 'Weight',
from: 40,
to: 120,
initialFrom: 50,
initialTo: 80,
justIntValues: true,
unit: 'kg',
),
onSettingDataRowChange: (List<double> resultVals) {},
config: SettingsRowConfiguration(
showAsTextField: false,
showTitleLeft: !_titleOnTop,
showTopTitle: _titleOnTop,
showAsSingleSetting: false),
),
SizedBox(height: _titleOnTop ? 10.0 : 0.0),
new SettingRow(
rowData: SettingsTextFieldConfig(
title: 'Name',
initialValue: 'Chris',
),
onSettingDataRowChange: (String resultVal) {},
config: SettingsRowConfiguration(
showAsTextField: false,
showTitleLeft: !_titleOnTop,
showTopTitle: _titleOnTop,
showAsSingleSetting: false),
),
],
),
);
final modifyProfileTile = new Material(
color: Colors.transparent,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Padding(
padding: EdgeInsets.fromLTRB(25.0, 5.0, 25.0, 5.0),
child: const Text(
'Profile Options',
style: TextStyle(
color: CupertinoColors.systemBlue,
fontWeight: FontWeight.bold,
fontSize: 15.0,
),
)),
SettingRow(
rowData: SettingsButtonConfig(
title: 'Delete Profile',
tick: true,
functionToCall: () {},
),
style: const SettingsRowStyle(
backgroundColor: CupertinoColors.lightBackgroundGray),
config: SettingsRowConfiguration(
showAsTextField: false,
showTitleLeft: !_titleOnTop,
showTopTitle: _titleOnTop,
showAsSingleSetting: false),
onSettingDataRowChange: () => {},
)
]));
final List<Widget> widgetList = [
titleOnTopSwitch,
const SizedBox(height: 15.0),
profileSettingsTile,
const SizedBox(height: 15.0),
privacySettings,
const SizedBox(height: 15.0),
legalStuff,
const SizedBox(height: 15.0),
Row(children: [Expanded(child: modifyProfileTile)]),
];
return new Scaffold(
body: Padding(
padding: const EdgeInsets.fromLTRB(0, 50, 0, 0),
child: ListView(
children: widgetList,
physics: const AlwaysScrollableScrollPhysics())),
);
}
// ignore: avoid_positional_boolean_parameters
void onChatSettingChange(bool data) {
setState(() {
_chatResult = data;
});
}
void onSearchAreaChange(String data) {
setState(() {
_searchAreaResult = data;
});
}
}