flutter安卓手机项目遇到的问题

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页面进行组装,切记 ,这很重要,要记笔记

猜你喜欢

转载自blog.csdn.net/weixin_43231352/article/details/86546625