mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-04 15:28:21 +08:00
解决冲突
This commit is contained in:
0
.github/issue_template.md
vendored
0
.github/issue_template.md
vendored
@ -12,56 +12,14 @@
|
|||||||
|
|
||||||
|
|
||||||
# Issue
|
# Issue
|
||||||
PR的第一步就是提交issue,即提交你发现的BUG 或者 想加入的功能, 选择你issue在类型
|
pr的第一步是先提交issue,即提交你发现的BUG 或者 想加入的功能, 选择你issue在类型
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
您的 Pull Request 可能包含以下几种
|
您的 Issue 可能包含以下几种
|
||||||
|
|
||||||
- 当前项目逻辑代码的问题修复或者优化
|
- bug report (修复逻辑相关bug)
|
||||||
- widget 示例的完善
|
- feature (增加新的功能)
|
||||||
- widget 文档的完善与更新
|
- widget (关于widget示例展示)
|
||||||
|
|
||||||
|
|
||||||
# 文档与DEMO的完善
|
|
||||||
一个widget的demo实例与文档说明, 由以下目录构成, 我们以**/lib/widgets/components/Tab/Tab**组件举例, 在此文件目录下构建您的demo运行即可看到效果
|
|
||||||
|
|
||||||
- index.dart
|
|
||||||
- demo.dart
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 撰写 Pull Request
|
|
||||||
|
|
||||||
为了更好的将 *flutter* 的各种使用方法分享给大家, 我们欢迎第三方提交个人Pull Request(简称为PR)到开源仓库中. 提交的PR需要满足以下规则:
|
|
||||||
|
|
||||||
- PR 的提交名称, 请使用有意义可以理解的词汇, 否则我们请直接关闭它.
|
|
||||||
- 例如: 增加了XX功能, 优化..., 修复在 XX 状态下对 XX 的异常处理
|
|
||||||
- PR 只能被提交合并到 *develop* 分支, 被提交到master的 PR, 我们将会直接关闭.
|
|
||||||
- PR 的描述区,需要描述本次改动的主要内容, 以及为什么要如此改动.
|
|
||||||
- 避免超大的 PR 提交
|
|
||||||
- 当 PR 的改动 **change** 超过1000行(暂定为1000)时, 请尽量拆分后进行提交.
|
|
||||||
- 规范化的commit信息
|
|
||||||
- commit规范参照[develop规范](https://github.com/alibbaba/flutter-go/blob/master/develop.md#commit-%E6%8F%90%E4%BA%A4%E8%A7%84%E8%8C%83)
|
|
||||||
- commit列表, 请在提交PR之前做好整理, 避免出现一个功能点的多条commit.[如何整理commit](https://help.github.com/en/articles/using-git-rebase-on-the-command-line)
|
|
||||||
|
|
||||||
# 如何提交PR
|
|
||||||
* fork项目到自己仓库
|
|
||||||
* git clone (您的仓库地址)到本地
|
|
||||||
* 建立上游源
|
|
||||||
* git remote add upStream git@github.com:alibaba/flutter-go.git
|
|
||||||
* 创建开发分支(非必须)
|
|
||||||
* git checkout -b develop
|
|
||||||
* 修改提交代码
|
|
||||||
* git status
|
|
||||||
* git add .
|
|
||||||
* git commit -m 'feat: message'
|
|
||||||
* git push origin develop
|
|
||||||
* 同步代码
|
|
||||||
* git fetch upstream
|
|
||||||
* git merge upstream/develop
|
|
||||||
* git push origin develop
|
|
||||||
* 提交PR
|
|
||||||
* 到自己github仓库对应fork的项目下new pull request
|
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ dependencies:
|
|||||||
args: '^1.5.1'
|
args: '^1.5.1'
|
||||||
dart_inquirer: '^1.0.0'
|
dart_inquirer: '^1.0.0'
|
||||||
watcher: ^0.9.7+10
|
watcher: ^0.9.7+10
|
||||||
|
mustache: ^1.1.1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|
||||||
|
@ -1,11 +1,23 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'package:mustache/mustache.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
import '../../utils/util.dart';
|
import '../../utils/util.dart';
|
||||||
import '../config.dart';
|
import '../config.dart';
|
||||||
import '../exception/demo.dart';
|
import '../exception/demo.dart';
|
||||||
|
|
||||||
|
|
||||||
|
String prettyJson(Map json) {
|
||||||
|
String res = "{";
|
||||||
|
json.forEach((k, v) {
|
||||||
|
res += (
|
||||||
|
"\t'$k': '$v'");
|
||||||
|
});
|
||||||
|
res +='}';
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Future<List> buildPageListJson() async {
|
Future<List> buildPageListJson() async {
|
||||||
List<FileSystemEntity> childList = await readeDirChildren(TARGET_PAGE_DIC, false);
|
List<FileSystemEntity> childList = await readeDirChildren(TARGET_PAGE_DIC, false);
|
||||||
List<String> pagePathList = [];
|
List<String> pagePathList = [];
|
||||||
@ -55,36 +67,45 @@ Future<List> buildPageListJson() async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String renderPagesDart(List<Map<String, dynamic>> data) {
|
String renderPagesDart(List<Map<String, dynamic>> data) {
|
||||||
// 自定义前缀 避免出现数字非法字符等
|
print('data>>> $data');
|
||||||
String pre = "StandardPage";
|
var source = '''
|
||||||
String head = '';
|
|
||||||
String foot = """
|
{{# pages }}
|
||||||
|
import '{{ name }}_{{ author }}_{{ id }}/index.dart' as StandardPage_{{ name }}_{{ id }};
|
||||||
|
{{/ pages }}
|
||||||
class StandardPages {
|
class StandardPages {
|
||||||
Map<String, String> standardPages;
|
Map<String, String> standardPages;
|
||||||
Map<String, String> getPages() {
|
Map<String, String> getPages() {
|
||||||
return {
|
return {
|
||||||
""";
|
"0": "0" {{# pages }},
|
||||||
|
"{{ id }}" : StandardPage_{{ name }}_{{ id }}.getMd()
|
||||||
for (int i = 0; i < data.length; i++) {
|
{{/ pages }}
|
||||||
Map<String, dynamic> item = data[i];
|
|
||||||
String demoImportName = '${item['name']}_${item['id']}';
|
|
||||||
head += "import '${item['name']}_${item['author']}_${item['id']}/index.dart' as ${pre}_$demoImportName;\r\n";
|
|
||||||
|
|
||||||
foot += "\t\t\t'${item['id']}': ${pre}_${demoImportName}.getMd()";
|
|
||||||
|
|
||||||
if (i != data.length - 1) {
|
|
||||||
foot += ',\r\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
foot += """\r
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
List<Map<String, String>> getLocalList() {
|
||||||
|
return [
|
||||||
|
{}{{# pages }},
|
||||||
|
{ "id": "{{ id }}", "name": "{{ name }}", "email": "{{ email }}", "author": "{{ author }}"}
|
||||||
|
{{/ pages }}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
""";
|
}
|
||||||
|
|
||||||
|
''';
|
||||||
|
var template = new Template(source, name: 'template-filename.html');
|
||||||
|
|
||||||
|
|
||||||
|
// 自定义前缀 避免出现数字非法字符等
|
||||||
|
Map<String, List> formatData = {
|
||||||
|
"pages": data
|
||||||
|
};
|
||||||
|
|
||||||
|
String output = template.renderString(formatData);
|
||||||
|
|
||||||
|
|
||||||
|
return output;
|
||||||
|
|
||||||
return head + foot;
|
|
||||||
}
|
}
|
||||||
Future<bool> checkPage(String path) async {
|
Future<bool> checkPage(String path) async {
|
||||||
List files = [
|
List files = [
|
||||||
|
@ -6,6 +6,7 @@ import './version.dart';
|
|||||||
import './command/create_demo.dart';
|
import './command/create_demo.dart';
|
||||||
import './command/create_page.dart';
|
import './command/create_page.dart';
|
||||||
import './command/watch_md.dart';
|
import './command/watch_md.dart';
|
||||||
|
import './command/build.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ class _CommandRunner extends CommandRunner<int> {
|
|||||||
addCommand(CreateDemoCommand());
|
addCommand(CreateDemoCommand());
|
||||||
addCommand(CreatePageCommand());
|
addCommand(CreatePageCommand());
|
||||||
addCommand(WatchCommand());
|
addCommand(WatchCommand());
|
||||||
|
addCommand(Build());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
32
go-cli/src/command/build.dart
Normal file
32
go-cli/src/command/build.dart
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
//
|
||||||
|
// Created with Android Studio.
|
||||||
|
// User: 三帆
|
||||||
|
// Date: 30/07/2019
|
||||||
|
// Time: 16:51
|
||||||
|
// email: sanfan.hx@alibaba-inc.com
|
||||||
|
// target: build
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
import 'package:args/command_runner.dart';
|
||||||
|
import '../build/build_demo_list.dart';
|
||||||
|
import '../build/build_page_list.dart';
|
||||||
|
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
|
||||||
|
class Build extends Command<int> {
|
||||||
|
@override
|
||||||
|
final name = 'build';
|
||||||
|
@override
|
||||||
|
final description = '生成索引等';
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<int> run() async {
|
||||||
|
buildPageListJson();
|
||||||
|
buildDemoListJson();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,2 @@
|
|||||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
#include "../Pods/Target\ Support\ Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
#include "../Pods/Target\ Support\ Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
|
||||||
|
@ -329,7 +329,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin\n";
|
shellScript = "/bin/sh \"/Users/nealyang/development/flutter/packages/flutter_tools/bin/xcode_backend.sh\" thin\n";
|
||||||
};
|
};
|
||||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
9740EEB61CF901F6004384FC /* Run Script */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
@ -9,9 +9,10 @@ import 'package:flutter_go/utils/example_code_parser.dart';
|
|||||||
import 'package:flutter_go/utils/syntax_highlighter.dart';
|
import 'package:flutter_go/utils/syntax_highlighter.dart';
|
||||||
|
|
||||||
class FullScreenCodeDialog extends StatefulWidget {
|
class FullScreenCodeDialog extends StatefulWidget {
|
||||||
const FullScreenCodeDialog({this.filePath});
|
const FullScreenCodeDialog({this.filePath, this.remoteFilePath});
|
||||||
|
|
||||||
final String filePath;
|
final String filePath;
|
||||||
|
final String remoteFilePath;
|
||||||
_FullScreenCodeDialogState createState() => _FullScreenCodeDialogState();
|
_FullScreenCodeDialogState createState() => _FullScreenCodeDialogState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
94
lib/components/loading.dart
Normal file
94
lib/components/loading.dart
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
//
|
||||||
|
// Created with Android Studio.
|
||||||
|
// User: 三帆
|
||||||
|
// Date: 07/08/2019
|
||||||
|
// Time: 08:40
|
||||||
|
// email: sanfan.hx@alibaba-inc.com
|
||||||
|
// tartget: 代码获取自: https://blog.csdn.net/O_time/article/details/86496537
|
||||||
|
//
|
||||||
|
import 'dart:async';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class NetLoadingDialog extends StatefulWidget {
|
||||||
|
String loadingText;
|
||||||
|
bool outsideDismiss;
|
||||||
|
bool loading;
|
||||||
|
Function dismissCallback;
|
||||||
|
Future<dynamic> requestCallBack;
|
||||||
|
|
||||||
|
NetLoadingDialog(
|
||||||
|
{Key key,
|
||||||
|
this.loadingText = "loading...",
|
||||||
|
this.outsideDismiss = true,
|
||||||
|
this.dismissCallback,
|
||||||
|
this.loading,
|
||||||
|
this.requestCallBack})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<NetLoadingDialog> createState() => _LoadingDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LoadingDialog extends State<NetLoadingDialog> {
|
||||||
|
_dismissDialog() {
|
||||||
|
if (widget.dismissCallback != null) {
|
||||||
|
widget.dismissCallback();
|
||||||
|
}
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
if (widget.requestCallBack != null) {
|
||||||
|
widget.requestCallBack.then((_) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
if (!widget.loading) {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
return new GestureDetector(
|
||||||
|
onTap: widget.outsideDismiss ? _dismissDialog : null,
|
||||||
|
child: Material(
|
||||||
|
type: MaterialType.transparency,
|
||||||
|
child: new Center(
|
||||||
|
child: new SizedBox(
|
||||||
|
width: 120.0,
|
||||||
|
height: 120.0,
|
||||||
|
child: new Container(
|
||||||
|
decoration: ShapeDecoration(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(8.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: new Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
new CircularProgressIndicator(),
|
||||||
|
new Padding(
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
top: 20.0,
|
||||||
|
),
|
||||||
|
child: new Text(
|
||||||
|
widget.loadingText,
|
||||||
|
style: new TextStyle(fontSize: 12.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -25,8 +25,8 @@ class WidgetDemo extends StatefulWidget {
|
|||||||
{Key key,
|
{Key key,
|
||||||
@required this.title,
|
@required this.title,
|
||||||
@required this.contentList,
|
@required this.contentList,
|
||||||
@required this.codeUrl,
|
this.codeUrl,
|
||||||
@required this.docUrl,
|
this.docUrl,
|
||||||
this.bottomNaviBar})
|
this.bottomNaviBar})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
|
|
||||||
@ -141,7 +141,38 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
|||||||
'${Routes.codeView}?filePath=${Uri.encodeComponent(widget.codeUrl)}');
|
'${Routes.codeView}?filePath=${Uri.encodeComponent(widget.codeUrl)}');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
List<PopupMenuEntry<String>> buildPopupMenu() {
|
||||||
|
List<PopupMenuEntry<String>> comps = [];
|
||||||
|
if (widget.docUrl != null) {
|
||||||
|
comps.add(
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: 'doc',
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(
|
||||||
|
Icons.library_books,
|
||||||
|
size: 22.0,
|
||||||
|
),
|
||||||
|
title: Text('查看文档'),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (widget.codeUrl != null) {
|
||||||
|
comps.add(
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: 'code',
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(
|
||||||
|
Icons.code,
|
||||||
|
size: 22.0,
|
||||||
|
),
|
||||||
|
title: Text('查看Demo'),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return comps;
|
||||||
|
}
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (_hasCollected) {
|
if (_hasCollected) {
|
||||||
@ -149,11 +180,8 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
|||||||
} else {
|
} else {
|
||||||
_collectionIcons = Icons.favorite_border;
|
_collectionIcons = Icons.favorite_border;
|
||||||
}
|
}
|
||||||
return Scaffold(
|
List<PopupMenuEntry<String>> menus = buildPopupMenu();
|
||||||
key: _scaffoldKey,
|
List<Widget> actions = [
|
||||||
appBar: AppBar(
|
|
||||||
title: Text(widget.title),
|
|
||||||
actions: <Widget>[
|
|
||||||
new IconButton(
|
new IconButton(
|
||||||
tooltip: 'goBack home',
|
tooltip: 'goBack home',
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -166,33 +194,20 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
|||||||
onPressed: _getCollection,
|
onPressed: _getCollection,
|
||||||
icon: Icon(_collectionIcons),
|
icon: Icon(_collectionIcons),
|
||||||
),
|
),
|
||||||
|
];
|
||||||
|
if (menus.length > 0) {
|
||||||
|
actions.add(
|
||||||
PopupMenuButton<String>(
|
PopupMenuButton<String>(
|
||||||
onSelected: _selectValue,
|
onSelected: _selectValue,
|
||||||
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
|
itemBuilder: (BuildContext context) => menus,
|
||||||
const PopupMenuItem<String>(
|
)
|
||||||
value: 'doc',
|
);
|
||||||
child: ListTile(
|
}
|
||||||
leading: Icon(
|
return Scaffold(
|
||||||
Icons.library_books,
|
key: _scaffoldKey,
|
||||||
size: 22.0,
|
appBar: AppBar(
|
||||||
),
|
title: Text(widget.title),
|
||||||
title: Text('查看文档'),
|
actions: actions,
|
||||||
),
|
|
||||||
),
|
|
||||||
const PopupMenuDivider(),
|
|
||||||
const PopupMenuItem<String>(
|
|
||||||
value: 'code',
|
|
||||||
child: ListTile(
|
|
||||||
leading: Icon(
|
|
||||||
Icons.code,
|
|
||||||
size: 22.0,
|
|
||||||
),
|
|
||||||
title: Text('查看Demo'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
body: Container(
|
body: Container(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0),
|
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0),
|
||||||
|
@ -17,7 +17,7 @@ import 'package:flutter_go/event/event_bus.dart';
|
|||||||
import 'package:flutter_go/event/event_model.dart';
|
import 'package:flutter_go/event/event_model.dart';
|
||||||
import 'package:event_bus/event_bus.dart';
|
import 'package:event_bus/event_bus.dart';
|
||||||
import 'package:flutter_go/model/widget.dart';
|
import 'package:flutter_go/model/widget.dart';
|
||||||
|
import 'package:flutter_go/standard_pages/index.dart';
|
||||||
//import 'views/welcome_page/index.dart';
|
//import 'views/welcome_page/index.dart';
|
||||||
|
|
||||||
SpUtil sp;
|
SpUtil sp;
|
||||||
@ -28,7 +28,6 @@ class MyApp extends StatefulWidget {
|
|||||||
final router = new Router();
|
final router = new Router();
|
||||||
Routes.configureRoutes(router);
|
Routes.configureRoutes(router);
|
||||||
// 这里设置项目环境
|
// 这里设置项目环境
|
||||||
Application.env = ENV.PRODUCTION;
|
|
||||||
Application.router = router;
|
Application.router = router;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,10 +188,13 @@ void main() async {
|
|||||||
await provider.init(true);
|
await provider.init(true);
|
||||||
sp = await SpUtil.getInstance();
|
sp = await SpUtil.getInstance();
|
||||||
new SearchHistoryList(sp);
|
new SearchHistoryList(sp);
|
||||||
|
|
||||||
await DataUtils.getWidgetTreeList().then((List json) {
|
await DataUtils.getWidgetTreeList().then((List json) {
|
||||||
if (json == null) return;
|
List data = WidgetTree.insertDevPagesToList(json, StandardPages().getLocalList());
|
||||||
Application.widgetTree = WidgetTree.buildWidgetTree(json);
|
Application.widgetTree = WidgetTree.buildWidgetTree(data);
|
||||||
|
print("Application.widgetTree>>>> ${Application.widgetTree}");
|
||||||
});
|
});
|
||||||
db = Provider.db;
|
db = Provider.db;
|
||||||
runApp(new MyApp());
|
runApp(new MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,107 +1,107 @@
|
|||||||
|
//
|
||||||
import 'dart:async';
|
//import 'dart:async';
|
||||||
|
//
|
||||||
import 'package:flutter_go/utils/sql.dart';
|
//import 'package:flutter_go/utils/sql.dart';
|
||||||
|
//
|
||||||
abstract class CatInterface{
|
//abstract class CatInterface{
|
||||||
int get id;
|
// int get id;
|
||||||
//类目名称
|
// //类目名称
|
||||||
String get name;
|
// String get name;
|
||||||
//描述
|
// //描述
|
||||||
String get desc;
|
// String get desc;
|
||||||
//第几级类目,默认 1
|
// //第几级类目,默认 1
|
||||||
int get depth;
|
// int get depth;
|
||||||
//父类目id,没有为 0
|
// //父类目id,没有为 0
|
||||||
int get parentId;
|
// int get parentId;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
class Cat implements CatInterface {
|
//class Cat implements CatInterface {
|
||||||
int id;
|
// int id;
|
||||||
String name;
|
// String name;
|
||||||
String desc;
|
// String desc;
|
||||||
int depth;
|
// int depth;
|
||||||
int parentId;
|
// int parentId;
|
||||||
|
//
|
||||||
Cat({this.id, this.name, this.desc, this.depth, this.parentId});
|
// Cat({this.id, this.name, this.desc, this.depth, this.parentId});
|
||||||
|
//
|
||||||
Cat.fromJSON(Map json)
|
// Cat.fromJSON(Map json)
|
||||||
: id = json['id'],
|
// : id = json['id'],
|
||||||
name = json['name'],
|
// name = json['name'],
|
||||||
desc = json['desc'],
|
// desc = json['desc'],
|
||||||
depth = json['depth'],
|
// depth = json['depth'],
|
||||||
parentId = json['parentId'];
|
// parentId = json['parentId'];
|
||||||
|
//
|
||||||
String toString() {
|
// String toString() {
|
||||||
return '(Cat $name)';
|
// return '(Cat $name)';
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Map toMap() {
|
// Map toMap() {
|
||||||
return {
|
// return {
|
||||||
'id': id,
|
// 'id': id,
|
||||||
'name': name,
|
// 'name': name,
|
||||||
'desc': desc,
|
// 'desc': desc,
|
||||||
'depth': depth,
|
// 'depth': depth,
|
||||||
'parentId': parentId
|
// 'parentId': parentId
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
Map toSqlCondition() {
|
// Map toSqlCondition() {
|
||||||
Map _map = this.toMap();
|
// Map _map = this.toMap();
|
||||||
Map condition = {};
|
// Map condition = {};
|
||||||
_map.forEach((k, value) {
|
// _map.forEach((k, value) {
|
||||||
|
//
|
||||||
if (value != null) {
|
// if (value != null) {
|
||||||
|
//
|
||||||
condition[k] = value;
|
// condition[k] = value;
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
//
|
||||||
if (condition.isEmpty) {
|
// if (condition.isEmpty) {
|
||||||
return {};
|
// return {};
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return condition;
|
// return condition;
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
class CatControlModel{
|
//class CatControlModel{
|
||||||
final String table = 'cat';
|
// final String table = 'cat';
|
||||||
Sql sql;
|
// Sql sql;
|
||||||
CatControlModel() {
|
// CatControlModel() {
|
||||||
sql = Sql.setTable(table);
|
// sql = Sql.setTable(table);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/// 获取一级类目
|
// /// 获取一级类目
|
||||||
Future<List> mainList() async{
|
// Future<List> mainList() async{
|
||||||
List listJson = await sql.getByCondition(conditions: {'parentId': 0});
|
// List listJson = await sql.getByCondition(conditions: {'parentId': 0});
|
||||||
List<Cat> cats = listJson.map((json) {
|
// List<Cat> cats = listJson.map((json) {
|
||||||
return new Cat.fromJSON(json);
|
// return new Cat.fromJSON(json);
|
||||||
}).toList();
|
// }).toList();
|
||||||
return cats;
|
// return cats;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 获取Cat不同深度与parent的列表
|
// // 获取Cat不同深度与parent的列表
|
||||||
Future<List<Cat>> getList([Cat cat]) async{
|
// Future<List<Cat>> getList([Cat cat]) async{
|
||||||
|
//
|
||||||
|
//
|
||||||
if (cat == null) {
|
// if (cat == null) {
|
||||||
cat = new Cat(depth: 1, parentId: 0);
|
// cat = new Cat(depth: 1, parentId: 0);
|
||||||
}
|
// }
|
||||||
// print("cat in getList ${cat.toMap()}");
|
// // print("cat in getList ${cat.toMap()}");
|
||||||
List listJson = await sql.getByCondition(conditions: cat.toSqlCondition());
|
// List listJson = await sql.getByCondition(conditions: cat.toSqlCondition());
|
||||||
List<Cat> cats = listJson.map((json) {
|
// List<Cat> cats = listJson.map((json) {
|
||||||
return new Cat.fromJSON(json);
|
// return new Cat.fromJSON(json);
|
||||||
}).toList();
|
// }).toList();
|
||||||
return cats;
|
// return cats;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 通过name获取Cat对象信息
|
// // 通过name获取Cat对象信息
|
||||||
Future<Cat> getCatByName(String name) async {
|
// Future<Cat> getCatByName(String name) async {
|
||||||
List json = await sql.getByCondition(conditions: {'name': name});
|
// List json = await sql.getByCondition(conditions: {'name': name});
|
||||||
if (json.isEmpty) {
|
// if (json.isEmpty) {
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
return new Cat.fromJSON(json.first);
|
// return new Cat.fromJSON(json.first);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
|
import "package:flutter_go/routers/application.dart";
|
||||||
import 'package:flutter_go/utils/sql.dart';
|
import 'package:flutter_go/utils/sql.dart';
|
||||||
|
|
||||||
enum treeNode {
|
enum treeNode {
|
||||||
@ -188,10 +188,12 @@ class CategoryComponent extends CommonItem {
|
|||||||
@required this.id,
|
@required this.id,
|
||||||
@required this.name,
|
@required this.name,
|
||||||
@required this.parentId,
|
@required this.parentId,
|
||||||
|
this.type = 'categoryw',
|
||||||
this.children,
|
this.children,
|
||||||
this.parent
|
this.parent
|
||||||
});
|
});
|
||||||
CategoryComponent.fromJson(Map json) {
|
CategoryComponent.fromJson(Map json) {
|
||||||
|
print(json['id'].runtimeType);
|
||||||
this.id = json['id'];
|
this.id = json['id'];
|
||||||
this.name = json['name'];
|
this.name = json['name'];
|
||||||
this.parentId = json['parentId'];
|
this.parentId = json['parentId'];
|
||||||
@ -289,6 +291,7 @@ class WidgetLeaf extends CommonItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class WidgetTree {
|
class WidgetTree {
|
||||||
|
// 构建树型结构
|
||||||
static CategoryComponent buildWidgetTree(List json, [parent]){
|
static CategoryComponent buildWidgetTree(List json, [parent]){
|
||||||
CategoryComponent current;
|
CategoryComponent current;
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
@ -297,7 +300,6 @@ class WidgetTree {
|
|||||||
current = CategoryComponent(id: 0, name: 'root', parentId: null, children: []);
|
current = CategoryComponent(id: 0, name: 'root', parentId: null, children: []);
|
||||||
}
|
}
|
||||||
json.forEach((item) {
|
json.forEach((item) {
|
||||||
|
|
||||||
// 归属分类级别
|
// 归属分类级别
|
||||||
if (['root', 'category'].indexOf(item['type']) != -1) {
|
if (['root', 'category'].indexOf(item['type']) != -1) {
|
||||||
CategoryComponent cate = CategoryComponent.fromJson(item);
|
CategoryComponent cate = CategoryComponent.fromJson(item);
|
||||||
@ -313,6 +315,41 @@ class WidgetTree {
|
|||||||
});
|
});
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static insertDevPagesToList(List list, List devPages) {
|
||||||
|
List devChildren = [];
|
||||||
|
int index = 9999999;
|
||||||
|
if (Application.env == ENV.PRODUCTION) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
devPages.forEach((item) {
|
||||||
|
index++;
|
||||||
|
if (item['id'] != null) {
|
||||||
|
devChildren.add({
|
||||||
|
"id": index.toString(),
|
||||||
|
"name": item['name'],
|
||||||
|
"parentId": "99999999999",
|
||||||
|
"type": "widget",
|
||||||
|
"display": "standard",
|
||||||
|
"author": item['author'],
|
||||||
|
"pageId": item['id']
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
list.forEach((item) {
|
||||||
|
if (item['name'].toString().toUpperCase() == 'DEVELOPER') {
|
||||||
|
List children = item['children'];
|
||||||
|
children.insert(0, {
|
||||||
|
"id": "99999999999",
|
||||||
|
"name": "本地代码",
|
||||||
|
"parentId": item['id'],
|
||||||
|
"type": "category",
|
||||||
|
"children": devChildren
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
}
|
||||||
static CategoryComponent getCommonItemById(List<int> path, CategoryComponent root) {
|
static CategoryComponent getCommonItemById(List<int> path, CategoryComponent root) {
|
||||||
print("getCommonItemByPath $path");
|
print("getCommonItemByPath $path");
|
||||||
print("root $root");
|
print("root $root");
|
||||||
|
@ -1 +1 @@
|
|||||||
[{"name":"demoName","screenShot":"","author":"yourName","email":"yourEmail","desc":"这是一个测试的标准demo","id":"1a29aa8e_32ae_4241_9c8a_5c9e1f92b096"}]
|
[{"name":"demoName","screenShot":"","author":"yourName","email":"yourEmail","desc":"这是一个测试的标准demo","id":"1a29aa8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"local","screenShot":"","author":"ab","email":"email","desc":"ags","id":"2c1d57d0_42ae_4241_9c8a_5c9e1f92b096"}]
|
@ -1,4 +1,6 @@
|
|||||||
import 'demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096;
|
import 'demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096;
|
||||||
|
import 'local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096;
|
||||||
var demoObjects = {
|
var demoObjects = {
|
||||||
'1a29aa8e_32ae_4241_9c8a_5c9e1f92b096': StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096.demoWidgets
|
'1a29aa8e_32ae_4241_9c8a_5c9e1f92b096': StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096.demoWidgets,
|
||||||
|
'2c1d57d0_42ae_4241_9c8a_5c9e1f92b096': StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096.demoWidgets
|
||||||
};
|
};
|
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "local",
|
||||||
|
"screenShot": "",
|
||||||
|
"author":"ab",
|
||||||
|
"email": "email",
|
||||||
|
"desc": "ags",
|
||||||
|
"id": "2c1d57d0_42ae_4241_9c8a_5c9e1f92b096"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// Created with flutter go cli
|
||||||
|
// User: ab
|
||||||
|
// Time: 2019-08-06 17:26:02.905889
|
||||||
|
// email: email
|
||||||
|
// desc: ags
|
||||||
|
//
|
||||||
|
|
||||||
|
import 'src/index.dart';
|
||||||
|
|
||||||
|
var demoWidgets = [
|
||||||
|
new Demo()
|
||||||
|
];
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class Demo extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_State createState() => _State();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _State extends State<Demo> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
child: Text("this is flutter go init demo"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,7 @@ class Routes {
|
|||||||
static String home = "/home";
|
static String home = "/home";
|
||||||
static String widgetDemo = '/widget-demo';
|
static String widgetDemo = '/widget-demo';
|
||||||
static String codeView = '/code-view';
|
static String codeView = '/code-view';
|
||||||
|
static String githubCodeView = '/github-code-view';
|
||||||
static String webViewPage = '/web-view-page';
|
static String webViewPage = '/web-view-page';
|
||||||
static String loginPage = '/loginpage';
|
static String loginPage = '/loginpage';
|
||||||
static String issuesMessage='/issuesMessage';
|
static String issuesMessage='/issuesMessage';
|
||||||
|
@ -1,11 +1 @@
|
|||||||
[
|
[{"name":"local","screenShot":"","author":"hnaxu","title":"本地","email":"hanxu@qq.com","desc":"desc","id":"5d7178d0_42ae_4241_9c8a_5c9e1f92b096"},{"name":"test","screenShot":"","author":"abc","title":"ya","email":"adsf.com","desc":"desc","id":"84f38e00_42ae_4241_9c8a_5c9e1f92b096"},{"name":"standard","screenShot":"","author":"sanfan","title":"介绍页","email":"hanxu317@qq.com","desc":"desc","id":"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096"}]
|
||||||
{
|
|
||||||
"name": "standard",
|
|
||||||
"screenShot": "",
|
|
||||||
"author": "sanfan",
|
|
||||||
"title": "介绍页",
|
|
||||||
"email": "hanxu317@qq.com",
|
|
||||||
"desc": "desc",
|
|
||||||
"id": "ee4feb8e_32ae_4241_9c8a_5c9e1f92b096"
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,11 +1,30 @@
|
|||||||
|
|
||||||
|
import 'local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_local_5d7178d0_42ae_4241_9c8a_5c9e1f92b096;
|
||||||
|
import 'test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_test_84f38e00_42ae_4241_9c8a_5c9e1f92b096;
|
||||||
import 'standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096;
|
import 'standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096;
|
||||||
class StandardPages {
|
class StandardPages {
|
||||||
Map<String, String> standardPages;
|
Map<String, String> standardPages;
|
||||||
Map<String, String> getPages() {
|
Map<String, String> getPages() {
|
||||||
return {
|
return {
|
||||||
'ee4feb8e_32ae_4241_9c8a_5c9e1f92b096': StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096.getMd()
|
"0": "0" ,
|
||||||
|
"5d7178d0_42ae_4241_9c8a_5c9e1f92b096" : StandardPage_local_5d7178d0_42ae_4241_9c8a_5c9e1f92b096.getMd()
|
||||||
|
,
|
||||||
|
"84f38e00_42ae_4241_9c8a_5c9e1f92b096" : StandardPage_test_84f38e00_42ae_4241_9c8a_5c9e1f92b096.getMd()
|
||||||
|
,
|
||||||
|
"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096" : StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096.getMd()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
List<Map<String, String>> getLocalList() {
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ "id": "5d7178d0_42ae_4241_9c8a_5c9e1f92b096", "name": "local", "email": "hanxu@qq.com", "author": "hnaxu"}
|
||||||
|
,
|
||||||
|
{ "id": "84f38e00_42ae_4241_9c8a_5c9e1f92b096", "name": "test", "email": "adsf.com", "author": "abc"}
|
||||||
|
,
|
||||||
|
{ "id": "ee4feb8e_32ae_4241_9c8a_5c9e1f92b096", "name": "standard", "email": "hanxu317@qq.com", "author": "sanfan"}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"name": "local",
|
||||||
|
"screenShot": "",
|
||||||
|
"author":"hnaxu",
|
||||||
|
"title":"本地",
|
||||||
|
"email": "hanxu@qq.com",
|
||||||
|
"desc": "desc",
|
||||||
|
"id": "5d7178d0_42ae_4241_9c8a_5c9e1f92b096"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
|||||||
|
String getMd() {
|
||||||
|
return """
|
||||||
|
# 标准的详情页
|
||||||
|
|
||||||
|
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
|
||||||
|
|
||||||
|
您可以通过goCli创建详情页所需要的demo
|
||||||
|
|
||||||
|
```
|
||||||
|
goCLi createDemo
|
||||||
|
```
|
||||||
|
|
||||||
|
在flutter go 根文件下通过命令行输入以上命令可以进行以下操作
|
||||||
|
|
||||||
|
[✓] 请输入新增加的demo名称? demoName
|
||||||
|
|
||||||
|
[✓] 请输入您的姓名(使用英文) yourName
|
||||||
|
|
||||||
|
[✓] 请输入您的github的email地址 yourEmail
|
||||||
|
|
||||||
|
[✓] 请输入您demo的描述 这是一个测试的标准demo
|
||||||
|
|
||||||
|
|
||||||
|
在完成以上操作后, 可以得到这样的输出:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
------------------
|
||||||
|
您新增的组件信息如下
|
||||||
|
==================
|
||||||
|
{
|
||||||
|
name : demoName
|
||||||
|
author : yourName
|
||||||
|
email : yourEmail
|
||||||
|
desc : 这是一个测试的标准demo
|
||||||
|
}
|
||||||
|
==================
|
||||||
|
[✓] Is this the config you want ? (Y/n) y
|
||||||
|
{
|
||||||
|
新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
您可以在任意详情页中, 通过以下方式调用
|
||||||
|
|
||||||
|
```
|
||||||
|
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
```""";
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
# 标准的详情页
|
||||||
|
|
||||||
|
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
|
||||||
|
|
||||||
|
您可以通过goCli创建详情页所需要的demo
|
||||||
|
|
||||||
|
```
|
||||||
|
goCLi createDemo
|
||||||
|
```
|
||||||
|
|
||||||
|
在flutter go 根文件下通过命令行输入以上命令可以进行以下操作
|
||||||
|
|
||||||
|
[✓] 请输入新增加的demo名称? demoName
|
||||||
|
|
||||||
|
[✓] 请输入您的姓名(使用英文) yourName
|
||||||
|
|
||||||
|
[✓] 请输入您的github的email地址 yourEmail
|
||||||
|
|
||||||
|
[✓] 请输入您demo的描述 这是一个测试的标准demo
|
||||||
|
|
||||||
|
|
||||||
|
在完成以上操作后, 可以得到这样的输出:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
------------------
|
||||||
|
您新增的组件信息如下
|
||||||
|
==================
|
||||||
|
{
|
||||||
|
name : demoName
|
||||||
|
author : yourName
|
||||||
|
email : yourEmail
|
||||||
|
desc : 这是一个测试的标准demo
|
||||||
|
}
|
||||||
|
==================
|
||||||
|
[✓] Is this the config you want ? (Y/n) y
|
||||||
|
{
|
||||||
|
新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
您可以在任意详情页中, 通过以下方式调用
|
||||||
|
|
||||||
|
```
|
||||||
|
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
```
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"screenShot": "",
|
||||||
|
"author":"abc",
|
||||||
|
"title":"ya",
|
||||||
|
"email": "adsf.com",
|
||||||
|
"desc": "desc",
|
||||||
|
"id": "84f38e00_42ae_4241_9c8a_5c9e1f92b096"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
|||||||
|
String getMd() {
|
||||||
|
return """
|
||||||
|
# 标准的详情页
|
||||||
|
|
||||||
|
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
|
||||||
|
|
||||||
|
您可以通过goCli创建详情页所需要的demo
|
||||||
|
|
||||||
|
```
|
||||||
|
goCLi createDemo
|
||||||
|
```
|
||||||
|
|
||||||
|
在flutter go 根文件下通过命令行输入以上命令可以进行以下操作
|
||||||
|
|
||||||
|
[✓] 请输入新增加的demo名称? demoName
|
||||||
|
|
||||||
|
[✓] 请输入您的姓名(使用英文) yourName
|
||||||
|
|
||||||
|
[✓] 请输入您的github的email地址 yourEmail
|
||||||
|
|
||||||
|
[✓] 请输入您demo的描述 这是一个测试的标准demo
|
||||||
|
|
||||||
|
|
||||||
|
在完成以上操作后, 可以得到这样的输出:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
------------------
|
||||||
|
您新增的组件信息如下
|
||||||
|
==================
|
||||||
|
{
|
||||||
|
name : demoName
|
||||||
|
author : yourName
|
||||||
|
email : yourEmail
|
||||||
|
desc : 这是一个测试的标准demo
|
||||||
|
}
|
||||||
|
==================
|
||||||
|
[✓] Is this the config you want ? (Y/n) y
|
||||||
|
{
|
||||||
|
新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
您可以在任意详情页中, 通过以下方式调用
|
||||||
|
|
||||||
|
```
|
||||||
|
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
```""";
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
# 标准的详情页
|
||||||
|
|
||||||
|
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
|
||||||
|
|
||||||
|
您可以通过goCli创建详情页所需要的demo
|
||||||
|
|
||||||
|
```
|
||||||
|
goCLi createDemo
|
||||||
|
```
|
||||||
|
|
||||||
|
在flutter go 根文件下通过命令行输入以上命令可以进行以下操作
|
||||||
|
|
||||||
|
[✓] 请输入新增加的demo名称? demoName
|
||||||
|
|
||||||
|
[✓] 请输入您的姓名(使用英文) yourName
|
||||||
|
|
||||||
|
[✓] 请输入您的github的email地址 yourEmail
|
||||||
|
|
||||||
|
[✓] 请输入您demo的描述 这是一个测试的标准demo
|
||||||
|
|
||||||
|
|
||||||
|
在完成以上操作后, 可以得到这样的输出:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
------------------
|
||||||
|
您新增的组件信息如下
|
||||||
|
==================
|
||||||
|
{
|
||||||
|
name : demoName
|
||||||
|
author : yourName
|
||||||
|
email : yourEmail
|
||||||
|
desc : 这是一个测试的标准demo
|
||||||
|
}
|
||||||
|
==================
|
||||||
|
[✓] Is this the config you want ? (Y/n) y
|
||||||
|
{
|
||||||
|
新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096
|
||||||
|
markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
您可以在任意详情页中, 通过以下方式调用
|
||||||
|
|
||||||
|
```
|
||||||
|
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
|
||||||
|
```
|
@ -109,7 +109,7 @@ class DataUtils {
|
|||||||
static Future<List> getWidgetTreeList() async {
|
static Future<List> getWidgetTreeList() async {
|
||||||
try {
|
try {
|
||||||
var response = await NetUtils.get(Api.GET_WIDGET_TREE);
|
var response = await NetUtils.get(Api.GET_WIDGET_TREE);
|
||||||
print('组件树:$response');
|
print('组件树dddd:$response');
|
||||||
if (response != null && response['success']) {
|
if (response != null && response['success']) {
|
||||||
return response['data'];
|
return response['data'];
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
const title = 'titie1';
|
|
||||||
Map<String, String> titleObjs = {
|
|
||||||
'title': 'haha33'
|
|
||||||
};
|
|
||||||
class Maps {
|
|
||||||
Map<String, String> list;
|
|
||||||
getList() {
|
|
||||||
return {
|
|
||||||
"title": "1111"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,6 +15,13 @@ import '../../components/flutter_markdown/lib/flutter_markdown.dart';
|
|||||||
import '../../standard_pages/index.dart';
|
import '../../standard_pages/index.dart';
|
||||||
import '../../page_demo_package/index.dart';
|
import '../../page_demo_package/index.dart';
|
||||||
import 'package:flutter_go/routers/application.dart';
|
import 'package:flutter_go/routers/application.dart';
|
||||||
|
import 'package:flutter_go/utils/net_utils.dart';
|
||||||
|
import 'package:flutter_go/components/loading.dart';
|
||||||
|
|
||||||
|
const githubUrl = 'https://raw.githubusercontent.com/alibaba/flutter-go/beta/lib/standard_pages/';
|
||||||
|
const PagesUrl = 'https://raw.githubusercontent.com/alibaba/flutter-go/beta/lib/standard_pages/.pages.json';
|
||||||
|
const DemosUrl = 'https://raw.githubusercontent.com/alibaba/flutter-go/beta/lib/page_demo_package/.demo.json';
|
||||||
|
|
||||||
|
|
||||||
// ONLINE || LOCAL
|
// ONLINE || LOCAL
|
||||||
ENV env = Application.env;
|
ENV env = Application.env;
|
||||||
@ -28,25 +35,24 @@ class StandardView extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _StandardView extends State<StandardView> {
|
class _StandardView extends State<StandardView> {
|
||||||
String markdownDesc = '# this is header';
|
String markdownDesc = '';
|
||||||
String pageTitle = "XXX";
|
String pageTitle = '';
|
||||||
|
bool isLoading = false;
|
||||||
String author = '';
|
String author = '';
|
||||||
String email = '';
|
String email = '';
|
||||||
StandardPages standardPage = new StandardPages();
|
StandardPages standardPage = new StandardPages();
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
this.getDetail();
|
this.getPageInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 本地调用的获取基本信息
|
/// 本地调用的获取文章属性的基本信息
|
||||||
Future<void> getPagesInfo() async {
|
Future<void> localGetPagesAttrsInfo() async {
|
||||||
String jsonString = await DefaultAssetBundle.of(context)
|
String jsonString = await DefaultAssetBundle.of(context).loadString('lib/standard_pages/.pages.json');
|
||||||
.loadString('lib/standard_pages/.pages.json');
|
|
||||||
List jsonList = json.decode(jsonString);
|
List jsonList = json.decode(jsonString);
|
||||||
Map<String, dynamic> pageDetail =
|
Map<String, dynamic> pageDetail = jsonList.firstWhere((item) => item['id'] == widget.id);
|
||||||
jsonList.firstWhere((item) => item['id'] == widget.id);
|
|
||||||
if (pageDetail != null) {
|
if (pageDetail != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
pageTitle = pageDetail['title'] ?? '请加入title';
|
pageTitle = pageDetail['title'] ?? '请加入title';
|
||||||
@ -56,27 +62,56 @@ class _StandardView extends State<StandardView> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _getContentFromLocal() {
|
/// 从本地获取基本文章信息
|
||||||
|
String localGetPagesMarkdown() {
|
||||||
|
|
||||||
String pageId = widget.id;
|
String pageId = widget.id;
|
||||||
Map<String, String> pagesList = standardPage.getPages();
|
Map<String, String> pagesList = standardPage.getPages();
|
||||||
return pagesList[pageId];
|
return pagesList[pageId];
|
||||||
}
|
}
|
||||||
|
Future<String> getContentOnline() async {
|
||||||
|
|
||||||
Future<String> _getContentOnline() async {
|
|
||||||
String content = 'online content';
|
String content = 'online content';
|
||||||
|
this.setState(() {
|
||||||
|
isLoading = true;
|
||||||
|
});
|
||||||
|
|
||||||
return Future(() => content);
|
List response = jsonDecode(await NetUtils.get(PagesUrl));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Map targetPage = response.firstWhere((page) => page['id'] == widget.id);
|
||||||
|
if (targetPage == null) {
|
||||||
|
setState(() {
|
||||||
|
isLoading = false;
|
||||||
|
});
|
||||||
|
return Future(() => '未获取界面相当信息');
|
||||||
}
|
}
|
||||||
|
setState(() {
|
||||||
|
pageTitle = targetPage['title'] ?? 'xxx';
|
||||||
|
author = targetPage['author'];
|
||||||
|
email = targetPage['email'];
|
||||||
|
});
|
||||||
|
|
||||||
Future<String> getDetail() async {
|
String pageName = targetPage['name'] + "_" +targetPage['author']+ "_" +targetPage['id'];
|
||||||
|
String pageContent = await NetUtils.get(githubUrl + pageName + "/index.md");
|
||||||
|
setState(() {
|
||||||
|
isLoading = false;
|
||||||
|
});
|
||||||
|
return Future(() => pageContent);
|
||||||
|
}
|
||||||
|
/// 获取当面界面的相关信息. 需要区分环境
|
||||||
|
/// 本地环境下, 从本地获取 standard_pages的目录中互殴
|
||||||
|
/// 线上环境. 从github的api中获取
|
||||||
|
Future<String> getPageInfo() async {
|
||||||
String conent = '';
|
String conent = '';
|
||||||
print("env:::: $env");
|
print("env:::: $env");
|
||||||
|
|
||||||
if (env == ENV.PRODUCTION) {
|
if (env == ENV.PRODUCTION) {
|
||||||
conent = await _getContentOnline();
|
conent = await getContentOnline();
|
||||||
} else {
|
} else {
|
||||||
getPagesInfo();
|
conent = localGetPagesMarkdown();
|
||||||
conent = _getContentFromLocal();
|
localGetPagesAttrsInfo();
|
||||||
}
|
}
|
||||||
if (this.mounted) {
|
if (this.mounted) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -84,18 +119,32 @@ class _StandardView extends State<StandardView> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Future(() => conent);
|
return Future(() => conent);
|
||||||
// this.rebuild();
|
}
|
||||||
|
Widget buildFootInfo() {
|
||||||
|
if (!isLoading) {
|
||||||
|
return Container(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Text('创建者: $author'),
|
||||||
|
Text('邮箱: $email'),
|
||||||
|
Text('界面id: ${widget.id}')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildMarkdown() {
|
Widget buildMarkdown() {
|
||||||
Map<String, String> contentList = new StandardPages().getPages();
|
|
||||||
|
|
||||||
if (contentList[widget.id] == null) {
|
|
||||||
contentList[widget.id] = '';
|
if (markdownDesc == null) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return MarkdownBody(
|
return MarkdownBody(
|
||||||
data: contentList[widget.id],
|
data: markdownDesc,
|
||||||
syntaxHighlighter:new mdCopy.HighLight(),
|
syntaxHighlighter:new mdCopy.HighLight(),
|
||||||
demoBuilder: (Map<String, dynamic> attrs) {
|
demoBuilder: (Map<String, dynamic> attrs) {
|
||||||
List<Widget> demo = demoObjects[attrs['id']];
|
List<Widget> demo = demoObjects[attrs['id']];
|
||||||
@ -109,20 +158,22 @@ class _StandardView extends State<StandardView> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return new WidgetDemo(
|
return new WidgetDemo(
|
||||||
title: pageTitle,
|
title: pageTitle,
|
||||||
codeUrl: 'elements/Form/Button/DropdownButton/demo.dart',
|
// codeUrl: 'elements/Form/Button/DropdownButton/demo.dart',
|
||||||
contentList: [
|
contentList: [
|
||||||
|
NetLoadingDialog(
|
||||||
|
loading: isLoading,
|
||||||
|
outsideDismiss: false,
|
||||||
|
),
|
||||||
buildMarkdown(),
|
buildMarkdown(),
|
||||||
SizedBox(height: 30),
|
SizedBox(height: 30),
|
||||||
'创建者: $author',
|
buildFootInfo(),
|
||||||
'创建者: $email',
|
SizedBox(height: 30)
|
||||||
'id: ${widget.id}',
|
|
||||||
],
|
],
|
||||||
docUrl:
|
|
||||||
'https://docs.flutter.io/flutter/material/DropdownButton-class.html',
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ class SecondPageState extends State<WidgetPage> with AutomaticKeepAliveClientMix
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
print("build in widget page");
|
|
||||||
return Container(
|
return Container(
|
||||||
color: Theme.of(context).backgroundColor,
|
color: Theme.of(context).backgroundColor,
|
||||||
child: this.buildGrid(),
|
child: this.buildGrid(),
|
||||||
|
104
pubspec.lock
104
pubspec.lock
@ -5,105 +5,105 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.2"
|
version: "1.5.2"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.2.0"
|
||||||
bloc:
|
bloc:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: bloc
|
name: bloc
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.0"
|
version: "0.12.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
charcode:
|
charcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: charcode
|
name: charcode
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.2"
|
version: "1.1.2"
|
||||||
city_pickers:
|
city_pickers:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: city_pickers
|
name: city_pickers
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.4"
|
version: "0.0.4"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.14.11"
|
version: "1.14.11"
|
||||||
cookie_jar:
|
cookie_jar:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cookie_jar
|
name: cookie_jar
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
csslib:
|
csslib:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: csslib
|
name: csslib
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.16.1"
|
version: "0.16.1"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.2"
|
version: "0.1.2"
|
||||||
dio:
|
dio:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dio
|
name: dio
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.13"
|
version: "2.1.13"
|
||||||
event_bus:
|
event_bus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: event_bus
|
name: event_bus
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
firebase_analytics:
|
firebase_analytics:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_analytics
|
name: firebase_analytics
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0+1"
|
version: "1.2.0+1"
|
||||||
firebase_core:
|
firebase_core:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.4"
|
version: "0.3.4"
|
||||||
fluro:
|
fluro:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fluro
|
name: fluro
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.1"
|
version: "1.5.1"
|
||||||
flutter:
|
flutter:
|
||||||
@ -115,28 +115,28 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_bloc
|
name: flutter_bloc
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.11.1"
|
version: "0.11.1"
|
||||||
flutter_downloader:
|
flutter_downloader:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_downloader
|
name: flutter_downloader
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.9"
|
version: "1.1.9"
|
||||||
flutter_jpush:
|
flutter_jpush:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_jpush
|
name: flutter_jpush
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.4"
|
version: "0.0.4"
|
||||||
flutter_spinkit:
|
flutter_spinkit:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_spinkit
|
name: flutter_spinkit
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
@ -148,154 +148,154 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_webview_plugin
|
name: flutter_webview_plugin
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.5"
|
version: "0.3.5"
|
||||||
fluttertoast:
|
fluttertoast:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fluttertoast
|
name: fluttertoast
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
html:
|
html:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: html
|
name: html
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.14.0+2"
|
version: "0.14.0+2"
|
||||||
image_picker:
|
image_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: image_picker
|
name: image_picker
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.4+3"
|
version: "0.5.4+3"
|
||||||
intl:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.7"
|
version: "0.15.7"
|
||||||
lpinyin:
|
lpinyin:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lpinyin
|
name: lpinyin
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.7"
|
version: "1.0.7"
|
||||||
markdown:
|
markdown:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: markdown
|
name: markdown
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.5"
|
version: "0.12.5"
|
||||||
meta:
|
meta:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.6"
|
version: "1.1.6"
|
||||||
notus:
|
notus:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: notus
|
name: notus
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.3"
|
version: "0.1.3"
|
||||||
open_file:
|
open_file:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: open_file
|
name: open_file
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
package_info:
|
package_info:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: package_info
|
name: package_info
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.0+6"
|
version: "0.4.0+6"
|
||||||
path:
|
path:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.2"
|
version: "1.6.2"
|
||||||
path_provider:
|
path_provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: path_provider
|
name: path_provider
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
pedantic:
|
pedantic:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pedantic
|
name: pedantic
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.7.0"
|
version: "1.7.0"
|
||||||
permission_handler:
|
permission_handler:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.1+1"
|
version: "3.2.1+1"
|
||||||
quill_delta:
|
quill_delta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: quill_delta
|
name: quill_delta
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
quiver:
|
quiver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: quiver
|
name: quiver
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
quiver_hashcode:
|
quiver_hashcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: quiver_hashcode
|
name: quiver_hashcode
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
rxdart:
|
rxdart:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: rxdart
|
name: rxdart
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.21.0"
|
version: "0.21.0"
|
||||||
share:
|
share:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share
|
name: share
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.2+1"
|
version: "0.6.2+1"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.3"
|
version: "0.4.3"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
@ -307,77 +307,77 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.5"
|
version: "1.5.5"
|
||||||
sqflite:
|
sqflite:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite
|
name: sqflite
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.6+3"
|
version: "1.1.6+3"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.3"
|
version: "1.9.3"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
synchronized:
|
synchronized:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: synchronized
|
name: synchronized
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0+1"
|
version: "2.1.0+1"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.5"
|
version: "0.2.5"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.6"
|
version: "1.1.6"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.2"
|
version: "5.1.2"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.8"
|
version: "2.0.8"
|
||||||
zefyr:
|
zefyr:
|
||||||
|
Reference in New Issue
Block a user