GithubHelp home page GithubHelp logo

luoguoxiong / easymarketflutter Goto Github PK

View Code? Open in Web Editor NEW
162.0 4.0 39.0 9.69 MB

Flutter开发仿网易严选

Home Page: https://github.com/Peroluo/easyMarketFlutter

Java 0.22% Objective-C 0.45% Dart 96.56% Ruby 2.38% Shell 0.39%
dio android android-ios appbar flutter shared-preferences

easymarketflutter's Introduction

EasyMarketFlutter

1、EasyMarketFlutter 是仿网易严选 设计的 App(商城类)。项目是基于 Flutter 框架的混合开发(Android 与 IOS)

2、EasyMarketFlutter 主要技术栈:provider(全局数据管理)、dio(数据请求)、shared_preferences(缓存)。

3、本项目主要是以学习 Flutter 框架为主,主要可学内容:UI 设计、组件封装、解决 Flutter 中遇到的坑。可能项目中有许多缺陷,希望吐槽,来不断完善。

扫码体验 Android 版(请在浏览器内扫码!)

预览

已实现

  • Provider+shared_preferences 实现数据状态管理、缓存。
  • App 的启动页、广告页。
  • Rem 适配方案。
  • Dio 的二次封装,API 模块化。
  • 封装侧边栏 Tab 切换组件。
  • 封装 Appbar 与 Tab 的 AppbarTab 组件。
  • 封装滚动渐变的 Appbar 组件。
  • 下拉刷新与上拉加载更多。
  • 路由模块管理。

还需要做的事

  1. 此项目还在开发中,后续会把业务补充完整。(商品、专题、制造商、购物车、用户信息管理)页面的完善。
  2. 项目优化,从 UI 到性能分析,我也是 Flutter 的初学者,后续如果有学到好的方案,需迭代。
  3. 尝试将部分模块以 WebView+H5 进行混合开发。
  4. 后续会补充我在开发中遇到的问题,进行补充、和记录。

需注意的东西

  • 目前只提供了 android 的下载体验,IOS 请自行下载代码体验。
  • 在开发环境的 debug 可能会稍微卡顿,属正常现象,良好的体验请进行打 release 包。

友情链接

  1. Flutter 中文网
  2. Dart 从入门到放弃
  3. Flutter 从入门到放弃
  4. Flutter-go
  5. Flutter 路由管理
  6. Flutter 很全的 Api 说明
  7. 我写的项目
  8. 常用的一些包
  9. 阿里巴巴 Flutter 代码规范

最后

  • 如果 EasyMarketFlutter 对你有帮助,留下你的 Star 或者 fork,你的支持是我不断更新的动力!
  • 欢迎你们的 Issues,希望 Flutter 越来越好,大家一起学习!Love Coding!
  • Thanks!

关于我

Name: pero 罗

QQ: 1025558554

Email:[email protected]

easymarketflutter's People

Contributors

luoguoxiong 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

easymarketflutter's Issues

flutter run 启动时卡在闪屏界面,机型华为荣耀 7X BND AL10 和一加五 A5000

运行环境 flutter doctor 运行结果

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel master, v1.9.8-pre.83, on Microsoft Windows [Version 10.0.17134.407], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.2.3)
[√] Android Studio (version 3.5)
[√] VS Code (version 1.37.1)
[√] Connected device (2 available)


命令行运行输出

Launching lib\main.dart on BND AL10 in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
W/InputMethodManager(27779): startInputReason = 1
Syncing files to device BND AL10...
I/ViewRootImpl(27779): jank_removeInvalidNode jank list is null
W/InputMethodManager(27779): startInputReason = 5
E/flutter (27779): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
E/flutter (27779): If you're running an application and need to access the binary messenger before runApp() has been called (for example, during plugin initialization), then you need to explicitly call the WidgetsFlutterBinding.ensureInitialized() first.
E/flutter (27779): If you're running a test, you can call the TestWidgetsFlutterBinding.ensureInitialized() as the first line in your test's main() method to initialize the binding.
E/flutter (27779): #0 defaultBinaryMessenger. (package:flutter/src/services/binary_messenger.dart:73:7)
E/flutter (27779): #1 defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:86:4)
E/flutter (27779): #2 MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:140:62)
E/flutter (27779): #3 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:35)
E/flutter (27779):
E/flutter (27779): #4 SharedPreferences.getInstance (package:shared_preferences/shared_preferences.dart:25:27)
E/flutter (27779):
E/flutter (27779): #5 SpUtil._init (package:easy_market/utils/cache.dart:21:36)
E/flutter (27779):
E/flutter (27779): #6 SpUtil.getInstance (package:easy_market/utils/cache.dart:27:23)
E/flutter (27779):
E/flutter (27779): #7 main (package:easy_market/main.dart:17:25)
E/flutter (27779):
E/flutter (27779): #8 _runMainZoned.. (dart:ui/hooks.dart:229:25)
E/flutter (27779): #9 _rootRun (dart:async/zone.dart:1124:13)
E/flutter (27779): #10 _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (27779): #11 _runZoned (dart:async/zone.dart:1516:10)
E/flutter (27779): #12 runZoned (dart:async/zone.dart:1500:12)
E/flutter (27779): #13 _runMainZoned. (dart:ui/hooks.dart:221:5)
E/flutter (27779): #14 _startIsolate. (dart:isolate-patch/isolate_patch.dart:305:19)
E/flutter (27779): #15 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
E/flutter (27779):
D/AwareBitmapCacher(27779): handleInit switch not opened pid=27779


原因分析

master 分支中,flutter 官方去除了 flutter/packages/flutter/lib/src/services/binding.dart:41 中初始化。

  /// This is used to send messages from the application to the platform, and
  /// keeps track of which handlers have been registered on each channel so
  /// it may dispatch incoming messages to the registered handler.
// const  BinaryMessenger defaultBinaryMessenger =  _DefaultBinaryMessenger ._();
 const  BinaryMessenger defaultBinaryMessenger;

因此在 runApp() 之前,一旦调用关于系统相关的方法(这里使用了 shared_preferences ),就需要手动调用

WidgetsFlutterBinding.ensureInitialized();
// 这会检测 defaultBinaryMessenger 状态并触发一次初始化

解决方案

在 main() 函数第一行使用

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ...
}

运行结果

通过

参考链接

Moved the default BinaryMessenger instance to ServicesBinding #37489

https://stackoverflow.com/questions/57689492/flutter-unhandled-exception-servicesbinding-defaultbinarymessenger-was-accesse

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.