Flutter Tips 小技巧(更新中)(中)

简介: Flutter Tips 小技巧(更新中)(中)

12.使用私人库 pubspec.yaml


可以指定 Git 私人库,引用链接、分支、tag,使用示例:

dependencies:
  # 混编路由库
  flutter_boost:
    git:
      url: git@github.com:ReverseScale/flutter_boost.git
      ref: v1.1

官网:dart.dev/tools/pub/d…


13.检查是否为发布环境


判断当前环境是否为发布模式:

const bool kReleaseMode = bool.fromEnvironment('dart.vm.product')

使用系统级顶级状态 kReleaseMode 获取当前是否为发布环境:

import 'package:flutter/foundation.dart';
print('Is Release Mode: $kReleaseMode');

使用这个可以用于控制日志输出,比如 release 模式关闭日志:

if (isProduction) {
  debugPrint = (String message, {int wrapWidth}) => {};
}


14.状态栏的高度


final double statusBarHeight = MediaQuery.of(context).padding.top;


15.底部栏的高度


final double bottomHeight = MediaQuery.of(context).padding.bottom;


16.科学计数法表达


// 输出:1e-8
var number = 1 / pow(10, 8);
// 输出:0.00000001
print(aaaa.toStringAsFixed(8));


17.InheritedWidget 存值方法


1.声明 ShareDataWidget:

class ShareDataWidget extends InheritedWidget {
  int count;
  ShareDataWidget({
    @required this.count,
    Widget child
  }): super(child: child);
  static ShareDataWidget of(BuildContext context) {
    return context.inheritFromWidgetOfExactType(ShareDataWidget);
  }
  @override
  bool updateShouldNotify(InheritedWidget oldWidget) {
    return true;
  }
}

2.存入传递值,例如:body 下嵌套传值:

body: ShareDataWidget(
          count: this.widget.count,
          child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  Text("Widget数量: ${this.widget.count}"),
                  _Counter(),
                  RaisedButton(
                    child: Text("增加"),
                    onPressed: () => setState(() => widget.count ++),
                  )
              ]
            ),
          ),
        )

3.取出传递值:

ShareDataWidget sdw = context.inheritFromWidgetOfExactType(ShareDataWidget);
print(sdw.count);


18.Cocoapod 引入 Flutter Framework


flutter_application_path = '../Seller/'load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')install_all_flutter_pods(flutter_application_path)


19.mixins 语法(高级)


class Musician extends Performer with Musical {
  // ···
}
class Maestro extends Person
    with Musical, Aggressive, Demented {
  Maestro(String maestroName) {
    name = maestroName;
    canConduct = true;
  }
}
mixin Musical {
  bool canPlayPiano = false;
  bool canCompose = false;
  bool canConduct = false;
  void entertainMe() {
    if (canPlayPiano) {
      print('Playing piano');
    } else if (canConduct) {
      print('Waving hands');
    } else {
      print('Humming to self');
    }
  }
}


20.泛型示例


var names = <String>['Seth', 'Kathy', 'Lars'];
var pages = <String, String>{
  'index.html': 'Homepage',
  'robots.txt': 'Hints for web robots',
  'humans.txt': 'We are people, not machines'
};
To specify one or more types when using a constructor, put the types in angle brackets (<...>) just after the class name. For example:
var names = List<String>();
names.addAll(['Seth', 'Kathy', 'Lars']);
var nameSet = Set<String>.from(names);
var views = Map<int, View>();

打印泛型类型

class Foo<T extends SomeBaseClass> {
  // Implementation goes here...
  String toString() => "Instance of 'Foo<$T>'";
}
class Extender extends SomeBaseClass {...}


21.导入库


库冲突

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

导入库的一部分

// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

懒加载库

import 'package:greetings/hello.dart' deferred as hello;
Future greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}


22.Generators(迭代生成器)


同步的Generators

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

异步的Generators

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}


23.定义元数据


示例

library todo;
class Todo {
  final String who;
  final String what;
  const Todo(this.who, this.what);
}
使用
import 'todo.dart';
@Todo('seth', 'make this do something')
void doSomething() {
  print('do something');
}


24.私有 Pub


