GithubHelp home page GithubHelp logo

sky24n / flutter_wanandroid Goto Github PK

View Code? Open in Web Editor NEW
5.6K 138.0 1.2K 2.04 MB

🔥🔥🔥 基于Google Flutter的WanAndroid客户端,支持Android和iOS。包括BLoC、RxDart 、国际化、主题色、启动页、引导页!

License: BSD 2-Clause "Simplified" License

Java 0.05% Objective-C 0.28% Dart 98.63% Ruby 0.82% Shell 0.21%
flutter bloc rxdart wanandroid

flutter_wanandroid's Introduction

Flutter版 WanAndroid App.

本项目包含启动页,引导页,主题色,国际化,Bloc,RxDart。拥有较好的项目结构,比较规范的代码。 App拥有精致的UI界面,统一的交互,侧滑退出,列表和Web界面均提供快速滚动至顶部功能。

有关项目最新动态,可以关注App内第一条Hot Item信息。

A GitHub client app developed with Flutter, which supports Android iOS Web.
Web :Flutter Web.

运行本项目注意!!!

Support [√] Flutter (Channel stable, v1.17.0).

由于在国内访问Flutter有时可能会受到限制,clone项目后,请勿直接packages get,建议运行如下目录行:

export PUB_HOSTED_URL=https://pub.flutter-io.cn  
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn  
flutter packages get
flutter run --release

v0.2.6 (2020.05.08)
Support [√] Flutter (Channel stable, v1.17.0).
版本升级功能(仅供参考)

  1. base_library Flutter基础组件库,方便多个项目共用。
  2. login_demo 关于App启动时,未登录跳登录页,已登录进主页。
  3. flutter_gallery 也许是Google官方最后一个版本的gallery(旧版)。

App目录结构

  • |--lib
    • |-- blocs (bloc相关)
    • |-- common (常用类,例如常量Constant)
    • |-- data (网络数据层)
    • |-- db (数据库)
    • |-- demos (flutter demos)
    • |-- event (事件类)
    • |-- models (实体类)
    • |-- res (资源文件,string,colors,dimens,styles)
    • |-- ui (界面相关page,dialog,widgets)
    • |-- utils (工具类)

data网络数据层

  • |--data
    • |-- api (url字段)
    • |-- net (单例DioUtil)
    • |-- protocol (请求与返回实体类)
    • |-- repository (接口请求&解析)

api

class WanAndroidApi {
  /// 首页banner http://www.wanandroid.com/banner/json
  static const String BANNER = "banner";
  static const String USER_REGISTER = "user/register"; //注册
  static const String USER_LOGIN = "user/login"; //登录
  static const String USER_LOGOUT = "user/logout"; //退出

  // 拼接url
  static String getPath({String path: '', int page, String resType: 'json'}) {
    StringBuffer sb = new StringBuffer(path);
    if (page != null) {
      sb.write('/$page');
    }
    if (resType != null && resType.isNotEmpty) {
      sb.write('/$resType');
    }
    return sb.toString();
  }
}

网络请求工具类 DioUtil

// 打开debug模式.
DioUtil.openDebug();   
  
// 配置网络参数.
Options options = DioUtil.getDefOptions();
options.baseUrl = "http://www.wanandroid.com/";
HttpConfig config = new HttpConfig(options: options);
DioUtil().setConfig(config);
  
// 两种单例请求方式.
DioUtil().request<List>(Method.get, "banner/json");
DioUtil.getInstance().request(Method.get, "banner/json");
  
//示例
LoginReq req = new LoginReq('username', 'password');
DioUtil().request(Method.post, "user/login",data: req.toJson());
  
//示例
FormData formData = new FormData.from({
      "username": "username",
      "password": "password",
    });
DioUtil().requestR(Method.post, "user/login",data: rformData);

请求与返回实体类 protocol

class LoginReq {
  String username;
  String password;

  LoginReq(this.username, this.password);

  LoginReq.fromJson(Map<String, dynamic> json)
      : username = json['username'],
        password = json['password'];

