giantapp_setting_ui 0.0.2 giantapp_setting_ui: ^0.0.2 copied to clipboard
A simple setting UI for lazy people.
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:giantapp_setting_ui/giantapp_setting_ui.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Giantapp UI Setting Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
final SettingObj _setting = SettingObj();
@override
_MyHomePageState createState() => _MyHomePageState();
}
class SettingItem {
int dataInt = 0;
bool dataBool = false;
String dataString = "inner_init";
String dataDropDownValue = "inner_zh";
List<String> dataDropDownOptions = ['inner_en', 'inner_ko', 'inner_zh'];
SettingItem(
{this.dataInt,
this.dataBool = false,
this.dataString,
this.dataDropDownOptions,
this.dataDropDownValue});
}
class SettingObj {
int _dataInt = 0;
bool _dataBool = false;
String _dataString = "init";
String _dataDropDownValue = "zh";
List<String> _dataDropDownOptions = ['en', 'ko', 'zh'];
List<SettingItem> _items = [
SettingItem(
dataString: "innerItem1",
dataDropDownOptions: ["test1", "test2", "test3"],
dataDropDownValue: "test2"),
SettingItem(
dataString: "innerItem2",
dataDropDownOptions: ["a", "b", "c", "d"],
dataDropDownValue: "c"),
];
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SettingsList(
sections: [
SettingsSection(
title: '分类一',
tiles: [
BooleanTile(
title: '布尔值',
leading: Icon(Icons.desktop_windows),
switchValue: widget._setting._dataBool,
onToggle: (bool value) {
setState(() {
widget._setting._dataBool = !widget._setting._dataBool;
});
},
),
DropdownButtonTile<String>(
dropdownValue: widget._setting._dataDropDownValue,
title: '下拉框',
subtitle: 'English',
leading: Icon(Icons.language),
onDropdownValueChanged: (value) {
setState(() {
widget._setting._dataDropDownValue = value;
});
},
dropdownItems: widget._setting._dataDropDownOptions
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
],
),
SettingsSection(
title: '分类2',
tiles: [
TextFieldTile(
initialValue: widget._setting._dataString,
title: '文本输入',
labelText: "desc",
onChanged: (text) {
setState(() {
widget._setting._dataString = text;
});
},
leading: Icon(Icons.folder)),
TextFieldTile(
initialValue: widget._setting._dataInt.toString(),
title: '数字输入',
labelText: "desc",
onChanged: (text) {
setState(() {
widget._setting._dataInt = int.parse(text);
});
},
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly
], // Only numbers can be entered
leading: Icon(Icons.folder)),
FlatButton(
child: Text('获取状态'),
color: Colors.blue,
onPressed: () {
print(widget._setting);
},
),
],
),
...getSections(),
],
),
);
}
List<Widget> getSections() {
return widget._setting._items.asMap().entries.map((e) {
int index = e.key;
SettingItem data = e.value;
return SettingsSection(
title: "item $index ",
tiles: [
BooleanTile(
title: '布尔值',
leading: Icon(Icons.desktop_windows),
switchValue: data.dataBool,
onToggle: (bool value) {
setState(() {
data.dataBool = !data.dataBool;
});
},
),
DropdownButtonTile<String>(
dropdownValue: data.dataDropDownValue,
title: '下拉框',
subtitle: 'English',
leading: Icon(Icons.language),
onDropdownValueChanged: (value) {
setState(() {
data.dataDropDownValue = value;
});
},
dropdownItems: data.dataDropDownOptions
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
TextFieldTile(
initialValue: data.dataString,
title: '文本输入',
labelText: "desc",
onChanged: (text) {
setState(() {
data.dataString = text;
});
},
leading: Icon(Icons.folder)),
TextFieldTile(
initialValue: data.dataInt.toString(),
title: '数字输入',
labelText: "desc",
onChanged: (text) {
setState(() {
data.dataInt = int.parse(text);
});
},
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly
], // Only numbers can be entered
leading: Icon(Icons.folder)),
],
);
}).toList();
}
}