地址:pub.dev/packages/pu…

~ $ git clone <https://github.com/dart-lang/pub_server.git>
~ $ cd pub_server
~/pub_server $ pub get
...
~/pub_server $ dart example/example.dart -d /tmp/package-db

参数释义:

-s 是否fetch官方仓库
-h ${ip / domain}
-p 端口
-d 上传上来的插件包在服务器上的存储地址

使用它可以将新软件包上载到本地运行的服务器或下载本地可用的软件包或通过回退到以下软件包 pub.dartlang.org 很容易:

~/foobar $ export PUB_HOSTED_URL=http://localhost:8080
~/foobar $ pub get
...
~/foobar $ pub publish
Publishing x 0.1.0 to <http://localhost:8080>:
|-- ...
'-- pubspec.yaml
Looks great! Are you ready to upload your package (y/n)? y
Uploading...
Successfully uploaded package.

完善 pubspec.yaml 文件

插件名称
description: 插件描述
version: 0.0.1 版本号
author: xxxx<xx@xxx.com>
homepage: 项目主页地址
publish_to: 填写私有服务器的地址(如果是发布到flutter pub则不用填写,插件默认是上传到flutter pub)

发布至私有服务器

flutter packages pub publish --server $服务器地址


25.原生和 Flutter 之间数据交互类型有限制


在进行插件的开发时,就必定会涉及到原生和 Flutter 之间的数据交互.这里需要注意的是,就像我们在进行 ReactNative 和 JNI 的开发时,并不是什么类型的数据都是支持交互的。下面我给出原生和 Flutter 之间可交互的数据类型:

数据类型对比

这里我们用得最多的就是 boolintStringMap 这几个类型了。


目录
相关文章
|
4月前
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套 在 Flutter 中,ListView 和 PageView 是两个常用的控件,它们可以用于滑动展示大量内容的场景,且支持各种嵌套方式,本文将介绍其中的一些花式嵌套方式。
|
10月前
|
安全 开发工具 git
Flutter:实战小技巧
本文主要介绍在 Flutter 开发中的一些实用技巧。
152 0
Flutter:实战小技巧
|
Dart Android开发 开发者
Flutter Tips 小技巧(更新中)(下)
Flutter Tips 小技巧(更新中)(下)
322 0
Flutter Tips 小技巧(更新中)(下)
|
缓存
Flutter Tips 小技巧(更新中)(上)
Flutter Tips 小技巧(更新中)(上)
264 0
Flutter Tips 小技巧(更新中)(上)
|
Dart Android开发
flutter开发中的几个小技巧
我的tabBar有一个StatelessWidget小部件,其中包含2个statefulWidgets。事实是,当单击管理器以查看我的所有选项卡时(默认情况下在我的第一个选项卡上登陆),tab1小部件生成器一直被调用。
128 0
|
Android开发
flutter开发小技巧
flutter - URL出现在网站名称的位置 从Android Studio运行时:
137 0
|
容器
flutter开发小技巧
粘性标题效果 带有粘性标题的每个部分都应该是带有 SliverPinnedHeader 和 SliverList 的多条。然后将 pushPinnedChildren 设置为 true 应该会提供您正在寻找的粘性标题效果。
129 0
|
JSON 数据格式
flutter开发中的几个小技巧
提高flutter attach的成功率 方案1 断开wifi,执行flutter attach,attach成功后再链接wifi
305 0
|
Dart JavaScript 前端开发
Flutter 开发小技巧【Flutter 专题 23】
大家好,我是坚果,目前是华为云享专家,51CTO 博客首席体验官,专注于大前端技术的分享,包括 Flutter,小程序,安卓,VUE,JavaScript。公众号有更多细节。
104 0
|
3月前
|
监控 Dart 安全
创建一个Dart应用,监控局域网上网记录的软件:Flutter框架的应用
在当今数字时代,网络安全变得愈发重要。为了监控局域网上的上网记录,我们可以借助Flutter框架创建一个强大的Dart应用。在这篇文章中,我们将深入讨论如何使用Flutter框架开发这样一个监控局域网上网记录的软件,并提供一些实用的代码示例。
276 1