.
@@ -7,8 +7,8 @@
|
||||
FlutterApplication and put your custom class here. -->
|
||||
<application
|
||||
android:name="io.flutter.app.FlutterApplication"
|
||||
android:label="flutter_unit"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
android:label="FlutterUnit"
|
||||
android:icon="@mipmap/logo">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:launchMode="singleTop"
|
||||
|
||||
BIN
android/app/src/main/res/mipmap-xxhdpi/logo.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 856 KiB After Width: | Height: | Size: 314 KiB |
|
Before Width: | Height: | Size: 406 KiB After Width: | Height: | Size: 144 KiB |
@@ -1,153 +0,0 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// create by 张风捷特烈 on 2020-03-07
|
||||
/// contact me by email 1981462002@qq.com
|
||||
/// 说明:
|
||||
|
||||
class FunSplash extends StatefulWidget {
|
||||
final double size;
|
||||
|
||||
FunSplash({this.size = 200});
|
||||
|
||||
@override
|
||||
_FunSplashState createState() => _FunSplashState();
|
||||
}
|
||||
|
||||
class _FunSplashState extends State<FunSplash>
|
||||
with SingleTickerProviderStateMixin {
|
||||
AnimationController _controller;
|
||||
double _factor;
|
||||
Animation _rotate;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_controller =
|
||||
AnimationController(duration: Duration(milliseconds: 5000), vsync: this)
|
||||
..addListener(() => setState(() {
|
||||
return _factor = _rotate.value;
|
||||
}));
|
||||
_rotate = CurvedAnimation(parent: _controller, curve: Curves.bounceOut);
|
||||
_controller.forward();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
_controller.reset();
|
||||
_controller.forward();
|
||||
},
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: <Widget>[
|
||||
FlutterLogo(),
|
||||
CustomPaint(
|
||||
painter: UnitPainter(factor: _factor),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class UnitPainter extends CustomPainter {
|
||||
Paint _paint;
|
||||
double width;
|
||||
double factor;
|
||||
Path _path1 = Path();
|
||||
Path _path2 = Path();
|
||||
Path _path3 = Path();
|
||||
Path _path4 = Path();
|
||||
|
||||
UnitPainter({this.width = 200.0, this.factor}) {
|
||||
_paint = Paint()
|
||||
..color = Colors.black
|
||||
..isAntiAlias = true;
|
||||
}
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
canvas.translate(
|
||||
size.width / 2 - width * 0.5, size.height / 2 - width * 0.5);
|
||||
|
||||
canvas.save();
|
||||
canvas.translate(
|
||||
-size.width / 2 * (1 - factor), -size.width / 2 * (1 - factor));
|
||||
drawColor1(canvas);
|
||||
canvas.restore();
|
||||
|
||||
canvas.save();
|
||||
|
||||
canvas.translate(
|
||||
size.width / 2 * (1 - factor), -size.width / 2 * (1 - factor));
|
||||
drawColor2(canvas);
|
||||
canvas.restore();
|
||||
|
||||
canvas.save();
|
||||
canvas.translate(
|
||||
size.width / 2 * (1 - factor), size.width / 2 * (1 - factor));
|
||||
drawColor3(canvas);
|
||||
canvas.restore();
|
||||
|
||||
canvas.save();
|
||||
canvas.translate(
|
||||
-size.width / 2 * (1 - factor), size.width / 2 * (1 - factor));
|
||||
drawColor4(canvas);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(CustomPainter oldDelegate) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void drawColor1(Canvas canvas) {
|
||||
_path1.moveTo(0, 0);
|
||||
_path1.lineTo(width * 0.618*factor - 1, 0);
|
||||
_path1.lineTo(width * 0.5 - 1, width * 0.5 - 1);
|
||||
_path1.lineTo(0, width * (1 - 0.618)*factor - 1);
|
||||
|
||||
canvas.drawPath(_clipAngle(_path1), _paint..color = Colors.red);
|
||||
}
|
||||
|
||||
void drawColor2(Canvas canvas) {
|
||||
|
||||
_path2.moveTo(width * 0.618*factor, 0);
|
||||
_path2.lineTo(width, 0);
|
||||
_path2.lineTo(width, width * 0.618*factor );
|
||||
_path2.lineTo(width * 0.5, width * 0.5);
|
||||
|
||||
canvas.drawPath(_clipAngle(_path2), _paint..color = Colors.blue);
|
||||
}
|
||||
|
||||
void drawColor3(Canvas canvas) {
|
||||
_path3.moveTo(width * 0.5 + 1, width * 0.5 + 1);
|
||||
_path3.lineTo(width, width * 0.618*factor + 1);
|
||||
_path3.lineTo(width, width);
|
||||
_path3.lineTo(width * (1 - 0.618)*factor + 1, width);
|
||||
canvas.drawPath(_clipAngle(_path3), _paint..color = Colors.green);
|
||||
}
|
||||
|
||||
void drawColor4(Canvas canvas) {
|
||||
_path4.moveTo(0, width * (1 - 0.618)*factor);
|
||||
_path4.lineTo(width * 0.5, width * 0.5);
|
||||
_path4.lineTo(width * (1 - 0.618)*factor, width);
|
||||
_path4.lineTo(0, width);
|
||||
canvas.drawPath(_clipAngle(_path4), _paint..color = Colors.yellow);
|
||||
}
|
||||
|
||||
Path _clipAngle(Path path){
|
||||
return Path.combine(
|
||||
PathOperation.difference,
|
||||
path,
|
||||
Path()
|
||||
..addOval(Rect.fromCircle(
|
||||
center: Offset(width * 0.5, width * 0.5), radius: 25.0)));
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import 'package:flutter_unit/views/search/serach_page.dart';
|
||||
import 'package:flutter_unit/views/pages/setting/setting_page.dart';
|
||||
import 'package:flutter_unit/views/pages/navigation/unit_navigation.dart';
|
||||
|
||||
import 'router_utils.dart';
|
||||
import 'utils/router_utils.dart';
|
||||
|
||||
class Router {
|
||||
static const String detail = 'detail';
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// create by 张风捷特烈 on 2020-03-06
|
||||
/// contact me by email 1981462002@qq.com
|
||||
/// 说明: 打个洞
|
||||
/// offset 洞的偏移量分率 x,y 在 0~1 之间
|
||||
/// size 洞的大小
|
||||
|
||||
class CornerShapeBorder extends ShapeBorder {
|
||||
final Offset offset;
|
||||
|
||||
|
||||
CornerShapeBorder({this.offset=const Offset(0.1, 0.1)});
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry get dimensions => null;
|
||||
|
||||
@override
|
||||
Path getInnerPath(Rect rect, {TextDirection textDirection}) {
|
||||
var path = Path();
|
||||
path.addRRect(RRect.fromRectAndRadius(rect, Radius.circular(5)));
|
||||
return path;
|
||||
}
|
||||
|
||||
@override
|
||||
Path getOuterPath(Rect rect, {TextDirection textDirection}) {
|
||||
var path = Path();
|
||||
path.addRRect(RRect.fromRectAndRadius(rect, Radius.circular(10)));
|
||||
|
||||
|
||||
var w = rect.width;
|
||||
var h = rect.height;
|
||||
var offsetXY = Offset( offset.dx*w,offset.dy*h);
|
||||
_getHold(path , offsetXY);
|
||||
path.fillType = PathFillType.evenOdd;
|
||||
return path;
|
||||
}
|
||||
|
||||
_getHold(Path path, Offset offset) {
|
||||
path.moveTo(0,0);
|
||||
path.lineTo(offset.dx, 0);
|
||||
path.lineTo(0, offset.dy);
|
||||
// var left = offset.dx;
|
||||
// var top = offset.dy;
|
||||
// var right = left + d;
|
||||
// var bottom = top + d;
|
||||
// path.addOval(Rect.fromLTRB(left, top, right, bottom));
|
||||
}
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
|
||||
}
|
||||
|
||||
@override
|
||||
ShapeBorder scale(double t) {
|
||||
// TODO: implement scale
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// create by 张风捷特烈 on 2020-03-06
|
||||
/// contact me by email 1981462002@qq.com
|
||||
/// 说明: 打个洞
|
||||
/// offset 洞的偏移量分率 x,y 在 0~1 之间
|
||||
/// size 洞的大小
|
||||
|
||||
class HoleShapeBorder extends ShapeBorder {
|
||||
final Offset offset;
|
||||
final double size;
|
||||
|
||||
|
||||
HoleShapeBorder({this.offset=const Offset(0.1, 0.1), this.size=20});
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry get dimensions => null;
|
||||
|
||||
@override
|
||||
Path getInnerPath(Rect rect, {TextDirection textDirection}) {
|
||||
var path = Path();
|
||||
path.addRRect(RRect.fromRectAndRadius(rect, Radius.circular(5)));
|
||||
return path;
|
||||
}
|
||||
|
||||
@override
|
||||
Path getOuterPath(Rect rect, {TextDirection textDirection}) {
|
||||
var path = Path();
|
||||
path.addRect(rect);
|
||||
// path.addRRect(RRect.fromRectAndRadius(rect, Radius.circular(10)));
|
||||
|
||||
print(rect);
|
||||
var w = rect.width;
|
||||
var h = rect.height;
|
||||
var offsetXY = Offset( offset.dx*w,offset.dy*h);
|
||||
var d = size;
|
||||
_getHold(path, 1, d, offsetXY);
|
||||
path.fillType = PathFillType.evenOdd;
|
||||
return path;
|
||||
}
|
||||
|
||||
_getHold(Path path, int count, double d, Offset offset) {
|
||||
var left = offset.dx;
|
||||
var top = offset.dy;
|
||||
var right = left + d;
|
||||
var bottom = top + d;
|
||||
path.addOval(Rect.fromLTRB(left, top, right, bottom));
|
||||
}
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
|
||||
}
|
||||
|
||||
@override
|
||||
ShapeBorder scale(double t) {
|
||||
// TODO: implement scale
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
import 'package:flutter_unit/repositorys/widget_repository.dart';
|
||||
|
||||
import 'collect_event.dart';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_unit/app/app_storage.dart';
|
||||
import 'package:flutter_unit/storage/app_storage.dart';
|
||||
import 'package:flutter_unit/app/res/cons.dart';
|
||||
import 'package:flutter_unit/app/res/sp.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
@@ -15,7 +15,10 @@ class GlobalBloc extends Bloc<GlobalEvent, GlobalState> {
|
||||
@override
|
||||
GlobalState get initialState => GlobalState();
|
||||
|
||||
AppStorage storage = AppStorage();
|
||||
final AppStorage storage ;
|
||||
|
||||
|
||||
GlobalBloc(this.storage);
|
||||
|
||||
Future<SharedPreferences> get sp => storage.sp;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
|
||||
abstract class SearchEvent{//事件基
|
||||
const SearchEvent();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_unit/app/enums.dart';
|
||||
import 'package:flutter_unit/database/po/widget_po.dart';
|
||||
import 'package:flutter_unit/storage/po/widget_po.dart';
|
||||
import 'package:flutter_unit/model/widget_model.dart';
|
||||
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ class AnimatedTextState extends State<AnimatedText>
|
||||
|
||||
int curIndex = 0;
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
import 'package:path/path.dart';
|
||||
|
||||
class FlutterDb {
|
||||
FlutterDb._(); //私有化构造
|
||||
static final FlutterDb db = FlutterDb._(); //提供实例
|
||||
|
||||
static const db_name = "flutter.db"; //数据库名
|
||||
Database _database; //数据库
|
||||
Future<Database> get database async {
|
||||
//获取数据库对象
|
||||
_database = _database ?? await initDB();
|
||||
return _database;
|
||||
}
|
||||
|
||||
static const String sql_create_widget = """
|
||||
CREATE TABLE IF NOT EXISTS widget(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name VARCHAR(64) NOT NULL UNIQUE,
|
||||
nameCN VARCHAR(12) NOT NULL,
|
||||
collected INTEGER DEFAULT 0,
|
||||
family INTEGER NOT NULL,
|
||||
lever FLOAT(2) NOT NULL,
|
||||
image VARCHAR(128) NOT NULL,
|
||||
linkWidget TEXT DEFAULT '',
|
||||
info VARCHAR(256) NOT NULL
|
||||
);"""; //建表语句
|
||||
|
||||
static const String sql_create_node = """
|
||||
CREATE TABLE IF NOT EXISTS node(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
widgetId INTEGER NOT NULL,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
priority INTEGER DEFAULT 0,
|
||||
subtitle TEXT NOT NULL,
|
||||
code TEXT NOT NULL
|
||||
);"""; //建表语句
|
||||
|
||||
static const String sql_create_category = """
|
||||
CREATE TABLE IF NOT EXISTS category(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
info VARCHAR(128)
|
||||
);"""; //建表语句
|
||||
|
||||
static const String sql_create_category_widget = """
|
||||
CREATE TABLE IF NOT EXISTS category_widget(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
widgetId INTEGER NOT NULL,
|
||||
categoryId INTEGER NOT NULL
|
||||
);"""; //建表语句
|
||||
|
||||
Future<Database> initDB() async {
|
||||
//初始化数据库
|
||||
WidgetsFlutterBinding.ensureInitialized(); //初始化绑定
|
||||
String path = join(await getDatabasesPath(), db_name); //获取数据库路径
|
||||
return await openDatabase(
|
||||
//打开数据库
|
||||
path, //路径
|
||||
version: 1, //版本
|
||||
onOpen: (db) => print("数据库-------onOpen"),
|
||||
onUpgrade: (db, old, now) => print("数据库-------onUpgrade"),
|
||||
onCreate: (Database db, int version) async {
|
||||
print("数据库-------onCreate");
|
||||
await db.execute(sql_create_widget);
|
||||
await db.execute(sql_create_node);
|
||||
await db.execute(sql_create_category);
|
||||
await db.execute(sql_create_category_widget);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter_unit/app/enums.dart';
|
||||
import 'package:flutter_unit/blocs/collect/collect_event.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_bloc.dart';
|
||||
import 'package:flutter_unit/repositorys/widget_db_repository.dart';
|
||||
import 'package:flutter_unit/storage/app_storage.dart';
|
||||
import 'package:flutter_unit/views/splash/unit_splash.dart';
|
||||
|
||||
//import 'tools/initial.dart';
|
||||
@@ -26,12 +27,13 @@ void main() async {
|
||||
runApp(BlocWrapper(child: FlutterApp()));
|
||||
}
|
||||
|
||||
final storage = AppStorage();
|
||||
|
||||
class BlocWrapper extends StatelessWidget {
|
||||
final Widget child;
|
||||
|
||||
BlocWrapper({this.child});
|
||||
|
||||
final repository = WidgetDbRepository();
|
||||
final repository = WidgetDbRepository(storage);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -39,7 +41,7 @@ class BlocWrapper extends StatelessWidget {
|
||||
providers: [
|
||||
//Bloc提供器
|
||||
BlocProvider<GlobalBloc>(
|
||||
create: (_) => GlobalBloc()..add(EventInitApp())),
|
||||
create: (_) => GlobalBloc(storage)..add(EventInitApp())),
|
||||
BlocProvider<HomeBloc>(
|
||||
create: (_) => HomeBloc(repository: repository)
|
||||
..add(EventTabTap(WidgetFamily.statelessWidget))),
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Node extends Equatable {
|
||||
final String name;
|
||||
final String subtitle;
|
||||
final String code;
|
||||
final Widget widget;
|
||||
|
||||
const Node({this.name, this.subtitle, this.code,this.widget});
|
||||
|
||||
@override
|
||||
List<Object> get props => [name, subtitle, code];
|
||||
|
||||
factory Node.fromJson(Map<String, dynamic> map,Widget widget) {
|
||||
return Node(
|
||||
name: map['name'],
|
||||
subtitle: map["subtitle"],
|
||||
widget:widget,
|
||||
code: map["code"]);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class WidgetItem {
|
||||
final String name;
|
||||
final String nameCN;
|
||||
final ImageProvider image;
|
||||
final String info;
|
||||
final double lever;
|
||||
|
||||
const WidgetItem({this.name, this.nameCN, this.image, this.info, this.lever});
|
||||
|
||||
factory WidgetItem.fromJson(Map<String, dynamic> map) {
|
||||
var image = AssetImage(map["image"]);
|
||||
return WidgetItem(
|
||||
name: map['name'],
|
||||
nameCN: map["nameCN"],
|
||||
lever: map["lever"],
|
||||
image: image,
|
||||
info: map["info"]);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'WidgetItem{name: $name, nameCN: $nameCN, image: $image, info: $info, lever: $lever}';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_unit/app/Convert.dart';
|
||||
import 'package:flutter_unit/app/convert.dart';
|
||||
import 'package:flutter_unit/app/enums.dart';
|
||||
import 'package:flutter_unit/app/res/cons.dart';
|
||||
import 'package:flutter_unit/database/po/widget_po.dart';
|
||||
import 'package:flutter_unit/storage/po/widget_po.dart';
|
||||
|
||||
enum WidgetType {
|
||||
singe_show, //单一展示型 0
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
|
||||
|
||||
|
||||
import 'package:flutter_unit/app/app_storage.dart';
|
||||
import 'package:flutter_unit/storage/app_storage.dart';
|
||||
import 'package:flutter_unit/app/enums.dart';
|
||||
import 'package:flutter_unit/database/node_dao.dart';
|
||||
import 'package:flutter_unit/database/po/widget_po.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/node_dao.dart';
|
||||
import 'package:flutter_unit/storage/po/widget_po.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
import 'package:flutter_unit/model/node_model.dart';
|
||||
import 'package:flutter_unit/model/widget_model.dart';
|
||||
import 'package:flutter_unit/repositorys/widget_repository.dart';
|
||||
@@ -15,12 +15,13 @@ import 'package:flutter_unit/repositorys/widget_repository.dart';
|
||||
/// 说明 : Widget数据仓库
|
||||
|
||||
class WidgetDbRepository implements WidgetRepository {
|
||||
AppStorage storage;
|
||||
final AppStorage storage;
|
||||
|
||||
WidgetDao _widgetDao;
|
||||
NodeDao _nodeDao;
|
||||
|
||||
WidgetDbRepository() {
|
||||
|
||||
WidgetDbRepository(this.storage){
|
||||
_widgetDao = WidgetDao(storage);
|
||||
_nodeDao = NodeDao(storage);
|
||||
}
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
//
|
||||
//
|
||||
//
|
||||
//import 'dart:convert';
|
||||
//
|
||||
//import 'package:flutter/services.dart';
|
||||
//import 'package:flutter_unit/app/enums.dart';
|
||||
//import 'package:flutter_unit/database/node_dao.dart';
|
||||
//import 'package:flutter_unit/database/po/widget_po.dart';
|
||||
//import 'package:flutter_unit/database/widget_dao.dart';
|
||||
//import 'package:flutter_unit/model/node_model.dart';
|
||||
//import 'package:flutter_unit/model/widget_model.dart';
|
||||
//import 'package:flutter_unit/repositorys/widget_repository.dart';
|
||||
//import 'package:flutter_unit/tools/node_data.dart';
|
||||
///// create by 张风捷特烈 on 2020-03-03
|
||||
///// contact me by email 1981462002@qq.com
|
||||
///// 说明 : Widget数据仓库
|
||||
//
|
||||
//class WidgetMeRepository implements WidgetRepository {
|
||||
//
|
||||
//
|
||||
// @override
|
||||
// Future<List<WidgetModel>> loadWidgets(WidgetFamily family) async {
|
||||
// var jsonStr = await rootBundle.loadString('assets/data/widget.json');
|
||||
// var widgets = (json.decode(jsonStr)["items"] as List)
|
||||
// .map((item) => WidgetPo.fromJson(item))
|
||||
// .toList();
|
||||
// var where = widgets.map(WidgetModel.fromPo).where((e)=>e.family==family).toList();
|
||||
// return where;
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Future<List<NodeModel>> loadNode(WidgetModel widgetModel) async{
|
||||
// return nodeData[widgetModel.name].map((e)=>NodeModel.fromJson(e)).toList();
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Future<List<WidgetModel>> searchWidgets(SearchArgs args) {
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Future<List<WidgetModel>> loadWidget(List<int> ids) async{
|
||||
// var jsonStr = await rootBundle.loadString('assets/data/widget.json');
|
||||
// var widgets = (json.decode(jsonStr)["items"] as List)
|
||||
// .map((item) => WidgetPo.fromJson(item))
|
||||
// .toList();
|
||||
// var where = widgets.map(WidgetModel.fromPo).where((e)=>ids.contains(e.id)).toList();
|
||||
// return where;
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Future<List<WidgetModel>> loadCollectWidgets() async{
|
||||
// // TODO: implement loadCollectWidgets
|
||||
// return [];
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Future<void> toggleCollect(int id) {
|
||||
// // TODO: implement setCollect
|
||||
// return null;
|
||||
// }
|
||||
//}
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
|
||||
import 'package:flutter_unit/app/enums.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
import 'package:flutter_unit/model/node_model.dart';
|
||||
import 'package:flutter_unit/model/widget_model.dart';
|
||||
|
||||
|
||||
@@ -23,14 +23,14 @@ class AppStorage {
|
||||
}
|
||||
|
||||
Future<Database> get db async {
|
||||
_database = _database ?? await SharedPreferences.getInstance();
|
||||
_database = _database ?? await initDb();
|
||||
return _database;
|
||||
}
|
||||
|
||||
// 初始化 App 固化的配置数据
|
||||
Future<GlobalState> initApp() async {
|
||||
var prefs = await sp;
|
||||
await initDb();
|
||||
_database = await initDb();
|
||||
var showBg = prefs.getBool(SP.showBackground) ?? true;
|
||||
var themeIndex = prefs.getInt(SP.themeColorIndex) ?? 4;
|
||||
var fontIndex = prefs.getInt(SP.fontFamily) ?? 1;
|
||||
@@ -63,6 +63,6 @@ class AppStorage {
|
||||
} else {
|
||||
print("Opening existing database");
|
||||
}
|
||||
return await openDatabase(dbPath, readOnly: true);
|
||||
return await openDatabase(dbPath, readOnly: false);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:flutter_unit/app/app_storage.dart';
|
||||
import 'package:flutter_unit/storage/app_storage.dart';
|
||||
|
||||
import 'po/node_po.dart';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:flutter_unit/app/app_storage.dart';
|
||||
import 'package:flutter_unit/storage/app_storage.dart';
|
||||
import 'package:flutter_unit/app/enums.dart';
|
||||
|
||||
import 'po/widget_po.dart';
|
||||
@@ -22,7 +22,7 @@ class CollectWidgetListItem extends StatelessWidget {
|
||||
shape: TechnoShapeBorder(color: itemColor),
|
||||
child: Container(
|
||||
height: 95,
|
||||
padding: EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 5),
|
||||
padding: EdgeInsets.only(top: 10, left: 5, right: 10, bottom: 5),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
_buildLeading(),
|
||||
@@ -48,8 +48,8 @@ class CollectWidgetListItem extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 10,
|
||||
right: 10,
|
||||
bottom: 5,
|
||||
right: 5,
|
||||
child: FeedbackWidget(
|
||||
onPressed: (){
|
||||
if(onDelectItemClick!=null){
|
||||
@@ -72,13 +72,13 @@ class CollectWidgetListItem extends StatelessWidget {
|
||||
color: Colors.transparent,
|
||||
child: CircleText(
|
||||
text: data.name,
|
||||
size: 60,
|
||||
size: 50,
|
||||
color: itemColor,
|
||||
),
|
||||
)
|
||||
: CircleImage(
|
||||
image: data.image,
|
||||
size: 60,
|
||||
size: 50,
|
||||
),
|
||||
);
|
||||
|
||||
@@ -104,7 +104,7 @@ class CollectWidgetListItem extends StatelessWidget {
|
||||
|
||||
Widget _buildSummary() {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(left: 0, bottom: 10, top: 5),
|
||||
padding: const EdgeInsets.only(left: 5, bottom: 10, top: 5),
|
||||
child: Container(
|
||||
child: Text(
|
||||
data.nameCN,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_unit/app/Convert.dart';
|
||||
import 'package:flutter_unit/app/convert.dart';
|
||||
import 'package:flutter_unit/app/router.dart';
|
||||
import 'package:flutter_unit/blocs/detail/detail_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/detail/detail_event.dart';
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_unit/app/res/cons.dart';
|
||||
import 'package:flutter_unit/app/style/shape/hole_shape.dart';
|
||||
import 'package:flutter_unit/components/permanent/circle.dart';
|
||||
|
||||
class TolyAppBar extends StatefulWidget implements PreferredSizeWidget {
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_event.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
|
||||
|
||||
class AppSearchBar extends StatefulWidget {
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_event.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
|
||||
/// create by 张风捷特烈 on 2020-04-07
|
||||
/// contact me by email 1981462002@qq.com
|
||||
|
||||
@@ -10,7 +10,7 @@ import 'package:flutter_unit/blocs/search/search_bloc.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_event.dart';
|
||||
import 'package:flutter_unit/blocs/search/search_state.dart';
|
||||
import 'package:flutter_unit/components/permanent/circle.dart';
|
||||
import 'package:flutter_unit/database/widget_dao.dart';
|
||||
import 'package:flutter_unit/storage/widget_dao.dart';
|
||||
import 'package:flutter_unit/model/widget_model.dart';
|
||||
import 'package:flutter_unit/views/items/techno_widget_list_item.dart';
|
||||
import 'package:flutter_unit/views/pages/search/app_search_bar.dart';
|
||||
|
||||
@@ -94,12 +94,14 @@ class _UnitSplashState extends State<UnitSplash> with TickerProviderStateMixin {
|
||||
],
|
||||
);
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
_controller.reset();
|
||||
_controller.forward();
|
||||
},
|
||||
child: Scaffold(
|
||||
return
|
||||
// GestureDetector(
|
||||
// onTap: () {
|
||||
// _controller.reset();
|
||||
// _controller.forward();
|
||||
// },
|
||||
// child:
|
||||
Scaffold(
|
||||
body: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: <Widget>[
|
||||
@@ -137,7 +139,7 @@ class _UnitSplashState extends State<UnitSplash> with TickerProviderStateMixin {
|
||||
buildPower(),
|
||||
],
|
||||
),
|
||||
),
|
||||
// ),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ flutter:
|
||||
- assets/images/
|
||||
- assets/images/head_icon/
|
||||
- assets/images/widgets/
|
||||
- assets/data/widget.json
|
||||
# - assets/data/widget.json
|
||||
- assets/flutter.db
|
||||
# To add assets to your application, add an assets section, like this:
|
||||
# assets:
|
||||
|
||||