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,
);
```
近期下载者:
相关文件:
收藏者: