Commit 0221e2f2 authored by ouxiang's avatar ouxiang

merge & fix conflicts

parents 035ceca6 0eb56c93
import 'package:flutter/material.dart';
<<<<<<< HEAD
import 'hybrid_stack/hybrid_stack_manager_plugin.dart';
import 'app_config.dart';
import 'my_app.dart';
......@@ -20,7 +21,125 @@ void main() async {
url: args["url"], query: args["query"], params: args["params"]);
Router.sharedInstance().pushPageWithOptionsFromFlutter(
routeOption: routeOption, animated: false);
=======
import 'testPage/battery.dart';
import 'testPage/assetsChannel.dart';
import 'testPage/layoutTest.dart';
import 'testPage/animationTest.dart';
import 'testPage/netWorkTest.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
routes: {
"/channeltest": batteryChannelPage,
"/assetschannel": assetsChannelPage,
"/layouttest": layoutTestPage,
"/animationtest": animationTestPage,
"/networktest": netWorkTestPage,
},
);
}
Widget batteryChannelPage(BuildContext context) {
return PlatformChannel();
}
Widget assetsChannelPage(BuildContext context) {
return AssestPlatformChannel();
>>>>>>> ouxiang_dev
}
Widget layoutTestPage(BuildContext context) {
return LayoutTest();
}
Widget animationTestPage(BuildContext context) {
return AnimationPage();
}
Widget netWorkTestPage(BuildContext context) {
return NetWorkTestPage();
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
FlatButton(
child: Text('channel test'),
color: Colors.greenAccent,
onPressed: (){Navigator.pushNamed(context, "/channeltest");},
),
FlatButton(
child: Text('assets test'),
color: Colors.greenAccent,
onPressed: (){Navigator.pushNamed(context, "/assetschannel");},
),
FlatButton(
child: Text('layout test'),
color: Colors.greenAccent,
onPressed: (){Navigator.pushNamed(context, "/layouttest");},
),
FlatButton(
child: Text('animation test'),
color: Colors.greenAccent,
onPressed: (){Navigator.pushNamed(context, "/animationtest");},
),
FlatButton(
child: Text('network test'),
color: Colors.greenAccent,
onPressed: (){Navigator.pushNamed(context, "/networktest");},
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
import 'package:dio/dio.dart';
import 'dart:async';
import 'dart:convert';
class NetworkSuccess {
NetworkSuccess({this.data});
final Map data;
Map get dataMap{
if (this.data.runtimeType == Map) {
return data;
}else return null;
}
}
class NetworkError {
NetworkError({this.error});
final Map error;
int get errorCode{
if (this.error.runtimeType == Map) {
return error['errorCode'];
}else return null;
}
}
class ALURL {
ALURL({this.api}) : assert(api != null);
final String api;
static final baseUrl = 'http://earth.igengmei.com';
String get originUrl => (baseUrl + api);
}
class ALNetworkHeader {
BaseOptions get options{
BaseOptions option = BaseOptions();
option.headers =this.header;
return option;
}
Map<String, dynamic> get header{
return {
'Host': 'earth.igengmei.com',
'Accept': '*/*',
'Cookie': '_gm_token=fb20fe1550833249; sessionid=qntnckxv4n4nzrl49jmaesc5ylru92yt; _gtid=ae355f92310911e9905700163e0a7a995288',
'User-Agent': 'GMAlpha/1.3.0 (iPhone; iOS 12.1.2; Scale/2.00)',
'Accept-Language': 'en-CN;q=1, zh-Hans-CN;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive'
};
}
Map<String, dynamic> get params {
return {
'platform': 'iPhone',
'os_version':'12.1.2',
'version':'1.3.0',
'model':'iPhone%206s',
'release':'0',
'idfa':'119A3567-6C81-40EA-A3ED-A63F7DCAD86B',
'idfv':'78BE2D94-7252-4C18-A816-2CEE6350B076',
'device_id':'119A3567-6C81-40EA-A3ED-A63F7DCAD86B',
'channel':'App%20Store',
'app_name':'gengmeiios',
'current_city_id':'worldwide',
'lat':'0',
'lng':'0',
'is_WiFi':'(null)',
'phone_id':'iPhone8'
};
}
}
// 管理任务
class ALNetworkTask {
ALNetworkTask({this.serviceInstance,this.networkContext, this.response});
final Dio serviceInstance;
final ALNetwork networkContext;
Response response;
void cancle(String api) {
// CancelToken
}
}
typedef NetworkSuccessCallback = void Function(NetworkSuccess success);
typedef NetWorkErrorCallback = void Function(NetworkError error);
typedef ProgressCallback = void Function(int count, int total);
class ALNetwork {
/**
* 任务映射表
* 外部可以通过 ALNetwork.taskMap 获取
*/
static Map<String, ALNetworkTask> taskMap = {};
const ALNetwork(
{this.success,
this.error,
this.progress,
this.api,
this.params,
this.formData}) : assert(api != null);
final NetworkSuccessCallback success;
final NetWorkErrorCallback error;
final ProgressCallback progress;
final String api;
final Map params;
final FormData formData;
ALURL get url => ALURL(api: this.api);
///post
Future<void> post() async{
ALNetworkTask task = _initNetworkEngin();
task.response = await task.serviceInstance.post(this.url.originUrl, data: this.params);
_handleNetworkService(task.response);
}
/**
* FormData formData = new FormData.from({
"name": "simon",
"age": 25,
});
*/
Future<void> postFormData() async{
ALNetworkTask task = _initNetworkEngin();
task.response = await task.serviceInstance.post(this.url.originUrl, data: this.formData);
_handleNetworkService(task.response);
}
///get
Future<void> excuteGet() async{
ALNetworkTask task = _initNetworkEngin();
task.response = await task.serviceInstance.get(this.url.originUrl, queryParameters: ALNetworkHeader().params);
_handleNetworkService(task.response);
}
/**
* FormData formData = new FormData.from({
"name": "wendux",
"age": 25,
"file1": new UploadFileInfo(new File("./upload.txt"), "upload1.txt"),
// upload with bytes (List<int>)
"file2": new UploadFileInfo.fromBytes(
utf8.encode("hello world"), "word.txt"),
// Pass multiple files within an Array
"files": [
new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"),
new UploadFileInfo(new File("./example/upload.txt"), "upload.txt")
]
});
*/
Future<void> upload() async{
ALNetworkTask task = _initNetworkEngin();
task.response = await task.serviceInstance.post(this.url.originUrl, data: this.formData,onSendProgress: this.progress);
_handleNetworkService(task.response);
}
///download
Future<void> download(String filePath) async{
ALNetworkTask task = _initNetworkEngin();
task.response = await task.serviceInstance.download(this.url.originUrl, filePath, onReceiveProgress: this.progress);
_handleNetworkService(task.response);
}
ALNetworkTask _initNetworkEngin(){
Response response;
Dio dio = new Dio();
dio.options = ALNetworkHeader().options;
ALNetworkTask task = ALNetworkTask(
serviceInstance:dio,
response: response,
networkContext: this
);
//handle task
taskMap[this.api] = task;
return task;
}
void _handleNetworkService(Response response) {
var data = jsonDecode(response.toString());
if(data.runtimeType ==Map && response.statusCode == 200){
if (data['error'] == 0){
this.success(NetworkSuccess(data: data));
}else{
this.error(NetworkError(error: data));
}
}else{
this.error(NetworkError(error: data));
}
//remove task
taskMap.remove(this.api);
}
}
\ No newline at end of file
......@@ -19,7 +19,6 @@ class ALServers {
static const int ConnetTimeOut = 5000; // 连接超时
static const int ReceiveTimeOut = 3000; // 接收超时
static const String API_SETTING_COUNTRYLIST = '/api/v1/countries';//国家列表
static const String API_LOGOUT = '/api/account/logout'; // 注销
static const String API_ACCOUNT_LOGIN_PWD ='/api/account/login_pwd';// 账号密码登录
......@@ -27,8 +26,11 @@ class ALServers {
static const String API_ACCOUNT_REGISTER = '/api/account/register';// 用户注册
static const String API_ACCOUNT_GETVFC = '/api/account/get_vfc';// 获取验证码
static const String API_ACCOUNT_THIRDPART = '/api/account/thirdparty_login'; // 三方账户登录
<<<<<<< HEAD
static const String API_ACCOUNT_SUGGESTION = "/api/v1/suggestion"; // 意见与建议
=======
>>>>>>> ouxiang_dev
// HOST
}
// HOST
......
This diff is collapsed.
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class AssestPlatformChannel extends StatefulWidget {
@override
_AssestPlatformChannelState createState() => _AssestPlatformChannelState();
}
class _AssestPlatformChannelState extends State<AssestPlatformChannel> {
static const MethodChannel methodChannel =
MethodChannel('GMAssetsMethodChannelName');
static const EventChannel eventChannel =
EventChannel('GMAssetsEventChannelName');
Uint8List _imageData;
String _tttt = 'ssss';
Future<void> _editPortrait() async {
Uint8List imageData;
try {
final result = await methodChannel.invokeMethod('editPortrait');
imageData = result;
} on PlatformException {
imageData = null;
}
setState(() {
_imageData = imageData;
_tttt = _imageData.runtimeType.toString();
});
}
@override
void initState() {
super.initState();
eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
}
void _onEvent(Object event) {
setState(() {});
}
void _onError(Object error) {
setState(() {});
}
@override
Widget build(BuildContext context) {
return Material(
child: Scaffold(
appBar: AppBar(
title: Text('editPortrait test'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_tttt, key: const Key('editPortrait')),
Padding(
padding: const EdgeInsets.all(16.0),
child: RaisedButton(
child: const Text('editPortrait'),
onPressed: _editPortrait,
),
),
Container(
color: Colors.pink[300],
width: 300,
height: 300,
child: _imageWidget()
)
],
),
],
),
),
),
);
}
Widget _imageWidget(){
if (_imageData != null) {
return Image.memory(_imageData,
width: 200,
height: 200,
);
}else{
return Center(
child: Text('I am not image'+_tttt),
);
}
}
}
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
class LayoutTest extends StatefulWidget {
@override
_LayoutTestState createState() => _LayoutTestState();
}
class _LayoutTestState extends State<LayoutTest> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Layout Test'),
),
body: Container(
padding: EdgeInsets.all(32.0),
child: Center(
child: Column(
children: <Widget>[
_renderBoxTest(),
_containerTestWidget()
],
),
),
),
);
}
Widget _renderBoxTest(){
return Container(
color: Colors.greenAccent,
constraints: BoxConstraints(
maxWidth: double.infinity,
minWidth: 200.0,
maxHeight: 200,
minHeight: 100.0),
child: Stingy(
child: Container(
color: Colors.pink[200],
),
),
);
}
// www.baidu.com/img/bd_logo1.png
Widget _containerTestWidget(){
return Container(
constraints: BoxConstraints.expand(
height: Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,
),
padding: const EdgeInsets.all(8.0),
color: Colors.greenAccent.shade700,
alignment: Alignment.bottomCenter,
child: Text('Hello World', style: Theme.of(context).textTheme.display1.copyWith(color: Colors.orange[200])),
foregroundDecoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('https://www.example.com/images/frame.png'),
centerSlice: Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
),
),
transform: Matrix4.rotationZ(0.1),
);
}
}
class Stingy extends SingleChildRenderObjectWidget {
Stingy({Widget child}) : super(child: child);
@override
RenderObject createRenderObject(BuildContext context) {
// TODO: implement createRenderObject
return RenderStingy();
}
}
class RenderStingy extends RenderShiftedBox {
RenderStingy() : super(null);
// 绘制方法
@override
void paint(PaintingContext context, Offset offset) {
// TODO: implement paint
super.paint(context, offset);
}
// 布局方法
@override
void performLayout() {
// 布局 child 确定 child 的 size
child.layout(
BoxConstraints(
minHeight: 0.0,
maxHeight: constraints.minHeight,
minWidth: 0.0,
maxWidth: constraints.minWidth),
parentUsesSize: true);
print('constraints: $constraints');
// child 的 Offset
final BoxParentData childParentData = child.parentData;
childParentData.offset = Offset(constraints.maxWidth - child.size.width,
constraints.maxHeight - child.size.height);
print('childParentData: $childParentData');
// 确定自己(父节点)的大小,并重绘父节点。不重设,不能触发重绘,例如在热重载的情景中,重设container.maxHeight,无效
size = Size(constraints.maxWidth, constraints.maxHeight);
print('size: $size');
}
}
import 'package:flutter/material.dart';
import 'package:my_flutter/netWork/ALNetWork.dart';
void main() => runApp(MaterialApp(
home: NetWorkTestPage(),
));
class NetWorkTestPage extends StatefulWidget {
@override
_NetWorkTestPageState createState() => _NetWorkTestPageState();
}
class _NetWorkTestPageState extends State<NetWorkTestPage> {
String _string = 'lalala';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('NewtWork Test Page'),
),
body: Container(
padding: EdgeInsets.all(32.0),
child: Center(
child: Column(
children: <Widget>[
FlatButton(
child: Text('newtWorkTest'),
color: Colors.greenAccent,
onPressed: _netWork,
),
Container(
color: Colors.greenAccent,
constraints: BoxConstraints(
maxWidth: double.infinity,
minWidth: 200.0,
maxHeight: 500,
minHeight: 200.0),
child: Text('data:' + _string),
),
],
),
),
),
);
}
void _netWork() {
ALNetwork(
success: (NetworkSuccess success){
print(success.data);
setState(() {
_string = success.data.toString();
});
},
error: (NetworkError error){
print(error.error);
setState(() {
_string = error.error.toString();
});
},
api: '/api/v1/index'
)
..excuteGet();
}
}
\ No newline at end of file
# Generated by pub
# See https://www.dartlang.org/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.1"
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
cookie_jar:
dependency: transitive
description:
name: cookie_jar
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
device_info:
......@@ -54,9 +82,23 @@ packages:
dependency: "direct main"
description:
name: dio
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
event_bus:
dependency: "direct main"
description:
name: event_bus
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
fluro:
dependency: "direct main"
description:
name: fluro
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.0"
flutter:
dependency: "direct main"
description: flutter
......@@ -67,53 +109,74 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
hybrid_stack_manager:
dependency: "direct main"
description:
name: hybrid_stack_manager
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.1"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.7"
json_annotation:
dependency: "direct main"
description:
name: json_annotation
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.3+1"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.2"
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.0+1"
version: "2.1.1"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.3"
sky_engine:
......@@ -125,58 +188,65 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.8"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.1"
sdks:
dart: ">=2.0.0 <3.0.0"
flutter: ">=0.1.4 <2.0.0"
......@@ -21,14 +21,14 @@ dependencies:
sdk: flutter
cupertino_icons: ^0.1.2
fluro: ^1.3.4
hybrid_stack_manager: 0.1.1
json_annotation: ^2.0.0
# 网络
dio: ^2.0.0
# 数据存储
shared_preferences: ^0.4.2
device_info: ^0.4.0
path_provider: ^0.5.0
event_bus: ^1.0.1
dev_dependencies:
flutter_test:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment