wendux / flutter-comment

Flutter中文网评论
10 stars 0 forks source link

这个能有个可视化编辑器嘛? 写个ListView都一堆代码 #95

Open handl0314 opened 3 years ago

handl0314 commented 3 years ago

//导入包 import 'package:flutter/material.dart'; import 'package:english_words/english_words.dart';

void main() => runApp(new MyApp());

//主程序 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp(title: "MyApp", home: new MyListView()); } }

//有状态的Listview class MyListView extends StatefulWidget { @override State createState() { return new MyState(); } }

//ListView绑定状态 class MyState extends State { //定义容器 final wordpair_array = new List(); final save_array = new Set();

@override Widget build(BuildContext context) { var listview = Unit.getListView(wordpair_array, save_array, (bool isave, WordPair wordPair) { setState(() { if (!isave) save_array.add(wordPair); else save_array.remove(wordPair); }); }); return Unit.getScaffold("点击收藏", listview, save_array, context); } }

//辅助类 class Unit { //获取一个Scaffold static Scaffold getScaffold(String apbarTitle, ListView widget, save_array, context) { return new Scaffold( appBar: new AppBar( title: getText(apbarTitle),actions: [ new IconButton( icon: new Icon(Icons.list), onPressed: () { var listview = Unit.getListViewByDivider(save_array, context); var route = new MaterialPageRoute(builder: (context) { var listview_save =Unit.getListViewByDivider(save_array, context); return Unit.getScaffoldSingle("我的收藏", listview_save); }); Navigator.of(context).push(route); }) ], ), body: widget); }

//获取一个无状态ListView的Scaffold static Scaffold getScaffoldSingle(String apbarTitle, Widget widget) { return new Scaffold( appBar: new AppBar(title: getText(apbarTitle)), body: widget); }

//获取一个文本 static Text getText(String title) { return new Text(title, style: new TextStyle(color: Colors.grey, fontSize: 16.0)); }

//构建一个Listview(带收藏功能) static ListView getListView(List wordpair_array,Set save_array, void updateSate(bool obj, WordPair wordPair)) { return new ListView.builder(itemBuilder: (contrex, i) { if (i.isOdd) return new Divider(); else { var index = i ~/ 2; if (index >= wordpair_array.length) wordpair_array.addAll(generateWordPairs().take(10)); var issaved = save_array.contains(wordpair_array[index]); return getListTile_Save(wordpair_array[index], issaved,(bool obj, WordPair wordPair) { updateSate(obj, wordPair); }); } }); }

//获取带收藏的Listview每一行 static ListTile getListTile_Save(WordPair wordPair, bool isSaved,void updateSate(bool obj, WordPair wordPair)) { return new ListTile( title: getText(wordPair.asPascalCase), trailing: new Icon(isSaved ? Icons.favorite : Icons.favorite_border, color: isSaved ? Colors.red : null), onTap: () { updateSate(isSaved, wordPair); }, ); }

//根据简单分割符构建ListView(无状态) static ListView getListViewByDivider(Set save_array, context) { var tiles = save_array.map((e) => getListTile(e.asPascalCase)); var divider = ListTile.divideTiles(tiles: tiles, context: context).toList(); return new ListView(children: divider); }

//获取简单的ListView每一行 static ListTile getListTile(String title) { return new ListTile(title: getText(title)); } }