diff --git a/lib/routers/router_handler.dart b/lib/routers/router_handler.dart index ce68b813..a26f999a 100644 --- a/lib/routers/router_handler.dart +++ b/lib/routers/router_handler.dart @@ -8,6 +8,7 @@ import 'package:flutter_go/views/web_page/web_view_page.dart'; import 'package:flutter_go/views/home.dart'; import 'package:flutter_go/views/login_page/login_page.dart'; import 'package:flutter_go/model/user_info.dart'; +import 'package:flutter_go/views/issuse_message_page/issuse_message_page.dart'; // app的首页 var homeHandler = new Handler( @@ -26,24 +27,29 @@ var categoryHandler = new Handler( var widgetNotFoundHandler = new Handler( handlerFunc: (BuildContext context, Map> params) { - return new WidgetNotFound(); -}); + return new WidgetNotFound(); + }); var loginPageHandler = new Handler( handlerFunc: (BuildContext context, Map> params) { - return LoginPage(); -}); + return LoginPage(); + }); var fullScreenCodeDialog = new Handler( handlerFunc: (BuildContext context, Map> params) { - String path = params['filePath']?.first; - return new FullScreenCodeDialog( - filePath: path, - ); -}); + String path = params['filePath']?.first; + return new FullScreenCodeDialog( + filePath: path, + ); + }); var webViewPageHand = new Handler( handlerFunc: (BuildContext context, Map> params) { - String title = params['title']?.first; - String url = params['url']?.first; - return new WebViewPage(url, title); -}); + String title = params['title']?.first; + String url = params['url']?.first; + return new WebViewPage(url, title); + }); + +var issuesMessageHandler = new Handler( + handlerFunc: (BuildContext context, Map> params) { + return issuesMessagePage(); + }); diff --git a/lib/routers/routers.dart b/lib/routers/routers.dart index b433d69c..fac16359 100644 --- a/lib/routers/routers.dart +++ b/lib/routers/routers.dart @@ -13,6 +13,7 @@ class Routes { static String codeView = '/code-view'; static String webViewPage = '/web-view-page'; static String loginPage = '/loginpage'; + static String issuesMessage='/issuesMessage'; static void configureRoutes(Router router) { List widgetDemosList = new WidgetDemoList().getDemos(); @@ -26,6 +27,7 @@ class Routes { router.define(loginPage, handler: loginPageHandler); router.define(codeView,handler:fullScreenCodeDialog); router.define(webViewPage,handler:webViewPageHand); + router.define(issuesMessage, handler: issuesMessageHandler); widgetDemosList.forEach((demo) { Handler handler = new Handler( handlerFunc: (BuildContext context, Map> params) { diff --git a/lib/views/first_page/drawer_page.dart b/lib/views/first_page/drawer_page.dart index d35ef6db..3fd57228 100644 --- a/lib/views/first_page/drawer_page.dart +++ b/lib/views/first_page/drawer_page.dart @@ -85,12 +85,16 @@ class _DrawerPageState extends State { style: textStyle, ), onTap: () { - DataUtils.feedback({ - 'title': "这是客户端 FeedBack title", - "body": "这是客户端 FeedBack body" - }).then((result) { - print(result); - }); + if (hasLogin) { + //issue 未登陆状态 返回登陆页面 + DataUtils.logout().then((result) { + Application.router.navigateTo(context, '${Routes.issuesMessage}'); + }); + } else { + //No description provided. +// Application.router.navigateTo(context, '${Routes.loginPage}'); + Application.router.navigateTo(context, '${Routes.issuesMessage}'); + } }, ), ListTile( diff --git a/lib/views/issuse_message_page/issuse_message_page.dart b/lib/views/issuse_message_page/issuse_message_page.dart new file mode 100644 index 00000000..ed392e6b --- /dev/null +++ b/lib/views/issuse_message_page/issuse_message_page.dart @@ -0,0 +1,126 @@ +import 'package:flutter/material.dart'; +import 'package:zefyr/zefyr.dart'; +import 'package:flutter_go/utils/data_utils.dart'; +import 'package:notus/convert.dart'; +import 'package:fluttertoast/fluttertoast.dart'; + +class issuesMessagePage extends StatefulWidget { + @override + _issuesMessagePageState createState() => _issuesMessagePageState(); +} + +class _issuesMessagePageState extends State { + final TextEditingController _controller = new TextEditingController(); + final ZefyrController _zefyrController = new ZefyrController(NotusDocument()); + final FocusNode _focusNode = new FocusNode(); + String _title = ""; + var _delta; + + @override + void initState() { + _controller.addListener(() { + print("_controller.text:${_controller.text}"); + setState(() { + _title = _controller.text; + }); + }); + + _zefyrController.document.changes.listen((change) { + setState(() { + _delta = _zefyrController.document.toDelta(); + }); + }); + + super.initState(); + } + + void dispose() { + _controller.dispose(); + _zefyrController.dispose(); + super.dispose(); + } + + _submit() { + String mk = notusMarkdown.encode(_delta); + if (_title.trim().isEmpty) { + Fluttertoast.showToast(msg: '标题不能为空', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.CENTER, + timeInSecForIos: 1, + backgroundColor: Theme.of(context).primaryColor, + textColor: Colors.white, + fontSize: 16.0); + } else { + DataUtils.feedback({'title': _title, "body": mk}).then((result) { + print(result); + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('反馈/意见'), + actions: [ + FlatButton.icon( + onPressed: () { + _submit(); + }, + icon: Icon( + Icons.near_me, + color: Colors.white, + size: 12, + ), + label: Text( + '发送', + style: TextStyle(color: Colors.white), + ), + ) + ], + elevation: 1.0, + ), + body: ZefyrScaffold( + child: Padding( + padding: EdgeInsets.all(8), + child: ListView( + children: [ + Text('输入标题:'), + new TextFormField( + maxLength: 50, + controller: _controller, + decoration: new InputDecoration( + hintText: 'Title', + ), + ), + Text('内容:'), + _descriptionEditor(), + ], + ), + ), + )); + } + + Widget _descriptionEditor() { + final theme = new ZefyrThemeData( + toolbarTheme: ZefyrToolbarTheme.fallback(context).copyWith( + color: Colors.grey.shade800, + toggleColor: Colors.grey.shade900, + iconColor: Colors.white, + disabledIconColor: Colors.grey.shade500, + ), + ); + + return ZefyrTheme( + data: theme, + child: ZefyrField( + height: 400.0, + decoration: InputDecoration(labelText: 'Description'), + controller: _zefyrController, + focusNode: _focusNode, + autofocus: true, + physics: ClampingScrollPhysics(), + ), + ); + } +} diff --git a/lib/widgets/elements/Form/Text/RichText/index.dart b/lib/widgets/elements/Form/Text/RichText/index.dart index b5bb5be8..0e2e8451 100644 --- a/lib/widgets/elements/Form/Text/RichText/index.dart +++ b/lib/widgets/elements/Form/Text/RichText/index.dart @@ -30,7 +30,7 @@ class _Demo extends State { return WidgetDemo( title: 'Rich Text', docUrl: 'https://docs.flutter.io/flutter/widgets/RichText-class.html', - codeUrl: 'elements/Form/Text/RichText/index.dart', + codeUrl: 'elements/Form/Text/RichText/demo.dart', contentList: [ intro, RichTextDemo(), diff --git a/pubspec.lock b/pubspec.lock index b4a41158..387aab97 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -14,7 +14,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0" bloc: dependency: "direct main" description: @@ -105,7 +105,7 @@ packages: name: fluro url: "https://pub.dartlang.org" source: hosted - version: "1.4.0" + version: "1.5.0" flutter: dependency: "direct main" description: flutter @@ -178,7 +178,7 @@ packages: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.6.0+8" + version: "0.5.4+3" intl: dependency: "direct main" description: @@ -206,7 +206,7 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.3+1" + version: "0.12.5" meta: dependency: transitive description: @@ -214,6 +214,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + notus: + dependency: transitive + description: + name: notus + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" open_file: dependency: "direct main" description: @@ -227,7 +234,7 @@ packages: name: package_info url: "https://pub.dartlang.org" source: hosted - version: "0.4.0+3" + version: "0.4.0+4" path: dependency: transitive description: @@ -248,7 +255,7 @@ packages: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.4.0" + version: "1.5.0" permission_handler: dependency: "direct main" description: @@ -256,13 +263,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.0" + quill_delta: + dependency: transitive + description: + name: quill_delta + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" quiver: dependency: transitive description: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" + quiver_hashcode: + dependency: transitive + description: + name: quiver_hashcode + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" rxdart: dependency: transitive description: @@ -295,7 +316,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.4" + version: "1.5.5" sqflite: dependency: "direct main" description: @@ -316,7 +337,7 @@ packages: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "1.6.8" + version: "2.0.0" string_scanner: dependency: transitive description: @@ -330,7 +351,7 @@ packages: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.0+1" term_glyph: dependency: transitive description: @@ -344,7 +365,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.2" + version: "0.2.4" typed_data: dependency: transitive description: @@ -358,7 +379,7 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "5.0.2" + version: "5.0.3" vector_math: dependency: transitive description: @@ -366,6 +387,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + zefyr: + dependency: "direct main" + description: + name: zefyr + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" sdks: - dart: ">=2.1.0 <3.0.0" - flutter: ">=1.2.1 <2.0.0" + dart: ">=2.2.0 <3.0.0" + flutter: ">=1.5.0 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index d35086cd..402e30b6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: cupertino_icons: ^0.1.2 event_bus: ^1.0.1 fluro: ^1.3.4 - image_picker: ^0.6.0+1 + image_picker: ^0.5.0 sqflite: ^1.1.5 flutter_markdown: ^0.2.0 url_launcher: ^5.0.2 @@ -48,6 +48,7 @@ dependencies: open_file: ^2.0.1+2 package_info: ^0.4.0+3 flutter_jpush: ^0.0.4 + zefyr: ^0.5.0 dev_dependencies: flutter_test: