flutter填坑记录(更新中)

  1. 问题: setState是从新渲染和以前有区别的widget,有时候会遇到一些flutter识别不出来widget已经改变的状况
    场景描述: 解决问题的场景是:一个StatefulWidget A里面使用了另外一个StatefulWidget B时,更新B时区别未识别
    解决办法: 将B移入A,即一个界面变成一个StatefulWidgetandroid

  2. 问题: Scaffold.of() called with a context that does not contain a Scaffold. No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of(). This usually happens when the context provided is from the same StatefulWidget as that whose build function actually creates the Scaffold widget being sought. There are several ways to avoid this problem. The simplest is to use a Builder to get a context that is “under” the Scaffold. For an example of this, please see the documentation for Scaffold.of(): .
    解决办法:
    方法一: 将报错的widget从原来的类移出来,从新写一个StatelessWidget或者StatefulWidget的类,其中build函数将原widget放入Scaffold中来写。若是进一步有报错讲h<infinity,即高度无限,将Scaffold放入一个有高度限制的Container便可。
    方法二: 使用GlobalKey,下面以SnackBar做为例子git

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
复制代码
_scaffoldKey.currentState.showSnackBar(
  SnackBar(
    content: Text('Assign a GlobalKey to the Scaffold'),
    duration: Duration(seconds: 3),
  ));
复制代码
  1. 问题

报错:github

FAILURE: Build failed with an exception.

* What went wrong:
> no meothd jcenter found for root build.gradle
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
复制代码

build.gradle文件:bash

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
复制代码

场景描述: 从新安装AS以后构建项目时报的错
解决方案: 使用新安装的AS从新建立一个flutter项目,而后将里面对应的build.gradle内容拷贝过来替换。在本例中,替换的内容为:app

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

复制代码
  1. 问题: 真机调试,连上手机没有反应
    解决:
    查看是否设置成开发者模式
    重启电脑、重启手机,从新拔插USB
    查看手机数据线是否有数据存储功能
    安装豌豆荚软件装手机驱动(该软件自动安装手机驱动)
  2. 问题: 迁移到AndroidX工做空间
    解决:
    第一步,open android module
    open_android_module

    第二步,新窗口中打开后,进行gradle build,构建过程可能会有报错,逐一解决,只有build成功结束,才能够迁移工做空间
    gradle_build
    第三步,开始迁移,迁移成功后返回flutter项目便可
    migrate_to_androidx
  3. 问题: 没有删除干净AS
    解决:
    第一步,运行android studio安装目录下的Uninstall.exe程序
    第二步,删除C:\Users\18056\下面的.android文件夹
    第三步,删除C:\Users\18056\AppData\Local下面的Android文件夹以及对应AS版本的例如.AndroidStudio3.4文件夹
  4. 问题: 获取调试版本和发布版本的SHA1(android)
    解决:

第一步,先要生成签名的apk,方式是,打开flutter的android module,build成功后,按照下图点击,记住jks文件密码和位置 less

generate signed apk

第二步,打开终端,欲获得调试版本的SHA1,运行(注意须要安装了jdk)异步

cd C:\Users\18056\.android
keytool -list -v -keystore debug.keystore
复制代码

欲获得发布版本的SHA1,运行ide

keytool -list -v -keystore (第一步生成的jks文件地址)
复制代码

SHA1显示以下 函数

  1. 问题: TextField控件输入内容后,点击屏幕其它地方,内容被清空
    场景:封装全部信息输入框为一个类,控制器所有在构建函数时新建
    解决: 将TextEditingController放在类外便可布局

  2. 很好的ui设计模板:
    里面精美界面多,并且有三篇填坑文章 github.com/simplezhli/…

  3. 区分margin,padding,aligment:
    margin:与同级控件之间的位置关系
    padding:与父控件之间位置关系
    aligment:子控件与本身的位置关系

  4. 不要想着statelessWidget有方法实现setState
    以前尝试过有状态类监听无状态类变量判断是否setState,后面发现存在异步问题,此方法不可行

  5. 问题: gradle contains unsupport kotlin plugins
    场景:flutter 打开android module,build时候
    解决: 缘由是IDE的kotlin version和build gradle中的kotlin version不一致,as的解决办法是file-->settings-->languagexx-->查看IDE的kotlin版本,而后打开project下面的build gradle,将kotlin version修改为一致的

  6. 问题: flutter 调试的时候和release版本的起始页不一致
    解决: 在使用AS debug的时候,本身指定了起始页,即main函数入口,可是release版本的入口就是main.dart文件

  7. 问题: debug版本显示的界面和release版本显示界面不一致
    解决: google以后发现是由于有一些变量声明在类外,release编译的时候会自动忽视这些声明,应当写在类内

  8. 问题: debug版本显示的界面和release版本显示界面不一致
    解决: google以后发现是由于有一些变量声明在类外,release编译的时候会自动忽视这些声明,应当写在类内,

  9. 问题: 更新了iconfont.tff文件,也从新packages get了,可是图标获取不到 解决: 中止代码运行,flutter clean以后再次运行,若是是assets加了一个图片则不须要

  10. 问题: column中的widgets没法居中对齐 解决: widgets中取消使用stack布局便可,再添加

crossAxisAlignment: CrossAxisAlignment.center,
复制代码
  1. 问题: 全部页面跳转均为黑屏 解决: 是由于使用了有一个界面出现了两个floatingActionBar,去掉一个就行了
相关文章
相关标签/搜索