  Map<String, dynamic> toJson() => {
    'username': username,
    'password': password,
  };

  @override
  String toString() {
    StringBuffer sb = new StringBuffer('{');
    sb.write("\"username\":\"$username\"");
    sb.write(",\"password\":$password");
    sb.write('}');
    return sb.toString();
  }
}

接口请求&解析 repository

 class WanRepository {
  Future<List<BannerModel>> getBanner() async {
    BaseResp<List> baseResp = await DioUtil().request<List>(
        Method.get, WanAndroidApi.getPath(path: WanAndroidApi.BANNER));
    List<BannerModel> bannerList;
    if (baseResp.code != Constant.STATUS_SUCCESS) {
      return new Future.error(baseResp.msg);
    }
    if (baseResp.data != null) {
      bannerList = baseResp.data.map((value) {
        return BannerModel.fromJson(value);
      }).toList();
    }
    return bannerList;
  }
}

资源文件 res

  • |--res
    • |-- colors.dart
    • |-- dimens.dart
    • |-- strings.dart
    • |-- styles.dart

colors.dart

class Colours {
  static const Color app_main = Color(0xFF666666);  
  
  static const Color text_dark = Color(0xFF333333);
  static const Color text_normal = Color(0xFF666666);
  static const Color text_gray = Color(0xFF999999);  
}

dimens.dart

class Dimens {
  static const double font_sp12 = 12;
  static const double font_sp14 = 14;
  static const double font_sp16 = 16;
  
  static const double gap_dp5 = 5;
  static const double gap_dp10 = 10;
}

strings.dart

class Ids {
  static const String titleHome = 'title_home';
}  
Map<String, Map<String, Map<String, String>>> localizedValues = {
  'en': {
    'US': {
      Ids.titleHome: 'Home',
    }
  },
  'zh': {
    'CN': {
      Ids.titleHome: '主页',
    },
    'HK': {
      Ids.titleHome: '主頁',
    },
    'TW': {
      Ids.titleHome: '主頁',
    }
  }
};

styles.dart

class TextStyles {
  static TextStyle listTitle = TextStyle(
    fontSize: Dimens.font_sp16,
    color: Colours.text_dark,
    fontWeight: FontWeight.bold,
  );
  static TextStyle listContent = TextStyle(
    fontSize: Dimens.font_sp14,
    color: Colours.text_normal,
  );
  static TextStyle listExtra = TextStyle(
    fontSize: Dimens.font_sp12,
    color: Colours.text_gray,
  );
}
//  间隔
class Gaps {
  // 水平间隔
  static Widget hGap5 = new SizedBox(width: Dimens.gap_dp5);
  static Widget hGap10 = new SizedBox(width: Dimens.gap_dp10);
  // 垂直间隔
  static Widget vGap5 = new SizedBox(height: Dimens.gap_dp5);
  static Widget vGap10 = new SizedBox(height: Dimens.gap_dp10);
}

Flutter 国际化相关 fluintl

fluintl是一个为应用提供国际化的库,可快速集成实现应用多语言。该库封装了一个国际化支持类,通过提供统一方法getString(id)获取字符串。

// 在MyApp initState配置多语言资源
setLocalizedValues(localizedValues); //配置多语言资源
// 在MaterialApp指定localizationsDelegates和supportedLocales
MaterialApp(  
   home: MyHomePage(),  
   localizationsDelegates: [  
   GlobalMaterialLocalizations.delegate,  
   GlobalWidgetsLocalizations.delegate,  
   CustomLocalizations.delegate //设置本地化代理     
   ],  
   supportedLocales: CustomLocalizations.supportedLocales,//设置支持本地化语言集合     
); 
// 字符串获取
IntlUtil.getString(context, Ids.titleHome);
CustomLocalizations.of(context).getString(StringIds.titleHome);  

// 支持复用。替换字符串格式要求:'%\${index}\$s' ,{index} 第几个参数,从0开始。
Ids.click_times: '%\$0\$s点击了%\$1\$s次',   
IntlUtil.getString(context, Ids.click_times, params: ['Tom', '$_counter'])  
// print: Tom点击了0次

Flutter 屏幕适配 ScreenUtil

方案一、不依赖context

// 步骤1
// 如果设计稿尺寸默认配置一致,无需该设置。  配置设计稿尺寸 默认 360.0 / 640.0 / 3.0
setDesignWHD(_designW,_designH,_designD);  
  
// 步骤2
// 在MainPageState build 调用MediaQuery.of(context)
class MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    // 在 MainPageState build 调用 MediaQuery.of(context)
    MediaQuery.of(context);
    return new Scaffold(
      appBar: new AppBar(),
    );
  }
}  
  
// 步骤3
ScreenUtil.getInstance().screenWidth
ScreenUtil.getInstance().screenHeight
//屏幕适配相关  
ScreenUtil.getInstance().getWidth(size); //返回根据屏幕宽适配后尺寸(单位 dp or pt)
ScreenUtil.getInstance().getHeight(size); //返回根据屏幕高适配后尺寸 (单位 dp or pt)
ScreenUtil.getInstance().getWidthPx(sizePx); //sizePx 单位px
ScreenUtil.getInstance().getHeightPx(sizePx); //sizePx 单位px
ScreenUtil.getInstance().getSp(fontSize); //返回根据屏幕宽适配后字体尺寸
  
double adapterSize = ScreenUtil.getInstance().getAdapterSize(100);

方案二、依赖context

//如果设计稿尺寸默认配置一致,无需该设置。  配置设计稿尺寸 默认 360.0 / 640.0 / 3.0
setDesignWHD(_designW,_designH,_designD);  

ScreenUtil.getScreenW(context); //屏幕 宽
ScreenUtil.getScreenH(context); //屏幕 高
//屏幕适配相关  
ScreenUtil.getScaleW(context, size); //返回根据屏幕宽适配后尺寸(单位 dp or pt)
ScreenUtil.getScaleH(context, size); //返回根据屏幕高适配后尺寸 (单位 dp or pt)
ScreenUtil.getScaleSp(context, size) ;//返回根据屏幕宽适配后字体尺寸
  
double adapterSize = ScreenUtil.getAdapterSizeCtx(context, 100)

Flutter 数据存储 SpUtil

单例"同步" SharedPreferences 工具类。
支持get获取默认参数、支持存储实体对象、支持存储实体对象数组。

    // 等待Sp初始化完成。
    await SpUtil.getInstance();
    
    SpUtil.getString('key', defValue: '');
    SpUtil.getInt('key', defValue: 0);
  
    /// save object example.
    /// 存储实体对象示例。
    City city = new City();
    city.name = "成都市";
    SpUtil.putObject("loc_city", city);
  
    City hisCity = SpUtil.getObj("loc_city", (v) => City.fromJson(v)); 
    print("thll Str: " + (hisCity == null ? "null" : hisCity.toString()));
  
    /// save object list example.
    /// 存储实体对象List示例。
    List<City> list = new List();
    list.add(new City(name: "成都市"));
    list.add(new City(name: "北京市"));
    SpUtil.putObjectList("loc_city_list", list);
  
    List<City> _cityList = SpUtil.getObjList("loc_city_list", (v) => City.fromJson(v));
    print("thll List: " + (_cityList == null ? "null" : _cityList.toString()));

Flutter Demos

  • |--demos
    • |-- city_select_page.dart 城市列表(索引&悬停)示例
    • |-- date_page.dart 日期格式化示例
    • |-- image_size_page.dart 获取图片尺寸示例
    • |-- money_page.dart 金额(元转分/分转元)示例
    • |-- pinyin_page.dart 汉字转拼音示例
    • |-- regex_page.dart 正则工具类示例
    • |-- round_portrait_page.dart 圆形圆角头像示例
    • |-- timeline_page.dart 时间轴示例
    • |-- timer_page.dart 倒计时/定时任务示例
    • |-- widget_page.dart 获取Widget尺寸/屏幕坐标示例

Screenshots

截图无法查看?

掘金地址
简书地址

