widget_chain

所属分类:区块链开发
开发工具:Dart
文件大小:9KB
下载次数:0
上传日期:2019-12-30 04:50:04
上 传 者sh-1993
说明:  widget_chain,chain编程,而不是小部件嵌套构造函数。摆脱带有闪亮扩展的嵌套地狱,现在,
(Chain programming, not widget nesting constructors. Get rid of the nested hell with shiny extensions, now! ,)

文件列表:
CHANGELOG.md (44, 2019-12-30)
LICENSE (1520, 2019-12-30)
lib (0, 2019-12-30)
lib\src (0, 2019-12-30)
lib\src\list_extensions.dart (366, 2019-12-30)
lib\src\widget_extensions.dart (13452, 2019-12-30)
lib\src\widget_list_extensions.dart (5264, 2019-12-30)
lib\widget_chain.dart (539, 2019-12-30)
pubspec.yaml (1538, 2019-12-30)
test (0, 2019-12-30)
test\widget_chain_test.dart (113, 2019-12-30)

# widget_chain Get rid of the nested hell with shiny extensions, now! Chain programming, not widget nesting constructors. [![Pub](https://img.shields.io/pub/v/widget_chain.svg?style=flat-square)](https://pub.dartlang.org/packages/widget_chain) ```dart Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),); } ``` ## Story If you've ever written anything like this: ```dart /// do you love nested hell? class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: ListView( children: [ Container( color: Colors.white, padding: EdgeInsets.all(20), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon(Icons.phone), Text("amy"), ], ), ), Container( color: Colors.white, padding: EdgeInsets.all(20), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon(Icons.phone), Text("billy"), ], ), ), ], ), ), ), ); } } ``` to resolve nested hell, maybe you will extract a build method, then it looks like: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: ListView( children: [ buildItem("amy"), buildItem("billy"), ], ), ), ), ); } Container buildItem(String name) { return Container( color: Colors.white, padding: EdgeInsets.all(20), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon(Icons.phone), Text(name), ], ), ); } } ``` Use widget_chain can replace constructors by an `intoXxx()` function calling. The code looks like: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: ListView( children: [ buildItem("amy"), buildItem("billy"), ], ), ), ), ); } Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) //the widget(Icon) add a neighbor (Text) and returns a List .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) // make the List as the children of Row, and then returns the Row widget .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),) // make the Row as the child of Container, and then returns the Container widget ; } } ```
Click to show more... or like this: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: ListView( children: WidgetChain .addNeighbor(buildItem("amy"),) .addNeighbor(buildItem("billy"),), ), ), ), ); } Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),); } } ``` or like this: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: WidgetChain .addNeighbor(buildItem("amy"),) .addNeighbor(buildItem("billy"),) .intoListView(), ), ), ); } Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),); } } ``` or like this: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: WidgetChain .addNeighbor(buildItem("amy"),) .addNeighbor(buildItem("billy"),) .intoListView() .intoOffstage(offstage: false,), ), ); } Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),); } } ```
or like this: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: WidgetChain .addNeighbor(buildItem("amy"),) .addNeighbor(buildItem("billy"),) .intoListView() .intoOffstage(offstage: false) .intoContainer() ); } Container buildItem(String name) { return Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),); } } ``` use `buildAllAsWidget` extension of `List`, it looks like this: ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { var list = ["amy", "billy"] .buildAllAsWidget((name) => Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),) ); return Scaffold( appBar: AppBar(title: Text('Demo'),), body: list.intoListView() .intoOffstage(offstage: false) .intoContainer() ); } } ``` ```dart class Test extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Demo'),), body: ["amy", "billy"] .buildAllAsWidget((name) => Icon(Icons.phone) .addNeighbor(Text(name)) .intoRow(crossAxisAlignment: CrossAxisAlignment.center,) .intoContainer(color: Colors.white, padding: EdgeInsets.all(20),) ) .intoListView() .intoOffstage(offstage: false) .intoContainer() ); } } ``` ## Getting Started ```yaml dependencies: widget_chain: ^0.1.0 ``` ## Usage ```dart import 'package:widget_chain/widget_chain.dart'; ``` for `Widget`: ```dart return widgetA.intoBbb(parmas); ``` equivalent as: ```dart return Bbb( params, child: widgetA, ); ``` for `List`: ```dart return widgetListC.intoDdd(parmas); ``` equivalent as: ```dart return Ddd( params, children: widgetListC, ); ```

近期下载者

相关文件


收藏者