work
BIN
android/app/src/main/ic_launcher-playstore.png
Normal file
After Width: | Height: | Size: 95 KiB |
@ -1,41 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 1003 187" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,0.352497,-60.1919,-339.48)">
|
||||
<rect id="Artboard1" x="60.192" y="963.071" width="1002.92" height="528.331" style="fill:none;"/>
|
||||
<g id="Artboard11" serif:id="Artboard1">
|
||||
<g transform="matrix(12.4032,0,0,35.1866,98.2148,1359.83)">
|
||||
<g transform="matrix(7.73995,0,0,7.73995,0,-8.88178e-16)">
|
||||
<path d="M0.375,-0L0,-0.375L0,-1L0.25,-1L0.25,-0.5L0.5,-0.25L0.75,-0.5L0.75,-1L1,-1L1,-0.375L0.625,-0L0.375,-0Z" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,8.51093,-8.88178e-16)">
|
||||
<path d="M0,-0L0,-1L1,-1L1,-0.75L0.25,-0.75L0.25,-0.625L1,-0.625L1,-0.375L0.25,-0.375L0.25,-0.25L1,-0.25L1,-0L0,-0Z" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,17.0219,-8.88178e-16)">
|
||||
<rect x="0" y="-1" width="0.25" height="1" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,19.7278,-8.88178e-16)">
|
||||
<path d="M0,-0L0,-1L0.25,-1L0.25,-0.25L1,-0.25L1,-0L0,-0Z" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,28.2387,-8.88178e-16)">
|
||||
<rect x="0" y="-1" width="0.25" height="1" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,30.9447,-8.88178e-16)">
|
||||
<path d="M0.688,-0.25L0.75,-0.313L0.75,-0.688L0.688,-0.75L0.25,-0.75L0.25,-0.25L0.688,-0.25ZM0,-0L0,-1L0.875,-1L1,-0.875L1,-0.125L0.875,-0L0,-0Z" style="fill:rgb(242,89,201);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,39.4556,-8.88178e-16)">
|
||||
<path d="M0,-0L0,-1L1,-1L1,-0.75L0.25,-0.75L0.25,-0.25L1,-0.25L1,-0L0,-0Z" style="fill:rgb(58,162,232);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,47.9665,-8.88178e-16)">
|
||||
<path d="M0,-0L0,-1L0.25,-1L0.25,-0.625L0.75,-0.625L0.75,-1L1,-1L1,-0L0.75,-0L0.75,-0.375L0.25,-0.375L0.25,-0L0,-0Z" style="fill:rgb(58,162,232);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,56.4775,-8.88178e-16)">
|
||||
<path d="M0.75,-0.625L0.75,-0.75L0.25,-0.75L0.25,-0.625L0.75,-0.625ZM0,-0L0,-1L1,-1L1,-0L0.75,-0L0.75,-0.375L0.25,-0.375L0.25,-0L0,-0Z" style="fill:rgb(58,162,232);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(7.73995,0,0,7.73995,64.9884,-8.88178e-16)">
|
||||
<path d="M0.375,-0L0.375,-0.75L0,-0.75L0,-1L1,-1L1,-0.75L0.625,-0.75L0.625,-0L0.375,-0Z" style="fill:rgb(58,162,232);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1257 259" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="-0" y="-0" width="1256.12" height="258.66" style="fill:none;"/><g id="Artboard11" serif:id="Artboard1"><g transform="matrix(17.2266,0,0,17.2266,1.66215,194.243)"><g transform="matrix(7.73995,0,0,7.73995,0,-8.88178e-16)"><path d="M0.375,-0l-0.375,-0.375l0,-0.625l0.25,0l0,0.5l0.25,0.25l0.25,-0.25l0,-0.5l0.25,0l0,0.625l-0.375,0.375l-0.25,-0Z" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,8.51093,-8.88178e-16)"><path d="M0,-0l0,-1l1,0l0,0.25l-0.75,0l0,0.125l0.75,0l0,0.25l-0.75,0l0,0.125l0.75,0l0,0.25l-1,-0Z" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,17.0219,-8.88178e-16)"><rect x="0" y="-1" width="0.25" height="1" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,19.7278,-8.88178e-16)"><path d="M0,-0l0,-1l0.25,0l0,0.75l0.75,0l0,0.25l-1,-0Z" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,28.2387,-8.88178e-16)"><rect x="0" y="-1" width="0.25" height="1" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,30.9447,-8.88178e-16)"><path d="M0.688,-0.25l0.062,-0.063l0,-0.375l-0.063,-0.062l-0.437,0l-0,0.5l0.437,0Zm-0.687,0.25l0,-1l0.875,0l0.125,0.125l0,0.75l-0.125,0.125l-0.875,-0Z" style="fill:#f259c9;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,39.4556,-8.88178e-16)"><path d="M0,-0l0,-1l1,0l0,0.25l-0.75,0l0,0.5l0.75,0l0,0.25l-1,-0Z" style="fill:#3aa2e8;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,47.9665,-8.88178e-16)"><path d="M0,-0l0,-1l0.25,0l0,0.375l0.5,0l0,-0.375l0.25,0l0,1l-0.25,-0l0,-0.375l-0.5,0l0,0.375l-0.25,-0Z" style="fill:#3aa2e8;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,56.4775,-8.88178e-16)"><path d="M0.75,-0.625l0,-0.125l-0.5,0l0,0.125l0.5,0Zm-0.75,0.625l0,-1l1,0l0,1l-0.25,-0l0,-0.375l-0.5,0l0,0.375l-0.25,-0Z" style="fill:#3aa2e8;fill-rule:nonzero;"/></g><g transform="matrix(7.73995,0,0,7.73995,64.9884,-8.88178e-16)"><path d="M0.375,-0l0,-0.75l-0.375,0l0,-0.25l1,0l0,0.25l-0.375,0l0,0.75l-0.25,-0Z" style="fill:#3aa2e8;fill-rule:nonzero;"/></g></g></g></svg>
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
@ -1,122 +1,122 @@
|
||||
{
|
||||
"images" : [
|
||||
"images": [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-20x20@2x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "2x",
|
||||
"size": "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename": "Icon-App-20x20@3x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "3x",
|
||||
"size": "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-29x29@1x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "1x",
|
||||
"size": "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-29x29@2x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "2x",
|
||||
"size": "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename": "Icon-App-29x29@3x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "3x",
|
||||
"size": "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-40x40@2x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "2x",
|
||||
"size": "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename": "Icon-App-40x40@3x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "3x",
|
||||
"size": "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-60x60@2x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "2x",
|
||||
"size": "60x60"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename": "Icon-App-60x60@3x.png",
|
||||
"idiom": "iphone",
|
||||
"scale": "3x",
|
||||
"size": "60x60"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-20x20@1x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "1x",
|
||||
"size": "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-20x20@2x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "2x",
|
||||
"size": "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-29x29@1x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "1x",
|
||||
"size": "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-29x29@2x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "2x",
|
||||
"size": "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-40x40@1x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "1x",
|
||||
"size": "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-40x40@2x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "2x",
|
||||
"size": "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-76x76@1x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "1x",
|
||||
"size": "76x76"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-76x76@2x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "2x",
|
||||
"size": "76x76"
|
||||
},
|
||||
{
|
||||
"size" : "83.5x83.5",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename": "Icon-App-83.5x83.5@2x.png",
|
||||
"idiom": "ipad",
|
||||
"scale": "2x",
|
||||
"size": "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"scale" : "1x"
|
||||
"filename": "Icon-App-1024x1024@1x.png",
|
||||
"idiom": "ios-marketing",
|
||||
"scale": "1x",
|
||||
"size": "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"info": {
|
||||
"author": "icons_launcher",
|
||||
"version": 1
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
import 'package:awesome_extensions/awesome_extensions.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:flutter_translate/flutter_translate.dart';
|
||||
@ -12,8 +13,9 @@ class DefaultAppBar extends AppBar {
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withAlpha(32),
|
||||
shape: BoxShape.circle),
|
||||
child: SvgPicture.asset('assets/images/vlogo.svg',
|
||||
height: 48)),
|
||||
child:
|
||||
SvgPicture.asset('assets/images/vlogo.svg', height: 32)
|
||||
.paddingAll(4)),
|
||||
actions: (actions ?? <Widget>[])
|
||||
..add(
|
||||
IconButton(
|
||||
|
@ -24,7 +24,7 @@ _$_Identity _$$_IdentityFromJson(Map<String, dynamic> json) => _$_Identity(
|
||||
json['account_records'] as Map<String, dynamic>,
|
||||
(value) => value as String,
|
||||
(value) => ISet<AccountRecordInfo>.fromJson(
|
||||
value, AccountRecordInfo.fromJson)),
|
||||
value, (value) => AccountRecordInfo.fromJson(value))),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$$_IdentityToJson(_$_Identity instance) =>
|
||||
|
@ -24,7 +24,7 @@ Map<String, dynamic> _$$_UserLoginToJson(_$_UserLogin instance) =>
|
||||
_$_ActiveLogins _$$_ActiveLoginsFromJson(Map<String, dynamic> json) =>
|
||||
_$_ActiveLogins(
|
||||
userLogins: IList<UserLogin>.fromJson(
|
||||
json['user_logins'], UserLogin.fromJson),
|
||||
json['user_logins'], (value) => UserLogin.fromJson(value)),
|
||||
activeUserLogin: json['active_user_login'] == null
|
||||
? null
|
||||
: Typed<FixedEncodedString43>.fromJson(json['active_user_login']),
|
||||
|
@ -1,26 +1,310 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:signal_strength_indicator/signal_strength_indicator.dart';
|
||||
|
||||
class HomePage extends ConsumerWidget {
|
||||
import '../tools/tools.dart';
|
||||
|
||||
class HomePage extends ConsumerStatefulWidget {
|
||||
const HomePage({super.key});
|
||||
static const path = '/home';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) => Scaffold(
|
||||
appBar: AppBar(title: const Text('VeilidChat')),
|
||||
body: const Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text('Home Page'),
|
||||
// ElevatedButton(
|
||||
// onPressed: () {
|
||||
// ref.watch(authNotifierProvider.notifier).logout();
|
||||
// },
|
||||
// child: const Text("Logout"),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
HomePageState createState() => HomePageState();
|
||||
}
|
||||
|
||||
class HomePageState extends ConsumerState<HomePage>
|
||||
with TickerProviderStateMixin {
|
||||
final _unfocusNode = FocusNode();
|
||||
final scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
bool hasContainerTriggered = false;
|
||||
final animationsMap = {
|
||||
'containerOnActionTriggerAnimation': AnimationInfo(
|
||||
trigger: AnimationTrigger.onActionTrigger,
|
||||
applyInitialState: false,
|
||||
effects: [
|
||||
MoveEffect(
|
||||
curve: Curves.bounceOut,
|
||||
delay: 0.ms,
|
||||
duration: 500.ms,
|
||||
begin: const Offset(100, 0),
|
||||
end: Offset.zero,
|
||||
),
|
||||
],
|
||||
),
|
||||
};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
// // On page load action.
|
||||
// SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||
// await actions.initialize(
|
||||
// context,
|
||||
// );
|
||||
// });
|
||||
|
||||
setupAnimations(
|
||||
animationsMap.values.where((anim) =>
|
||||
anim.trigger == AnimationTrigger.onActionTrigger ||
|
||||
!anim.applyInitialState),
|
||||
this,
|
||||
);
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {}));
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_unfocusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
key: scaffoldKey,
|
||||
appBar: AppBar(title: const Text('VeilidChat')),
|
||||
body: SafeArea(
|
||||
child: GestureDetector(
|
||||
onTap: () => FocusScope.of(context).requestFocus(_unfocusNode),
|
||||
child: Stack(
|
||||
children: [
|
||||
if (responsiveVisibility(
|
||||
context: context,
|
||||
phone: false,
|
||||
))
|
||||
Align(
|
||||
alignment: AlignmentDirectional.centerEnd,
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.66,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).scaffoldBackgroundColor,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: const BoxDecoration(),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 56,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(0),
|
||||
),
|
||||
child: Align(
|
||||
alignment: AlignmentDirectional.centerStart,
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(
|
||||
16, 0, 16, 0),
|
||||
child: Text(
|
||||
"current contact",
|
||||
// getJsonField(
|
||||
// FFAppState().CurrentContact,
|
||||
// r'''$.name''',
|
||||
// ).toString(),
|
||||
textAlign: TextAlign.start,
|
||||
// style: Theme.of(context)
|
||||
// .textTheme....
|
||||
// .override(
|
||||
// fontFamily: 'Noto Sans',
|
||||
// color: FlutterFlowTheme.of(context)
|
||||
// .header,
|
||||
// ),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: 100,
|
||||
decoration: const BoxDecoration(),
|
||||
child: ChatComponentWidget(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// if (FFAppState().CurrentContact == null)
|
||||
// Container(
|
||||
// width: double.infinity,
|
||||
// height: double.infinity,
|
||||
// decoration: const BoxDecoration(),
|
||||
// child: NoContactComponentWidget(),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
).animateOnActionTrigger(
|
||||
animationsMap['containerOnActionTriggerAnimation']!,
|
||||
hasBeenTriggered: hasContainerTriggered),
|
||||
),
|
||||
if (responsiveVisibility(
|
||||
context: context,
|
||||
phone: false,
|
||||
))
|
||||
Material(
|
||||
color: Colors.transparent,
|
||||
elevation: 4,
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.34,
|
||||
height: double.infinity,
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: MediaQuery.of(context).size.width * 0.34,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).scaffoldBackgroundColor,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 56,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).secondaryHeaderColor,
|
||||
borderRadius: BorderRadius.circular(0),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
16, 8, 16, 8),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: AlignmentDirectional.centerStart,
|
||||
child: Text(
|
||||
'Contacts',
|
||||
textAlign: TextAlign.start,
|
||||
// style: Theme.of(context).dialogTheme.titleTextStyle
|
||||
// .title2
|
||||
// .override(
|
||||
// fontFamily: 'Noto Sans',
|
||||
// color: FlutterFlowTheme.of(context)
|
||||
// .header,
|
||||
// ),
|
||||
),
|
||||
),
|
||||
),
|
||||
SignalStrengthIndicator.bars(
|
||||
value: .5, //_signalStrength,
|
||||
size: 50,
|
||||
barCount: 5,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: const BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 0,
|
||||
color: Color(0x33000000),
|
||||
offset: Offset(0, 0),
|
||||
)
|
||||
],
|
||||
),
|
||||
child: ContactListComponentWidget(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
if (responsiveVisibility(
|
||||
context: context,
|
||||
tablet: false,
|
||||
tabletLandscape: false,
|
||||
desktop: false,
|
||||
))
|
||||
Material(
|
||||
color: Colors.transparent,
|
||||
elevation: 4,
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).scaffoldBackgroundColor,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 56,
|
||||
decoration: BoxDecoration(
|
||||
//color: Theme.of(context).secondaryColor,
|
||||
borderRadius: BorderRadius.circular(0),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
16, 8, 16, 8),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment:
|
||||
const AlignmentDirectional(-1, 0),
|
||||
child: Text(
|
||||
'Contacts',
|
||||
textAlign: TextAlign.start,
|
||||
// style: FlutterFlowTheme.of(context)
|
||||
// .title2
|
||||
// .override(
|
||||
// fontFamily: 'Noto Sans',
|
||||
// color: FlutterFlowTheme.of(context)
|
||||
// .header,
|
||||
// ),
|
||||
),
|
||||
),
|
||||
),
|
||||
SignalStrengthIndicator.bars(
|
||||
value: .5, //_signalStrength,
|
||||
size: 50,
|
||||
barCount: 5,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: const BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 0,
|
||||
color: Color(0x33000000),
|
||||
offset: Offset(0, 0),
|
||||
)
|
||||
],
|
||||
),
|
||||
child: ContactListComponentWidget(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
@ -114,8 +114,11 @@ class NewAccountPageState extends ConsumerState<NewAccountPage> {
|
||||
enableTitleBar(true);
|
||||
portraitOnly();
|
||||
|
||||
// final localAccountsData = ref.watch(localAccountsProvider);
|
||||
final displayModalHUD = isInAsyncCall; // || !localAccountsData.hasValue;
|
||||
final localAccounts = ref.watch(localAccountsProvider);
|
||||
final logins = ref.watch(loginsProvider);
|
||||
|
||||
final displayModalHUD =
|
||||
isInAsyncCall || !localAccounts.hasValue || !logins.hasValue;
|
||||
|
||||
return Scaffold(
|
||||
// resizeToAvoidBottomInset: false,
|
||||
|
@ -6,7 +6,7 @@ part of 'local_accounts.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$localAccountsHash() => r'37ed2ab40b6ed9063c7d1d00f067b7006c9a7670';
|
||||
String _$localAccountsHash() => r'f69de269e15fabb83d1afbb7fdb6eb7693d0ce24';
|
||||
|
||||
/// See also [LocalAccounts].
|
||||
@ProviderFor(LocalAccounts)
|
||||
|
@ -6,7 +6,7 @@ part of 'logins.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$loginsHash() => r'cf7f1a2343340a4dc4ebfa4009e846d0a39c0167';
|
||||
String _$loginsHash() => r'ed9dbe91a248f662ccb0fac6edf5b1892cf2ef92';
|
||||
|
||||
/// See also [Logins].
|
||||
@ProviderFor(Logins)
|
||||
|
@ -37,9 +37,13 @@ class RouterNotifier extends _$RouterNotifier implements Listenable {
|
||||
return null;
|
||||
}
|
||||
|
||||
// No matter where we are, if there's not
|
||||
|
||||
switch (state.location) {
|
||||
case IndexPage.path:
|
||||
return hasAnyAccount ? HomePage.path : NewAccountPage.path;
|
||||
case NewAccountPage.path:
|
||||
return hasAnyAccount ? HomePage.path : null;
|
||||
default:
|
||||
return hasAnyAccount ? null : NewAccountPage.path;
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ part of 'router_notifier.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$routerNotifierHash() => r'00de1dd715945e96b49507ea55d7b97a78366adc';
|
||||
String _$routerNotifierHash() => r'ef31219dde5e12b2bb224c79ca13ab4f414c81b4';
|
||||
|
||||
/// See also [RouterNotifier].
|
||||
@ProviderFor(RouterNotifier)
|
||||
|
98
lib/tools/animations.dart
Normal file
@ -0,0 +1,98 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
|
||||
enum AnimationTrigger {
|
||||
onPageLoad,
|
||||
onActionTrigger,
|
||||
}
|
||||
|
||||
class AnimationInfo {
|
||||
AnimationInfo({
|
||||
required this.trigger,
|
||||
required this.effects,
|
||||
this.loop = false,
|
||||
this.reverse = false,
|
||||
this.applyInitialState = true,
|
||||
});
|
||||
final AnimationTrigger trigger;
|
||||
final List<Effect<dynamic>> effects;
|
||||
final bool applyInitialState;
|
||||
final bool loop;
|
||||
final bool reverse;
|
||||
late Adapter adapter;
|
||||
late AnimationController controller;
|
||||
}
|
||||
|
||||
void createAnimation(AnimationInfo animation, TickerProvider vsync) {
|
||||
final newController = AnimationController(vsync: vsync);
|
||||
animation
|
||||
..controller = newController
|
||||
..adapter = (ValueAdapter(0)..attach(newController));
|
||||
}
|
||||
|
||||
void setupAnimations(Iterable<AnimationInfo> animations, TickerProvider vsync) {
|
||||
for (final animation in animations) {
|
||||
createAnimation(animation, vsync);
|
||||
}
|
||||
}
|
||||
|
||||
extension AnimatedWidgetExtension on Widget {
|
||||
Widget animateOnPageLoad(AnimationInfo animationInfo) => Animate(
|
||||
controller:
|
||||
animationInfo.applyInitialState ? null : animationInfo.controller,
|
||||
adapter: animationInfo.applyInitialState ? null : animationInfo.adapter,
|
||||
effects: animationInfo.effects,
|
||||
child: this,
|
||||
onPlay: (controller) => animationInfo.loop
|
||||
? controller.repeat(reverse: animationInfo.reverse)
|
||||
: null,
|
||||
onComplete: (controller) => !animationInfo.loop && animationInfo.reverse
|
||||
? controller.reverse()
|
||||
: null);
|
||||
|
||||
Widget animateOnActionTrigger(
|
||||
AnimationInfo animationInfo, {
|
||||
bool hasBeenTriggered = false,
|
||||
}) =>
|
||||
hasBeenTriggered || animationInfo.applyInitialState
|
||||
? Animate(
|
||||
controller: animationInfo.controller,
|
||||
adapter: animationInfo.adapter,
|
||||
effects: animationInfo.effects,
|
||||
child: this)
|
||||
: this;
|
||||
}
|
||||
|
||||
class TiltEffect extends Effect<Offset> {
|
||||
const TiltEffect({
|
||||
super.delay,
|
||||
super.duration,
|
||||
super.curve,
|
||||
Offset? begin,
|
||||
Offset? end,
|
||||
}) : super(
|
||||
begin: begin ?? Offset.zero,
|
||||
end: end ?? Offset.zero,
|
||||
);
|
||||
|
||||
@override
|
||||
Widget build(
|
||||
BuildContext context,
|
||||
Widget child,
|
||||
AnimationController controller,
|
||||
EffectEntry entry,
|
||||
) {
|
||||
final animation = buildAnimation(controller, entry);
|
||||
return getOptimizedBuilder<Offset>(
|
||||
animation: animation,
|
||||
builder: (_, __) => Transform(
|
||||
transform: Matrix4.identity()
|
||||
..setEntry(3, 2, 0.001)
|
||||
..rotateX(animation.value.dx)
|
||||
..rotateY(animation.value.dy),
|
||||
alignment: Alignment.center,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
32
lib/tools/responsive.dart
Normal file
@ -0,0 +1,32 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
bool get isAndroid => !kIsWeb && Platform.isAndroid;
|
||||
bool get isiOS => !kIsWeb && Platform.isIOS;
|
||||
bool get isWeb => kIsWeb;
|
||||
|
||||
const kMobileWidthCutoff = 479.0;
|
||||
|
||||
bool isMobileWidth(BuildContext context) =>
|
||||
MediaQuery.of(context).size.width < kMobileWidthCutoff;
|
||||
|
||||
bool responsiveVisibility({
|
||||
required BuildContext context,
|
||||
bool phone = true,
|
||||
bool tablet = true,
|
||||
bool tabletLandscape = true,
|
||||
bool desktop = true,
|
||||
}) {
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
if (width < kMobileWidthCutoff) {
|
||||
return phone;
|
||||
} else if (width < 767) {
|
||||
return tablet;
|
||||
} else if (width < 991) {
|
||||
return tabletLandscape;
|
||||
} else {
|
||||
return desktop;
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
export 'animations.dart';
|
||||
export 'desktop_control.dart';
|
||||
export 'external_stream_state.dart';
|
||||
export 'json_tools.dart';
|
||||
export 'phono_byte.dart';
|
||||
export 'protobuf_tools.dart';
|
||||
export 'responsive.dart';
|
||||
export 'widget_helpers.dart';
|
||||
|
@ -6,7 +6,7 @@ part of 'veilid_init.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$veilidInstanceHash() => r'6086fc1e7a83e7af81ee05ee84954507d38cb748';
|
||||
String _$veilidInstanceHash() => r'cca5cf288bafc4a051a1713e285f4c1d3ef4b680';
|
||||
|
||||
/// See also [veilidInstance].
|
||||
@ProviderFor(veilidInstance)
|
||||
|
@ -423,6 +423,7 @@
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
||||
@ -560,6 +561,7 @@
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
||||
@ -591,6 +593,7 @@
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
||||
|
@ -1,68 +1,68 @@
|
||||
{
|
||||
"info": {
|
||||
"version": 1,
|
||||
"author": "xcode"
|
||||
"images": [
|
||||
{
|
||||
"filename": "app_icon_16.png",
|
||||
"idiom": "mac",
|
||||
"scale": "1x",
|
||||
"size": "16x16"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
"size": "16x16",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_16.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"size": "16x16",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_32.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"size": "32x32",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_32.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"size": "32x32",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_64.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"size": "128x128",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_128.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"size": "128x128",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_256.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"size": "256x256",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_256.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"size": "256x256",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_512.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"size": "512x512",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_512.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"size": "512x512",
|
||||
"idiom": "mac",
|
||||
"filename": "app_icon_1024.png",
|
||||
"scale": "2x"
|
||||
}
|
||||
]
|
||||
{
|
||||
"filename": "app_icon_32.png",
|
||||
"idiom": "mac",
|
||||
"scale": "2x",
|
||||
"size": "16x16"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_32.png",
|
||||
"idiom": "mac",
|
||||
"scale": "1x",
|
||||
"size": "32x32"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_64.png",
|
||||
"idiom": "mac",
|
||||
"scale": "2x",
|
||||
"size": "32x32"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_128.png",
|
||||
"idiom": "mac",
|
||||
"scale": "1x",
|
||||
"size": "128x128"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_256.png",
|
||||
"idiom": "mac",
|
||||
"scale": "2x",
|
||||
"size": "128x128"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_256.png",
|
||||
"idiom": "mac",
|
||||
"scale": "1x",
|
||||
"size": "256x256"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_512.png",
|
||||
"idiom": "mac",
|
||||
"scale": "2x",
|
||||
"size": "256x256"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_512.png",
|
||||
"idiom": "mac",
|
||||
"scale": "1x",
|
||||
"size": "512x512"
|
||||
},
|
||||
{
|
||||
"filename": "app_icon_1024.png",
|
||||
"idiom": "mac",
|
||||
"scale": "2x",
|
||||
"size": "512x512"
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"author": "icons_launcher",
|
||||
"version": 1
|
||||
}
|
||||
}
|
32
pubspec.lock
@ -374,6 +374,14 @@ packages:
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_animate:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_animate
|
||||
sha256: "62f346340a96192070e31e3f2a1bd30a28530f1fe8be978821e06cd56b74d6d2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.2.0+1"
|
||||
flutter_blurhash:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -406,14 +414,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.18.6"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_launcher_icons
|
||||
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.1"
|
||||
flutter_localizations:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@ -557,6 +557,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.2"
|
||||
icons_launcher:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: icons_launcher
|
||||
sha256: af05397792f6d82b93375a8a0253b8db0d3f816ef1dd1bf5c35cbab55321d327
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.3"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -949,6 +957,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.4"
|
||||
signal_strength_indicator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: signal_strength_indicator
|
||||
sha256: "076f84fbffc69694f0df3d376822d806cc0de67d379aa57ebcdab09384ab839b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.1"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
|
32
pubspec.yaml
@ -22,6 +22,7 @@ dependencies:
|
||||
fixnum: ^1.1.0
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_animate: ^4.2.0+1
|
||||
flutter_form_builder: ^9.1.0
|
||||
flutter_hooks: ^0.18.0
|
||||
flutter_localizations:
|
||||
@ -45,6 +46,7 @@ dependencies:
|
||||
reorderable_grid: ^1.0.7
|
||||
riverpod_annotation: ^2.1.1
|
||||
shared_preferences: ^2.0.15
|
||||
signal_strength_indicator: ^0.4.1
|
||||
uuid: ^3.0.7
|
||||
veilid:
|
||||
# veilid: ^0.0.1
|
||||
@ -53,29 +55,29 @@ dependencies:
|
||||
|
||||
dev_dependencies:
|
||||
build_runner: ^2.4.6
|
||||
flutter_launcher_icons: "^0.13.1"
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
freezed: ^2.3.5
|
||||
icons_launcher: ^2.1.3
|
||||
json_serializable: ^6.7.1
|
||||
lint_hard: ^4.0.0
|
||||
riverpod_generator: ^2.2.3
|
||||
|
||||
flutter_launcher_icons:
|
||||
icons_launcher:
|
||||
image_path: "assets/launcher/icon.png"
|
||||
android: true
|
||||
ios: true
|
||||
remove_alpha_ios: true
|
||||
min_sdk_android: 24 # android min sdk min:16, default 21
|
||||
web:
|
||||
generate: true
|
||||
background_color: "#33183f"
|
||||
theme_color: "#863fa6"
|
||||
windows:
|
||||
generate: true
|
||||
icon_size: 48 # min:48, max:256, default: 48
|
||||
macos:
|
||||
generate: true
|
||||
platforms:
|
||||
android:
|
||||
enable: true
|
||||
ios:
|
||||
enable: true
|
||||
web:
|
||||
enable: true
|
||||
macos:
|
||||
enable: true
|
||||
windows:
|
||||
enable: true
|
||||
linux:
|
||||
enable: true
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
|
8
snap/gui/app_icon.desktop
Normal file
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Name=Flutter Linux App
|
||||
Comment=Flutter Linux launcher icon
|
||||
Exec=app_icon
|
||||
Icon=app_icon.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Entertainment;
|
BIN
snap/gui/app_icon.png
Normal file
After Width: | Height: | Size: 40 KiB |
@ -1,2 +1,3 @@
|
||||
#!/bin/bash
|
||||
dart run flutter_launcher_icons
|
||||
flutter pub get
|
||||
dart run icons_launcher:create
|
||||
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 85 KiB |