主界面 启动页 侧滑Back
快速滚动到顶部 分类页面 国际化
主题色 闪屏广告页 引导页

Thanks

① 感谢鸿洋大佬提供的开源api
② 界面参考gitme
Github Trending Api
Streams-Block-Reactive-Programming-in-Flutter

项目问题汇总

Q1:Flutter国际化系统切换iOS不生效问题?
A1:在Xcode项目Localizations下添加支持语言即可,原文

App

Apk:flutter_wanandroid.apk
iOS:请自行clone项目代码运行。

关于作者

GitHub : Sky24n
简书     : Sky24n
掘金     : Sky24n
Email   : [email protected]

A GitHub client app developed with Flutter, which supports Android iOS Web.
Web :Flutter Web.

flutter_wanandroid's People

Contributors

sky24n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_wanandroid's Issues

意见&反馈

大家对该项目有好的意见和建议,欢迎评论交流。

求教:flutter packages get报错:pub get failed (69)

我设置了:

export PUB_HOSTED_URL=https://pub.flutter-io.cn 
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

其他项目没问题,这个项目运行flutter packages get就报错:

Running "flutter packages get" in flutter_wanandroid-master...     
Git error. Command: git rev-list --max-count=1 HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
pub get failed (69) -- attempting retry 1 in 1 second...
Git error. Command: git rev-list --max-count=1 HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

实在没有找到这个是什么原因,所以只能来求教了。

flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v1.0.0, on Mac OS X 10.13.6 17G65, locale zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.3)
[✓] Android Studio (version 2.3)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] VS Code (version 1.29.1)
[!] Connected device
    ! No devices available

! Doctor found issues in 2 categories.

flutter packages get失败

webview_flutter:
git:
url: git://github.com/Sky24n/plugins.git
ref: newDev
path: packages/webview_flutter/

fatal: ambiguous argument 'newDev': unknown revision or path not in the working tree.

没有找到你的newDev呢

有错误

SuspensionUtil ISuspensionBean找不到呢

Could not resolve com.android.tools.build:gradle:3.3.0

  • Error running Gradle:
    ProcessException: Process "C:\Users\user\Desktop\Projects\flutter_wanandroid\android\gradlew.bat" exited abnormally:

Configure project :device_info

Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details of the afterEvaluate {} error.

FAILURE: Build failed with an exception.

  • What went wrong:
    A problem occurred configuring project ':device_info'.

Could not resolve all artifacts for configuration ':device_info:classpath'.
Could not resolve com.android.tools.build:gradle:3.3.0.
Required by:
project :device_info
> Could not resolve com.android.tools.build:gradle:3.3.0.
> Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom'.
> Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> Could not resolve com.android.tools.build:gradle:3.3.0.
> Could not get resource 'https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom'.
> Could not GET 'https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

运行启动时,报一堆错误

lib/ui/widgets/com_list_page.dart:16:43: Error: The argument type 'int' can't be assigned to the parameter type 'RefreshStatus'.

  • 'RefreshStatus' is from 'package:pull_to_refresh/src/smart_refresher.dart' ('file:///C:/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.2.0/lib/src/smart_refresher.dart').
    Try changing the type of the parameter, or casting the argument to 'RefreshStatus'.
    _controller.sendBack(false, event.status);
    ^
    lib/ui/pages/events_page.dart:18:43: Error: The argument type 'int' can't be assigned to the parameter type 'RefreshStatus'.
  • 'RefreshStatus' is from 'package:pull_to_refresh/src/smart_refresher.dart' ('file:///C:/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.2.0/lib/src/smart_refresher.dart').
    Try changing the type of the parameter, or casting the argument to 'RefreshStatus'.
    _controller.sendBack(false, event.status);
    ^
    lib/ui/pages/repos_page.dart:18:43: Error: The argument type 'int' can't be assigned to the parameter type 'RefreshStatus'.
  • 'RefreshStatus' is from 'package:pull_to_refresh/src/smart_refresher.dart' ('file:///C:/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.2.0/lib/src/smart_refresher.dart').
    Try changing the type of the parameter, or casting the argument to 'RefreshStatus'.
    _controller.sendBack(false, event.status);
    ^
    lib/ui/pages/home_page.dart:103:43: Error: The argument type 'int' can't be assigned to the parameter type 'RefreshStatus'.
  • 'RefreshStatus' is from 'package:pull_to_refresh/src/smart_refresher.dart' ('file:///C:/flutter/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.2.0/lib/src/smart_refresher.dart').
    Try changing the type of the parameter, or casting the argument to 'RefreshStatus'.
    _controller.sendBack(false, event.status);

