1.网路图片字符串(base64),读取到应用的问题
解决方案:MemoryImage(base64Decode(userPic)),将base64码转换为图片
2.定时问题
//延迟1s导航
_t = new Timer(const Duration(milliseconds: 1000), () {
print('延迟1秒执行了导航');
try {
//导航
Navigator.of(context).pushAndRemoveUntil(
new MaterialPageRoute(
builder: (BuildContext context) =>
new VB_POC_2_4_CreateAccount_Completed( accountNo:accountNo,accountPrdcode: accountPrdcode)),
(Route route) => route == null);
} catch (e) {
print(e);
}
});
3.阴影问题
解决方案: 采用Material进行包裹解决
new Material(
shadowColor: Color.fromARGB(204, 58, 204, 225),
elevation: 4.0,
child: ....,
)
4. 下拉输入问题
解决方案 :PopupMenuButton组件解决
5.滑块问题
//
double _maxValue = 100.0;
double _max = 100.0;
final TextEditingController _controller_Amount =
new TextEditingController(text: '0.0');
//滑块输入框
//定义 输入滑块的最大值
Column inputSlider(BuildContext context, String TradeName,
TextEditingController _controller, bool flag) {
return new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
child: new Text(TradeName),
margin: EdgeInsets.only(top: ScreenUtil().setWidth(15)),
height: ScreenUtil().setWidth(18),
),
new SliderTheme(
data: SliderTheme.of(context).copyWith(
activeTrackColor: Color.fromARGB(255, 158, 195, 72),
//实际进度的颜色
inactiveTickMarkColor: Colors.white,
thumbColor: Color.fromARGB(255, 158, 195, 72),
//滑块中间的颜色
inactiveTrackColor: Color.fromARGB(255, 220, 230, 240),
//默认进度条的颜色
valueIndicatorColor: Colors.blue,
//提示进度气派的背景图
valueIndicatorTextStyle: new TextStyle(
color: Colors.white, //气泡中的颜色定义
),
overlayColor: Colors.black12, //滑块边缘颜色
),
child: new Slider(
label: _controller.text,
min: 0.0,
max: _maxValue == null ? 100.0 : _maxValue,
//滑块的最大值
value: double.parse(_controller.text),
onChanged: (value) {
setState(() {
_controller.text = value.floorToDouble().toString();
print(_controller.text);
});
}),
),
new Container(
height: ScreenUtil().setWidth(48),
child: new TextField(
//controller: _controller, //给出提示选项
style: TextStyle(color: Colors.black45),
obscureText: flag,
controller: _controller,
keyboardType: TextInputType.number,
onChanged: (value) {
if (double.parse(_controller.text) > _maxValue) {
setState(() {
_controller.text = _maxValue.toString();
});
}
},
decoration: InputDecoration(prefixText: "\$"),
),
),
],
);
}
6.json串转化为对象问题
import 'package:json_annotation/json_annotation.dart';
part 'customer_management.g.dart';
@JsonSerializable()
class CustomerManagement extends Object {
@JsonKey(name: 'accounts')
List<Accounts> accounts;
@JsonKey(name: 'customerId')
String customerId;
@JsonKey(name: 'customerMail')
String customerMail;
@JsonKey(name: 'customerName')
String customerName;
@JsonKey(name: 'loans')
List<Loans> loans;
@JsonKey(name: 'phoneNo')
String phoneNo;
@JsonKey(name: 'picture')
String picture;
CustomerManagement(this.accounts,this.customerId,this.customerMail,this.customerName,this.loans,this.phoneNo,this.picture,);
factory CustomerManagement.fromJson(Map<String, dynamic> srcJson) => _$CustomerManagementFromJson(srcJson);
Map<String, dynamic> toJson() => _$CustomerManagementToJson(this);
}
@JsonSerializable()
class Accounts extends Object {
@JsonKey(name: 'accountBalance')
double accountBalance;
@JsonKey(name: 'accountNo')
String accountNo;
@JsonKey(name: 'ccy')
String ccy;
@JsonKey(name: 'lastTransactionTime')
String lastTransactionTime;
@JsonKey(name: 'openDate')
String openDate;
@JsonKey(name: 'prdCode')
String prdCode;
Accounts(this.accountBalance,this.accountNo,this.ccy,this.lastTransactionTime,this.openDate,this.prdCode,);
factory Accounts.fromJson(Map<String, dynamic> srcJson) => _$AccountsFromJson(srcJson);
Map<String, dynamic> toJson() => _$AccountsToJson(this);
}
@JsonSerializable()
class Loans extends Object {
@JsonKey(name: 'contractAmount')
double contractAmount;
@JsonKey(name: 'currentBalance')
double currentBalance;
@JsonKey(name: 'openDate')
String openDate;
@JsonKey(name: 'referenceNo')
String referenceNo;
@JsonKey(name: 'repaidAmount')
double repaidAmount;
@JsonKey(name: 'repaymentAccount')
String repaymentAccount;
Loans(this.contractAmount,this.currentBalance,this.openDate,this.referenceNo,this.repaidAmount,this.repaymentAccount,);
factory Loans.fromJson(Map<String, dynamic> srcJson) => _$LoansFromJson(srcJson);
Map<String, dynamic> toJson() => _$LoansToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'customer_management.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CustomerManagement _$CustomerManagementFromJson(Map<String, dynamic> json) {
return CustomerManagement(
(json['accounts'] as List)
?.map((e) =>
e == null ? null : Accounts.fromJson(e as Map<String, dynamic>))
?.toList(),
json['customerId'] as String,
json['customerMail'] as String,
json['customerName'] as String,
(json['loans'] as List)
?.map((e) =>
e == null ? null : Loans.fromJson(e as Map<String, dynamic>))
?.toList(),
json['phoneNo'] as String,
json['picture'] as String);
}
Map<String, dynamic> _$CustomerManagementToJson(CustomerManagement instance) =>
<String, dynamic>{
'accounts': instance.accounts,
'customerId': instance.customerId,
'customerMail': instance.customerMail,
'customerName': instance.customerName,
'loans': instance.loans,
'phoneNo': instance.phoneNo,
'picture': instance.picture
};
Accounts _$AccountsFromJson(Map<String, dynamic> json) {
return Accounts(
(json['accountBalance'] as num)?.toDouble(),
json['accountNo'] as String,
json['ccy'] as String,
json['lastTransactionTime'] as String,
json['openDate'] as String,
json['prdCode'] as String);
}
Map<String, dynamic> _$AccountsToJson(Accounts instance) => <String, dynamic>{
'accountBalance': instance.accountBalance,
'accountNo': instance.accountNo,
'ccy': instance.ccy,
'lastTransactionTime': instance.lastTransactionTime,
'openDate': instance.openDate,
'prdCode': instance.prdCode
};
Loans _$LoansFromJson(Map<String, dynamic> json) {
return Loans(
(json['contractAmount'] as num)?.toDouble(),
(json['currentBalance'] as num)?.toDouble(),
json['openDate'] as String,
json['referenceNo'] as String,
(json['repaidAmount'] as num)?.toDouble(),
json['repaymentAccount'] as String);
}
Map<String, dynamic> _$LoansToJson(Loans instance) => <String, dynamic>{
'contractAmount': instance.contractAmount,
'currentBalance': instance.currentBalance,
'openDate': instance.openDate,
'referenceNo': instance.referenceNo,
'repaidAmount': instance.repaidAmount,
'repaymentAccount': instance.repaymentAccount
};
7.曲线动画问题:无
8.关于flutter开发的心得
8.1 开发目录结构
8.2 screen目录
该目录相当于MVC 的 view 层,控制页面的显示,切记不要在screen中进行逻辑的运算,血泪教训
8.3 service目录
该目录专职向后台发送请求并返回请求的数据,不要将数据的处理放置在该处
8.4 controller目录
该目录专职对后台数据的处理并进行封装,
8.5 domain目录
专职对页面需求数据进行总结,并使controller进行封装
8.6 widget目录 *******
该目录是最重要的,项目的教训,绘制页面前,找出页面组件,是所有的针对每一个页面进行widget定制 并使用container容器进行包装,然后在screen页面进行组装,切记 ,这很重要,要记笔记