Commit 00841322 authored by jinzhu's avatar jinzhu

update flutter

parent 19715414
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.idea" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
<orderEntry type="library" name="Flutter Plugins" level="project" />
<orderEntry type="library" name="Dart Packages" level="project" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/.android/gen" />
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/.android/gen" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/.android/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/.android/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/.android/assets" />
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/.android/libs" />
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/.android/proguard_logs" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$/.android">
<sourceFolder url="file://$MODULE_DIR$/.android/Flutter/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/.android/gen" isTestSource="false" generated="true" />
</content>
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
</component>
</module>
//
// opinion
//
// gmalpha_flutter
// Created by Mikasa on 2019/2/19.
// Copyright © 2019 Gengmei. All rights reserved.
// 意见与建议页面
import 'package:flutter/material.dart';
import 'macros/ALColors.dart';
import 'macros/ALDevice.dart';
// import 'netWork/ALNetWork.dart';
import 'netWork/DioUtil.dart';
// import 'services/ALNetClient.dart';
// import 'hybrid_stack/hybrid_stack_manager_plugin.dart';
class CommentSuggest extends StatelessWidget {
// RouterOption routeOption;
// Opinion(RouterOption option, {Key key}) : super(key: key) {
// routeOption = option;
// }
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '意见与建议',
color: ALColors.Color323232,
theme: ThemeData(
splashColor: Colors.white10, //水波纹的颜色
),
home: CommentSuggestPage(title: '意见和建议',userId: '123'),
);
}
}
class CommentSuggestPage extends StatefulWidget {
CommentSuggestPage({Key key, this.title,this.userId,this.content,this.tel}) : super(key: key);
final String title;
final String userId;
final String content;
final String tel;
@override
_CommentSuggestPageState createState() => _CommentSuggestPageState();
}
class _CommentSuggestPageState extends State<CommentSuggestPage> {
TextEditingController opinionCtrl = TextEditingController();
TextEditingController telCtrl = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// backgroundColor: ALColors.ColorFFFFFF,
backgroundColor: Colors.white10,
leading: new GestureDetector(
child: new Icon(Icons.keyboard_backspace),
onTap: () {
// HybridStackManagerPlugin.hybridStackManagerPlugin.popCurPage();
}),
title: new Text(
"意见与建议",
style: TextStyle(
color: ALColors.Color323232,
fontSize: 16,
fontWeight: FontWeight.bold),
),
),
body: Container(
height: ALDevice.height,
width: ALDevice.width,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
alignment: Alignment.topCenter,
margin:
EdgeInsets.only(left: 30, top: 42, right: 30, bottom: 0),
height: 215,
width: ALDevice.width,
decoration: BoxDecoration(
border: Border.all(color: ALColors.ColorC4C4C4, width: 1),
),
child: TextField(
maxLines: 10,
controller: opinionCtrl,
decoration: InputDecoration(
border: InputBorder.none,
contentPadding: EdgeInsets.all(10),
hintText: '意见与建议',
hintStyle: TextStyle(
color: ALColors.ColorC4C4C4,
fontSize: 14,
),
labelStyle:
TextStyle(color: ALColors.Color323232, fontSize: 19),
),
),
),
Container(
height: 40,
margin: EdgeInsets.only(left: 30, right: 30, top: 30),
padding: EdgeInsets.only(bottom: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(color: ALColors.ColorC4C4C4),
)),
alignment: Alignment.centerLeft,
child: TextField(
controller: telCtrl,
decoration: InputDecoration(
border: InputBorder.none,
contentPadding: EdgeInsets.all(10),
hintText: '联系方式',
hintStyle: TextStyle(
color: ALColors.ColorC4C4C4,
fontSize: 14,
),
labelStyle:
TextStyle(color: ALColors.Color323232, fontSize: 19),
),
),
),
Container(
decoration: BoxDecoration(
border:
Border.all(color: ALColors.Color323232, width: 1.5)),
margin: EdgeInsets.all(30),
padding: EdgeInsets.all(0),
constraints:
BoxConstraints(minWidth: ALDevice.width, minHeight: 45),
alignment: Alignment.center,
child: FlatButton(
onPressed: confirmClick,
child: Text(
'提交',
style:
TextStyle(fontSize: 14, color: ALColors.Color323232),
),
),
),
],
),
),
));
}
void confirmClick() {
confimSuggestInfo();
print('confirmClick');
}
void confimSuggestInfo() {
// ALNetwork(
// success: (NetworkSuccess success){
// setState(() {
// });
// },
// error: (NetworkError error){
// setState(() {
// });
// },
// api: '/api/v1/suggestion',
// params: {'content': 'aaa', 'phone': 'bbb'}
// );
DioUtil().get('/api/v1/suggestion',
data: {
'content': 'aaa',
'phone': '18601965003'
},
errorCallback: (statusCode) {
print('Http error code : $statusCode');
}
).then((data) {
print('Http response: $data');
});
}
}
This diff is collapsed.
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import 'package:flutter/services.dart';
void main(){
return runApp(new InviteSuccessPage());
}
class InviteSuccessPage extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
debugShowCheckedModeBanner: false,
home: InviteSuccessContent(),
theme: ThemeData(
primaryColor: Colors.white,
highlightColor: Colors.white,
splashColor: Colors.white70)
);
}
}
class InviteSuccessContent extends StatelessWidget {
BuildContext context;
void onLeadingClick() {
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
this.context = context;
// TODO: implement build
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
elevation: 0.0,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios), onPressed: onLeadingClick),
),
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizedBox(width: 10.0, height: 70.0),
Image(image: AssetImage('assets/image/1.0x/icon_invite_code_verify_success.png')),
SizedBox(width: 10.0, height: 40.0),
Text("帮助好友解锁成功",
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
SizedBox(width: 10.0, height: 10.0),
Text("同时你已获赠3个可对比明星",
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
SizedBox(width: 10.0, height: 50.0),
RaisedButton(
color: Colors.white,
child: Padding(
padding: EdgeInsets.fromLTRB(0, 15, 0, 15),
child: Text(
"去试试",
style: TextStyle(fontWeight: FontWeight.bold),
)),
elevation: 0.0,
padding: EdgeInsets.fromLTRB(50, 0, 50, 0),
onPressed: () {
},
shape: Border(
top: BorderSide(color: Colors.black, width: 2.0),
right: BorderSide(color: Colors.black, width: 2.0),
bottom: BorderSide(color: Colors.black, width: 2.0),
left: BorderSide(color: Colors.black, width: 2.0)),
),
SizedBox(width: 10.0, height: 130.0),
],
)),
));
}
}
// Copyright 2019 All rights reserved.
// Authors: Mikasa Authors.
import 'dart:ui' show Color;
import 'package:flutter/painting.dart';
// 关于颜色的定义
// Color(0xFF323232);
// FF 表示透明度 323232 表示RGB颜色值
class ALColors {
ALColors._();
static const Color Color323232 = Color(0xFF323232);
static const Color Color464646 = Color(0xFF464646);
static const Color Color999999 = Color(0xFF999999);
static const Color ColorFFFFFF = Color(0xFFffffff);
static const Color Color8E8E8E = Color(0xFF8e8e8e);
static const Color ColorC4C4C4 = Color(0xFFc4c4c4);
static const Color ColorF8F8F8 = Color(0xFFf8f8f8);
static const Color ColorE4E4E4 = Color(0xFFe4e4e4);
static const Color ColorF4F3F8 = Color(0xFFf4f3f8);
static const Color Color282828 = Color(0xFF282828);
static const Color ColorE5E5E5 = Color(0xFFe5e5e5);
}
\ No newline at end of file
//
// ALCommon
//
// gmalpha_flutter
// Created by lxrent on 2019/2/19.
// Copyright © 2019 Gengmei. All rights reserved.
//
import 'package:flutter/material.dart';
import 'ALColors.dart';
class ALAlphaButton extends FlatButton {
// factory ALAlphaButton
/// Create a simple text button.
const ALAlphaButton({
Key key,
@required VoidCallback onPressed,
ValueChanged<bool> onHighlightChanged,
ButtonTextTheme textTheme,
Color textColor,
Color disabledTextColor,
Color color,
Color disabledColor,
Color highlightColor,
Color splashColor,
double minWidth,
Brightness colorBrightness,
EdgeInsetsGeometry padding,
ShapeBorder shape,
Clip clipBehavior = Clip.none,
MaterialTapTargetSize materialTapTargetSize,
@required Widget child,
}) : super(
key: key,
onPressed: onPressed,
onHighlightChanged: onHighlightChanged,
textTheme: textTheme,
textColor: textColor,
disabledTextColor: disabledTextColor,
color: color,
disabledColor: disabledColor,
highlightColor: highlightColor,
splashColor: splashColor,
colorBrightness: colorBrightness,
padding: padding,
shape: shape,
clipBehavior: clipBehavior,
materialTapTargetSize: materialTapTargetSize,
child: child,
);
@override
Widget build(BuildContext context) {
// TODO: implement build
return FlatButton(
textTheme:textTheme,
padding: padding,
child: child,
onPressed: onPressed,
textColor: ALColors.Color323232,
highlightColor:ALColors.Color323232,
color: ALColors.ColorFFFFFF,
shape: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(0)),
borderSide: BorderSide(color: ALColors.Color323232)),
);
}
}
//
// ALDevice
//
// gm_alpha_flutter
// Created by lxrent on 2019/1/30.
// Copyright © 2019 Gengmei. All rights reserved.
//
import 'dart:ui';
class ALDevice {
ALDevice._();
static bool debug = !const bool.fromEnvironment("dart.vm.product");
static double width = window.physicalSize.width;
static double height = window.physicalSize.height;
}
\ No newline at end of file
//
// ALFont
//
// gmalpha_flutter
// Created by lxrent on 2019/2/19.
// Copyright © 2019 Gengmei. All rights reserved.
//
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 = 'https://earth.iyanzhi.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
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
class Method {
static final String get = "GET";
static final String post = "POST";
static final String put = "PUT";
static final String head = "HEAD";
static final String delete = "DELETE";
static final String patch = "PATCH";
}
class DioUtil {
static final DioUtil _instance = DioUtil._init();
static Dio _dio;
static BaseOptions _options = getDefOptions();
factory DioUtil() {
return _instance;
}
DioUtil._init() {
_dio = new Dio();
}
static BaseOptions getDefOptions() {
BaseOptions options = BaseOptions();
options.connectTimeout = 10 * 1000;
options.receiveTimeout = 20 * 1000;
options.contentType = ContentType.parse('application/x-www-form-urlencoded');
Map<String, dynamic> headers = Map<String, dynamic>();
headers['Accept'] = 'application/json';
String platform;
if(Platform.isAndroid) {
platform = "Android";
} else if(Platform.isIOS) {
platform = "IOS";
}
headers['OS'] = platform;
options.headers = headers;
return options;
}
setOptions(BaseOptions options) {
_options = options;
_dio.options = _options;
}
Future<Map<String, dynamic>> get(String path, {pathParams, data, Function errorCallback}) {
return request(path, method: Method.get, pathParams: pathParams, data: data, errorCallback: errorCallback);
}
Future<Map<String, dynamic>> post(String path, {pathParams, data, Function errorCallback}) {
return request(path, method: Method.post, pathParams: pathParams, data: data, errorCallback: errorCallback);
}
Future<Map<String, dynamic>> request(String path,{String method, Map pathParams, data, Function errorCallback}) async {
///restful请求处理
if(pathParams != null) {
pathParams.forEach((key, value) {
if(path.indexOf(key) != -1) {
path = path.replaceAll(":$key", value.toString());
}
});
}
Response response = await _dio.request(path, data: data, options: Options(method: method));
if(response.statusCode == HttpStatus.ok || response.statusCode == HttpStatus.created) {
try {
if(response.data is Map) {
return response.data;
} else {
return json.decode(response.data.toString());
}
} catch(e) {
return null;
}
} else {
_handleHttpError(response.statusCode);
if(errorCallback != null) {
errorCallback(response.statusCode);
}
return null;
}
}
///处理Http错误码
void _handleHttpError(int errorCode) {
}
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart';
class FirstRouteWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First RouteAAA'),
),
body: Center(
child: RaisedButton(
child: Text('Open second route'),
onPressed: () {
FlutterBoost.singleton.openPage("second", {}, animated: true);
},
),
),
);
}
}
class SecondRouteWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Route"),
),
body: Center(
child: RaisedButton(
onPressed: () {
// Navigate back to first route when tapped.
FlutterBoost.singleton.closePageForContext(context);
},
child: Text('Go back!'),
),
),
);
}
}
class TabRouteWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Tab Route"),
),
body: Center(
child: RaisedButton(
onPressed: () {
FlutterBoost.singleton.openPage("second", {}, animated: true);
},
child: Text('Open second route'),
),
),
);
}
}
class FlutterRouteWidget extends StatelessWidget {
final String message;
FlutterRouteWidget({this.message});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('flutter_boost_example'),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: const EdgeInsets.only(top: 80.0),
child: Text(
message ?? "This is a flutter activity",
style: TextStyle(fontSize: 28.0, color: Colors.blue),
),
alignment: AlignmentDirectional.center,
),
Expanded(child: Container()),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.all(8.0),
color: Colors.yellow,
child: Text(
'open native page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
///后面的参数会在native的IPlatform.startActivity方法回调中拼接到url的query部分。
///例如:sample://nativePage?aaa=bbb
onTap: () =>
FlutterBoost.singleton.openPage("sample://nativePage", {
"query": {"aaa": "bbb"}
}),
),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.all(8.0),
color: Colors.yellow,
child: Text(
'open flutter page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
///后面的参数会在native的IPlatform.startActivity方法回调中拼接到url的query部分。
///例如:sample://nativePage?aaa=bbb
onTap: () =>
FlutterBoost.singleton.openPage("sample://flutterPage", {
"query": {"aaa": "bbb"}
}),
),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.all(8.0),
color: Colors.yellow,
child: Text(
'push flutter widget',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => PushWidget()));
},
),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 80.0),
color: Colors.yellow,
child: Text(
'open flutter fragment page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () => FlutterBoost.singleton
.openPage("sample://flutterFragmentPage", {}),
)
],
),
);
}
}
class FragmentRouteWidget extends StatelessWidget {
final Map params;
FragmentRouteWidget(this.params);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('flutter_boost_example'),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: const EdgeInsets.only(top: 80.0),
child: Text(
"This is a flutter fragment",
style: TextStyle(fontSize: 28.0, color: Colors.blue),
),
alignment: AlignmentDirectional.center,
),
Container(
margin: const EdgeInsets.only(top: 32.0),
child: Text(
params['tag'] ?? '',
style: TextStyle(fontSize: 28.0, color: Colors.red),
),
alignment: AlignmentDirectional.center,
),
Expanded(child: Container()),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.all(8.0),
color: Colors.yellow,
child: Text(
'open native page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () =>
FlutterBoost.singleton.openPage("sample://nativePage", {}),
),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.all(8.0),
color: Colors.yellow,
child: Text(
'open flutter page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () =>
FlutterBoost.singleton.openPage("sample://flutterPage", {}),
),
InkWell(
child: Container(
padding: const EdgeInsets.all(8.0),
margin: const EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 80.0),
color: Colors.yellow,
child: Text(
'open flutter fragment page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () => FlutterBoost.singleton
.openPage("sample://flutterFragmentPage", {}),
)
],
),
);
}
}
class PushWidget extends StatefulWidget {
@override
_PushWidgetState createState() => _PushWidgetState();
}
class _PushWidgetState extends State<PushWidget> {
VoidCallback _backPressedListenerUnsub;
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
// if (_backPressedListenerUnsub == null) {
// _backPressedListenerUnsub =
// BoostContainer.of(context).addBackPressedListener(() {
// if (BoostContainer.of(context).onstage &&
// ModalRoute.of(context).isCurrent) {
// Navigator.pop(context);
// }
// });
// }
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_backPressedListenerUnsub?.call();
}
@override
Widget build(BuildContext context) {
return FlutterRouteWidget(message:"Pushed Widget");
}
}
This diff is collapsed.
import 'package:flutter/material.dart';
import 'animationTest.dart';
import 'layoutTest.dart';
class MyApplicaitonTest extends StatefulWidget {
@override
_MyApplicaitonTestState createState() => _MyApplicaitonTestState();
}
class _MyApplicaitonTestState extends State<MyApplicaitonTest> {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WidgetA(),
routes: {
"/layouttest": layoutTestPage,
},
);
}
Widget layoutTestPage(BuildContext context) {
return LayoutTest();
}
}
class WidgetA extends StatefulWidget {
final Widget child;
WidgetA({Key key, this.child}) : super(key: key);
_WidgetAState createState() => _WidgetAState();
}
class _WidgetAState extends State<WidgetA> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('text'),
),
body: Container(
padding: EdgeInsets.all(32.0),
child: Center(
child: Column(
children: <Widget>[
Center(
<<<<<<< HEAD
// child1: Text('data'),
=======
>>>>>>> dev
child: FlatButton(
child: Text('hit me'),
onPressed: (){
Navigator.of(context).pushNamed("/layouttest");
},
),
)
],
),
),
),
);
}
}
\ No newline at end of file
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 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class PlatformChannel extends StatefulWidget {
@override
_PlatformChannelState createState() => _PlatformChannelState();
}
class _PlatformChannelState extends State<PlatformChannel> {
static const MethodChannel methodChannel =
MethodChannel('samples.flutter.io/battery');
static const EventChannel eventChannel =
EventChannel('samples.flutter.io/charging');
String _batteryLevel = 'Battery level: unknown.';
String _chargingStatus = 'Battery status: unknown.';
Future<void> _getBatteryLevel() async {
String batteryLevel;
try {
final int result = await methodChannel.invokeMethod('getBatteryLevel');
batteryLevel = 'Battery level: $result%.';
} on PlatformException {
batteryLevel = 'Failed to get battery level.';
}
setState(() {
_batteryLevel = batteryLevel;
});
}
@override
void initState() {
super.initState();
eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
}
void _onEvent(Object event) {
setState(() {
_chargingStatus =
"Battery status: ${event == 'charging' ? '' : 'dis'}charging.";
});
}
void _onError(Object error) {
setState(() {
_chargingStatus = 'Battery status: unknown.';
});
}
@override
Widget build(BuildContext context) {
return Material(
child: Scaffold(
appBar: AppBar(
title: Text('Channel test'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_batteryLevel, key: const Key('Battery level label')),
Padding(
padding: const EdgeInsets.all(16.0),
child: RaisedButton(
child: const Text('Refresh'),
onPressed: _getBatteryLevel,
),
),
],
),
Text(_chargingStatus),
],
),
),
),
);
}
}
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 '../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
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