安装报错 Package install error: Failure [INSTALL_FAILED_DEXOPT]

安装运行报错:
Package install error: Failure [INSTALL_FAILED_DEXOPT]
Launching lib\main.dart on Android SDK built for x86 in debug mode...
Built build\app\outputs\apk\debug\app-debug.apk.
Package install error: Failure [INSTALL_FAILED_DEXOPT]

Error launching application on Android SDK built for x86.
Exited (sigterm)

代码好像没有更新完全

比如 main_block
288行 RefreshStatus.noMore 这个枚举中没有 noMore对象
291行 RefreshStatus.failed

com_list_page.dart 类中
16行 _controller.sendBack 没有这个sendBack方法

flutter run 的时候报错了

PS F:\1lbl\other\flutter_wanandroid> flutter run
Running "flutter packages get" in flutter_wanandroid... 1.5s
Launching lib/main.dart on hm 2a in debug mode...
Initializing gradle... 1.2s
Resolving dependencies... 6.3s
C:\Users\menglong.gradle\caches\transforms-1\files-1.1\core-1.0.0.aar\5e8ccbb92a8783e818b127b02bf2d1ca\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/fontVariationSettings not
found.

C:\Users\menglong.gradle\caches\transforms-1\files-1.1\core-1.0.0.aar\5e8ccbb92a8783e818b127b02bf2d1ca\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex not found.

F:\1lbl\other\flutter_wanandroid\build\app\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:20: error: resource android:attr/fontVariationSettings not found.
F:\1lbl\other\flutter_wanandroid\build\app\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:20: error: resource android:attr/ttcIndex not found.
error: failed linking references.

Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute aapt
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796)
at com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551)
at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109)
at sun.reflect.GeneratedMethodAccessor308.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:794)
... 47 more
Caused by: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:179)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 more
Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:463)
at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:415)
at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:332)
at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)

如何长按复制文字

请教大佬一个问题,如何长按文字弹出选择光标。Flutter如果有这个缺陷简直相当于劝退了

flukit依赖引入失败

pubspec.yaml里有一个flukit的依赖
flukit:
git:
url: git://github.com/flutterchina/flukit.git
path: package_src

在命令行运行flutter packages get后,提示一下错误信息:

Git error. Command: git clone --mirror git://github.com/flutterchina/flukit.git D:\DevTools\flutter-v1.0.pub-cache\git\cache\flukit-2a67abdff339ccbeb94f2bceded09b33a4657e54
Cloning into bare repository 'D:\DevTools\flutter-v1.0.pub-cache\git\cache\flukit-2a67abdff339ccbeb94f2bceded09b33a4657e54'...
fatal: unable to look up github.com (port 9418) (应用程序没有调用 WSAStartup,或者 WSAStartup 失败。 )
pub get failed (69) -- attempting retry 1 in 1 second...
Could not find a file named "package_src/pubspec.yaml" in git://github.com/flutterchina/flukit.git 5391447fae6209bb21a89e6a5a6583cac1af9b4b.
pub get failed (1)

能看下是什么原因吗?

更新app

你好,请问下能方便做一个更新模块吗,好多东西不太明白,点击,获取版本号并且比较,更新。
这个用安卓好做,flutter没搞过,一头雾水 @Sky24n @gopalvirat

更新:wanandroid 切换至 https

为了满足小程序等开发需求,wanandroid 域名切换为https啦,需要尽快更新下 baseurl,目前可能部分http接口会异常,有问题及时反馈我,谢谢!

打开文章详情页bug

