giantapp_setting_ui 0.0.2 copy "giantapp_setting_ui: ^0.0.2" to clipboard
giantapp_setting_ui: ^0.0.2 copied to clipboard

A simple setting UI for lazy people.

example/lib/main.dart

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();
  }
}
1
likes
20
pub points
0%
popularity

Publisher

unverified uploader

A simple setting UI for lazy people.

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on giantapp_setting_ui