使用oppo r11st测试有下述问题:竖屏时打开文章详情页,页面空白,横屏时则可正常显示。在文章详情页横竖屏切换经常会闪退。报了如下错误:
E/AndroidRuntime(11882): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Display.getSize(android.graphics.Point)' on a null object reference
E/AndroidRuntime(11882): at org.chromium.ui.display.DisplayAndroid.updateFromDisplay(DisplayAndroid.java:133)
E/AndroidRuntime(11882): at org.chromium.ui.display.DisplayAndroidManager$DisplayListenerBackendImpl.onDisplayChanged(DisplayAndroidManager.java:169)
E/AndroidRuntime(11882): at android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate.handleMessage(DisplayManagerGlobal.java:462)
E/AndroidRuntime(11882): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(11882): at android.os.Looper.loop(Looper.java:185)
E/AndroidRuntime(11882): at android.app.ActivityThread.main(ActivityThread.java:6615)
E/AndroidRuntime(11882): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(11882): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:916)
E/AndroidRuntime(11882): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:806)

华为手机GEM-703L无法获取数据

华为GEM-703L获取不到数据,一直魔力转圈圈,换另外一台三星手机就可以,WiFi,4g都不行,有没有知道咋回事的大哥大姐

ios 模拟器 run 报错

Warning! The 'flutter' tool you are currently running is from a different Flutter repository than the one last used by this package. The repository from which the 'flutter' tool is currently executing will be used instead.
running Flutter tool: /Users/chenlin/app/flutter
previous reference : /Users/chenlin/flutter
This can happen when you have multiple copies of flutter installed. Please check your system path to verify that you are running the expected version (run 'flutter --version' to see which flutter is on your path).

Launching lib/main.dart on 测试机 in debug mode...
Removing obsolete reference to flutter_assets from Runner.app
Signing iOS app for device deployment using developer identity: "iPhone Developer: Ji Hai Wu (622CA8F9X9)"
Xcode build done. 12.9s
Failed to build iOS app
Error output from Xcode build:

** BUILD FAILED **
Xcode's output:

=== BUILD TARGET path_provider OF PROJECT Pods WITH CONFIGURATION Debug ===
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: warning: 'sqlite3_wal_checkpoint_v2' is only available on iOS 5.0 or newer [-Wunguarded-availability]
int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount);
^~~~~~~~~~~~~~~~~~~~~~~~~
In module 'SQLite3' imported from /Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabase.m:8:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/usr/include/sqlite3.h:8244:16: note: 'sqlite3_wal_checkpoint_v2' has been explicitly marked partial here
SQLITE_API int sqlite3_wal_checkpoint_v2(
^
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1486:15: note: enclose 'sqlite3_wal_checkpoint_v2' in an @available check to silence this warning
int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount);
^~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: warning: 'dispatch_queue_set_specific' is only available on iOS 5.0 or newer [-Wunguarded-availability]
dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
In module 'Foundation' imported from /Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9:
In module 'CoreFoundation' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6:
In module 'Dispatch' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/usr/include/dispatch/queue.h:1352:1: note: 'dispatch_queue_set_specific' has been explicitly marked partial here
dispatch_queue_set_specific(dispatch_queue_t queue, const void *key,
^
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:101:9: note: enclose 'dispatch_queue_set_specific' in an @available check to silence this warning
dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: warning: 'dispatch_get_specific' is only available on iOS 5.0 or newer [-Wunguarded-availability]
FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
^~~~~~~~~~~~~~~~~~~~~
In module 'Foundation' imported from /Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:9:
In module 'CoreFoundation' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6:
In module 'Dispatch' imported from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h:20:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/usr/include/dispatch/queue.h:1408:1: note: 'dispatch_get_specific' has been explicitly marked partial here
dispatch_get_specific(const void *key);
^
/Users/chenlin/Downloads/flutter_wanandroid-master/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:184:54: note: enclose 'dispatch_get_specific' in an @available check to silence this warning
FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
^~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:33:52: warning: 'WKWebsiteDataTypeCookies' is only available on iOS 9.0 or newer [-Wunguarded-availability]
NSSet *websiteDataTypes = [NSSet setWithArray:@[ WKWebsiteDataTypeCookies ]];
^~~~~~~~~~~~~~~~~~~~~~~~
In module 'WebKit' imported from /Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.h:2:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataRecord.h:47:28: note: 'WKWebsiteDataTypeCookies' has been explicitly marked partial here
WK_EXTERN NSString * const WKWebsiteDataTypeCookies API_AVAILABLE(macosx(10.11), ios(9.0));
^
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:33:52: note: enclose 'WKWebsiteDataTypeCookies' in an @available check to silence this warning
NSSet *websiteDataTypes = [NSSet setWithArray:@[ WKWebsiteDataTypeCookies ]];
^~~~~~~~~~~~~~~~~~~~~~~~
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:34:3: warning: 'WKWebsiteDataStore' is only available on iOS 9.0 or newer [-Wunguarded-availability]
WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
^~~~~~~~~~~~~~~~~~
In module 'WebKit' imported from /Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.h:2:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataStore.h:41:12: note: 'WKWebsiteDataStore' has been explicitly marked partial here
@interface WKWebsiteDataStore : NSObject
^
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:34:3: note: enclose 'WKWebsiteDataStore' in an @available check to silence this warning
WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
^~~~~~~~~~~~~~~~~~
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:34:36: warning: 'WKWebsiteDataStore' is only available on iOS 9.0 or newer [-Wunguarded-availability]
WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
^~~~~~~~~~~~~~~~~~
In module 'WebKit' imported from /Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.h:2:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataStore.h:41:12: note: 'WKWebsiteDataStore' has been explicitly marked partial here
@interface WKWebsiteDataStore : NSObject
^
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:34:36: note: enclose 'WKWebsiteDataStore' in an @available check to silence this warning
WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
^~~~~~~~~~~~~~~~~~
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:36:35: warning: 'WKWebsiteDataRecord' is only available on iOS 9.0 or newer [-Wunguarded-availability]
void (^deleteAndNotify)(NSArray<WKWebsiteDataRecord *> *) =
^~~~~~~~~~~~~~~~~~~
In module 'WebKit' imported from /Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.h:2:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataRecord.h:66:12: note: 'WKWebsiteDataRecord' has been explicitly marked partial here
@interface WKWebsiteDataRecord : NSObject
^
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:36:35: note: enclose 'WKWebsiteDataRecord' in an @available check to silence this warning
void (^deleteAndNotify)(NSArray<WKWebsiteDataRecord *> *) =
^~~~~~~~~~~~~~~~~~~
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:37:17: warning: 'WKWebsiteDataRecord' is only available on iOS 9.0 or newer [-Wunguarded-availability]
^(NSArray<WKWebsiteDataRecord *> *cookies) {
^~~~~~~~~~~~~~~~~~~
In module 'WebKit' imported from /Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.h:2:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataRecord.h:66:12: note: 'WKWebsiteDataRecord' has been explicitly marked partial here
@interface WKWebsiteDataRecord : NSObject
^
/Users/chenlin/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.5+3/ios/Classes/FLTCookieManager.m:37:17: note: enclose 'WKWebsiteDataRecord' in an @available check to silence this warning
^(NSArray<WKWebsiteDataRecord *> *cookies) {
^~~~~~~~~~~~~~~~~~~
5 warnings generated.
=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
Warning! The 'flutter' tool you are currently running is from a different Flutter repository than the one last used by this package. The repository from which the 'flutter' tool is currently executing will be used instead.
running Flutter tool: /Users/chenlin/app/flutter
previous reference : /Users/chenlin/flutter
This can happen when you have multiple copies of flutter installed. Please check your system path to verify that you are running the expected version (run 'flutter --version' to see which flutter is on your path).
Compiler message:
file:///Users/chenlin/flutter/packages/flutter/lib/src/scheduler/binding.dart:245:69: Error: The getter 'initialLifecycleState' isn't defined for the class 'Window'.
- 'Window' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'initialLifecycleState'.
if (_lifecycleState == null && _parseAppLifecycleMessage(window.initialLifecycleState) != null) {
^^^^^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/scheduler/binding.dart:246:38: Error: The getter 'initialLifecycleState' isn't defined for the class 'Window'.
- 'Window' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'initialLifecycleState'.
_handleLifecycleMessage(window.initialLifecycleState);
^^^^^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/painting/text_style.dart:905:7: Error: No named parameter with the name 'decorationThickness'.
decorationThickness: decorationThickness,
^^^^^^^^^^^^^^^^^^^
org-dartlang-sdk:///flutter/lib/ui/text.dart:377:3: Context: Found this candidate, but the arguments don't match.
TextStyle({
^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:103:62: Error: Getter not found: 'PointerSignalKind'.
if (datum.signalKind == null || datum.signalKind == ui.PointerSignalKind.none) {
^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:420:19: Error: Getter not found: 'PointerSignalKind'.
case ui.PointerSignalKind.scroll:
^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:487:19: Error: Getter not found: 'PointerSignalKind'.
case ui.PointerSignalKind.none:
^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:490:19: Error: Getter not found: 'PointerSignalKind'.
case ui.PointerSignalKind.unknown:
^^^^^^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:103:17: Error: The getter 'signalKind' isn't defined for the class 'PointerData'.
- 'PointerData' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'signalKind'.
if (datum.signalKind == null || datum.signalKind == ui.PointerSignalKind.none) {
^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:103:45: Error: The getter 'signalKind' isn't defined for the class 'PointerData'.
- 'PointerData' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'signalKind'.
if (datum.signalKind == null || datum.signalKind == ui.PointerSignalKind.none) {
^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:419:23: Error: The getter 'signalKind' isn't defined for the class 'PointerData'.
- 'PointerData' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'signalKind'.
switch (datum.signalKind) {
^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:478:30: Error: The getter 'scrollDeltaX' isn't defined for the class 'PointerData'.
- 'PointerData' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'scrollDeltaX'.
Offset(datum.scrollDeltaX, datum.scrollDeltaY) / devicePixelRatio;
^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/gestures/converter.dart:478:50: Error: The getter 'scrollDeltaY' isn't defined for the class 'PointerData'.
- 'PointerData' is from 'dart:ui'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'scrollDeltaY'.
Offset(datum.scrollDeltaX, datum.scrollDeltaY) / devicePixelRatio;
^^^^^^^^^^^^
file:///Users/chenlin/flutter/packages/flutter/lib/src/semantics/semantics.dart:1952:7: Error: No named parameter with the name 'platformViewId'.
platformViewId: data.platformViewId != null ? data.platformViewId : -1,
^^^^^^^^^^^^^^
Compiler failed on /Users/chenlin/Downloads/flutter_wanandroid-master/lib/main.dart
Failed to package /Users/chenlin/Downloads/flutter_wanandroid-master.
Could not build the precompiled application for the device.

Error launching application on 测试机.
Exited (sigterm)

flutter packages get失败

Git error. Command: git rev-list --max-count=1 newDev
fatal: ambiguous argument 'newDev': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git [...] -- [...]'

OPPO 上貌似有兼容性问题?

我的手机是 OPPO R15,有两个问题:

  1. 打开应用时,直接提示不支持全屏显示,应该是未适配全面屏?
  2. 打开任意一个文章详情页,都黑屏了,标题部分显示正常,标题下面的内容部分黑了

我是从 README 扫码下载的。

image

image

关于网络请求的疑问

作者你好,我现在刚开始学习flutter,有很多东西还不了解,现在遇到一个问题,想请教下作者,就是关于网络请求,当页面关闭的时候,需不需要手动关闭网络请求,页面发起网络请求,跟页面的声明周期有没有关联,关闭页面后,如果网络请求没完成,会不会造成内存泄漏?还请作者不吝赐教!

dio2.0以后封装问题

我跟着作者的代码在一行行写,后来发现dio2.0了就升级了下,发现dio_util类不能用了,发现dio2.0的options分成了3个,没个作用都不同,作者能不能更新下util类呢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.