统一弹窗风格:Material Design 3 规范,消除颜色不一致
- 所有 AlertDialog 替换为 ModernDialog - ConfirmDialog/AssetDialogs 去掉 GlassPanel,统一 surfaceContainer 背景 - 按钮统一 FilledButton + TextButton - 修复 import 路径
@@ -1 +1 @@
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
"DRgHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYWRhLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2FkYS5wbmcHHGFzc2V0cy9pY29ucy9jcnlwdG8vYXRvbS5wbmcMAQ0BBwVhc3NldAccYXNzZXRzL2ljb25zL2NyeXB0by9hdG9tLnBuZwccYXNzZXRzL2ljb25zL2NyeXB0by9hdmF4LnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL2F2YXgucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL2JuYi5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by9ibmIucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL2J0Yy5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by9idGMucG5nBxxhc3NldHMvaWNvbnMvY3J5cHRvL2RvZ2UucG5nDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vZG9nZS5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZG90LnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2RvdC5wbmcHJWFzc2V0cy9pY29ucy9jcnlwdG8vZG93bmxvYWRfaWNvbnMuc2gMAQ0BBwVhc3NldAclYXNzZXRzL2ljb25zL2NyeXB0by9kb3dubG9hZF9pY29ucy5zaAcbYXNzZXRzL2ljb25zL2NyeXB0by9ldGgucG5nDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZXRoLnBuZwccYXNzZXRzL2ljb25zL2NyeXB0by9saW5rLnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL2xpbmsucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL2x0Yy5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by9sdGMucG5nBx1hc3NldHMvaWNvbnMvY3J5cHRvL21hdGljLnBuZwwBDQEHBWFzc2V0Bx1hc3NldHMvaWNvbnMvY3J5cHRvL21hdGljLnBuZwccYXNzZXRzL2ljb25zL2NyeXB0by9zaGliLnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL3NoaWIucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL3NvbC5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by9zb2wucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL3VuaS5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by91bmkucG5nBxxhc3NldHMvaWNvbnMvY3J5cHRvL3VzZHQucG5nDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vdXNkdC5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8veHJwLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL3hycC5wbmcHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXcxMDAudHRmDAENAQcFYXNzZXQHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXcxMDAudHRmB0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13MjAwLnR0ZgwBDQEHBWFzc2V0B0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13MjAwLnR0ZgdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzMwMC50dGYMAQ0BBwVhc3NldAdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzMwMC50dGYHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXc0MDAudHRmDAENAQcFYXNzZXQHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXc0MDAudHRmB0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13NTAwLnR0ZgwBDQEHBWFzc2V0B0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13NTAwLnR0ZgdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzYwMC50dGYMAQ0BBwVhc3NldAdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzYwMC50dGYHL3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9sdWNpZGUudHRmDAENAQcFYXNzZXQHL3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9sdWNpZGUudHRm"
|
||||
"DSgHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYWRhLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2FkYS5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYWRhLnN2ZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2FkYS5zdmcHHGFzc2V0cy9pY29ucy9jcnlwdG8vYXRvbS5wbmcMAQ0BBwVhc3NldAccYXNzZXRzL2ljb25zL2NyeXB0by9hdG9tLnBuZwccYXNzZXRzL2ljb25zL2NyeXB0by9hdG9tLnN2ZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL2F0b20uc3ZnBxxhc3NldHMvaWNvbnMvY3J5cHRvL2F2YXgucG5nDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vYXZheC5wbmcHHGFzc2V0cy9pY29ucy9jcnlwdG8vYXZheC5zdmcMAQ0BBwVhc3NldAccYXNzZXRzL2ljb25zL2NyeXB0by9hdmF4LnN2ZwcbYXNzZXRzL2ljb25zL2NyeXB0by9ibmIucG5nDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYm5iLnBuZwcbYXNzZXRzL2ljb25zL2NyeXB0by9ibmIuc3ZnDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYm5iLnN2ZwcbYXNzZXRzL2ljb25zL2NyeXB0by9idGMucG5nDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYnRjLnBuZwcbYXNzZXRzL2ljb25zL2NyeXB0by9idGMuc3ZnDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vYnRjLnN2ZwccYXNzZXRzL2ljb25zL2NyeXB0by9kb2dlLnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL2RvZ2UucG5nBxxhc3NldHMvaWNvbnMvY3J5cHRvL2RvZ2Uuc3ZnDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vZG9nZS5zdmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZG90LnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2RvdC5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZG90LnN2ZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2RvdC5zdmcHJWFzc2V0cy9pY29ucy9jcnlwdG8vZG93bmxvYWRfaWNvbnMuc2gMAQ0BBwVhc3NldAclYXNzZXRzL2ljb25zL2NyeXB0by9kb3dubG9hZF9pY29ucy5zaAcbYXNzZXRzL2ljb25zL2NyeXB0by9ldGgucG5nDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZXRoLnBuZwcbYXNzZXRzL2ljb25zL2NyeXB0by9ldGguc3ZnDAENAQcFYXNzZXQHG2Fzc2V0cy9pY29ucy9jcnlwdG8vZXRoLnN2ZwccYXNzZXRzL2ljb25zL2NyeXB0by9saW5rLnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL2xpbmsucG5nBxxhc3NldHMvaWNvbnMvY3J5cHRvL2xpbmsuc3ZnDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vbGluay5zdmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vbHRjLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2x0Yy5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vbHRjLnN2ZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL2x0Yy5zdmcHHWFzc2V0cy9pY29ucy9jcnlwdG8vbWF0aWMucG5nDAENAQcFYXNzZXQHHWFzc2V0cy9pY29ucy9jcnlwdG8vbWF0aWMucG5nBx1hc3NldHMvaWNvbnMvY3J5cHRvL21hdGljLnN2ZwwBDQEHBWFzc2V0Bx1hc3NldHMvaWNvbnMvY3J5cHRvL21hdGljLnN2ZwccYXNzZXRzL2ljb25zL2NyeXB0by9zaGliLnBuZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL3NoaWIucG5nBxxhc3NldHMvaWNvbnMvY3J5cHRvL3NoaWIuc3ZnDAENAQcFYXNzZXQHHGFzc2V0cy9pY29ucy9jcnlwdG8vc2hpYi5zdmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vc29sLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL3NvbC5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vc29sLnN2ZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL3NvbC5zdmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vdW5pLnBuZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL3VuaS5wbmcHG2Fzc2V0cy9pY29ucy9jcnlwdG8vdW5pLnN2ZwwBDQEHBWFzc2V0Bxthc3NldHMvaWNvbnMvY3J5cHRvL3VuaS5zdmcHHGFzc2V0cy9pY29ucy9jcnlwdG8vdXNkdC5wbmcMAQ0BBwVhc3NldAccYXNzZXRzL2ljb25zL2NyeXB0by91c2R0LnBuZwccYXNzZXRzL2ljb25zL2NyeXB0by91c2R0LnN2ZwwBDQEHBWFzc2V0Bxxhc3NldHMvaWNvbnMvY3J5cHRvL3VzZHQuc3ZnBxthc3NldHMvaWNvbnMvY3J5cHRvL3hycC5wbmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by94cnAucG5nBxthc3NldHMvaWNvbnMvY3J5cHRvL3hycC5zdmcMAQ0BBwVhc3NldAcbYXNzZXRzL2ljb25zL2NyeXB0by94cnAuc3ZnB0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13MTAwLnR0ZgwBDQEHBWFzc2V0B0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13MTAwLnR0ZgdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzIwMC50dGYMAQ0BBwVhc3NldAdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzIwMC50dGYHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXczMDAudHRmDAENAQcFYXNzZXQHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXczMDAudHRmB0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13NDAwLnR0ZgwBDQEHBWFzc2V0B0dwYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvYnVpbGRfZm9udC9MdWNpZGVWYXJpYWJsZS13NDAwLnR0ZgdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzUwMC50dGYMAQ0BBwVhc3NldAdHcGFja2FnZXMvbHVjaWRlX2ljb25zX2ZsdXR0ZXIvYXNzZXRzL2J1aWxkX2ZvbnQvTHVjaWRlVmFyaWFibGUtdzUwMC50dGYHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXc2MDAudHRmDAENAQcFYXNzZXQHR3BhY2thZ2VzL2x1Y2lkZV9pY29uc19mbHV0dGVyL2Fzc2V0cy9idWlsZF9mb250L0x1Y2lkZVZhcmlhYmxlLXc2MDAudHRmBy9wYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvbHVjaWRlLnR0ZgwBDQEHBWFzc2V0By9wYWNrYWdlcy9sdWNpZGVfaWNvbnNfZmx1dHRlci9hc3NldHMvbHVjaWRlLnR0Zg=="
|
||||
@@ -1268,6 +1268,38 @@ xxhash
|
||||
Copyright 2019 The ANGLE Project Authors. All rights reserved.
|
||||
Use of this source code is governed by a BSD-style license that can be
|
||||
found in the LICENSE file.
|
||||
--------------------------------------------------------------------------------
|
||||
args
|
||||
logging
|
||||
|
||||
Copyright 2013, the Dart project authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
async
|
||||
collection
|
||||
@@ -1907,6 +1939,8 @@ path_provider_foundation
|
||||
shared_preferences
|
||||
shared_preferences_android
|
||||
shared_preferences_foundation
|
||||
vector_graphics
|
||||
vector_graphics_compiler
|
||||
|
||||
Copyright 2013 The Flutter Authors
|
||||
|
||||
@@ -5497,6 +5531,7 @@ shared_preferences_linux
|
||||
shared_preferences_platform_interface
|
||||
shared_preferences_web
|
||||
shared_preferences_windows
|
||||
vector_graphics_codec
|
||||
xdg_directories
|
||||
|
||||
Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
@@ -5525,6 +5560,28 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
flutter_svg
|
||||
|
||||
Copyright (c) 2018 Dan Field
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
--------------------------------------------------------------------------------
|
||||
freetype2
|
||||
|
||||
@@ -23797,37 +23854,6 @@ CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
--------------------------------------------------------------------------------
|
||||
logging
|
||||
|
||||
Copyright 2013, the Dart project authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
lucide_icons_flutter
|
||||
|
||||
@@ -24601,6 +24627,29 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
path_parsing
|
||||
|
||||
Copyright (c) 2018 Dan Field
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
perfetto
|
||||
|
||||
@@ -25003,6 +25052,32 @@ perfetto
|
||||
Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
|
||||
for details. All rights reserved. Use of this source code is governed by a
|
||||
BSD-style license that can be found in the LICENSE file.
|
||||
--------------------------------------------------------------------------------
|
||||
petitparser
|
||||
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2006-2024 Lukas Renggli.
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
platform
|
||||
|
||||
@@ -31327,6 +31402,32 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
--------------------------------------------------------------------------------
|
||||
xml
|
||||
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2006-2025 Lukas Renggli.
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
xxhash
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter x="-7.5%" y="-6%" width="115.5%" height="117.2%" filterUnits="objectBoundingBox" id="a"><feOffset dy=".5" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation=".5" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.204257246 0" in="shadowBlurOuter1"/></filter><path d="M15.725 6.06c.479-.247 1.064.324.81.795-.149.384-.71.486-.996.193-.303-.28-.204-.836.186-.989zm-5.155.546c.291-.118.66.144.63.457.03.338-.39.588-.687.427-.393-.15-.348-.778.057-.884zm10.558.893c-.455-.054-.527-.758-.09-.9.34-.162.652.143.702.46-.072.27-.302.518-.612.44zm-9.385 1.265c.487-.303 1.181.148 1.106.705-.025.561-.783.887-1.211.507-.414-.298-.351-.982.105-1.212zm7.43.322c.217-.55 1.097-.568 1.344-.032.245.417-.056.934-.491 1.076-.577.106-1.124-.508-.853-1.044zm-4.069 1.013c-.005-.474.433-.826.89-.859.304.06.634.187.764.488.243.416.027.987-.41 1.178-.2.11-.438.069-.656.056-.333-.16-.614-.477-.588-.863zm-7.666.69c.445-.27 1.045.22.876.696-.092.411-.654.578-.975.316-.343-.246-.289-.837.1-1.013zm16.462-.002c.377-.288 1 .043.954.511.026.427-.513.75-.887.53-.412-.183-.455-.807-.067-1.04zm-6.64.851c.622-.22 1.362.043 1.716.59.468.667.22 1.683-.507 2.066-.752.453-1.851.07-2.13-.758-.315-.74.145-1.666.92-1.898zm-3.653.073c.69-.32 1.619-.052 1.952.642.392.676.089 1.617-.612 1.966-.702.393-1.693.095-2.032-.63-.381-.702-.043-1.655.692-1.978zM9.95 12.94c.053-.437.472-.722.895-.752a.98.98 0 01.87.857c-.03.45-.383.888-.867.886-.533.045-1-.477-.898-.991zm10.802-.656c.547-.313 1.306.142 1.282.76.037.655-.803 1.116-1.347.732-.566-.32-.522-1.22.065-1.492zm-8.63 2.307c.638-.173 1.37.123 1.683.701.343.582.203 1.39-.33 1.818-.685.626-1.946.374-2.31-.48-.419-.783.09-1.833.956-2.04zm6.927-.003c.621-.175 1.351.06 1.685.617.442.637.231 1.588-.426 1.998-.69.477-1.756.227-2.136-.519-.46-.771.003-1.861.877-2.096zm-11.04.726c.552-.205 1.164.394.94.933-.136.49-.839.672-1.202.31-.425-.34-.268-1.095.262-1.243zm14.969.782a.836.836 0 01.788-.874c.378.06.746.36.716.765.035.535-.62.898-1.084.647-.217-.109-.328-.328-.42-.538zM5.294 15.58c.332-.143.743.14.667.503-.018.411-.635.57-.861.226-.2-.239-.08-.606.194-.73zm20.949-.009c.234-.163.61-.046.702.223.157.294-.131.696-.467.647-.472.042-.624-.665-.235-.87zm-12.317 1.973c.874-.223 1.814.494 1.82 1.38.056.895-.87 1.688-1.764 1.482-.692-.11-1.235-.766-1.212-1.453-.002-.658.502-1.27 1.156-1.409zm3.462-.001c.887-.244 1.855.486 1.841 1.392.047.878-.85 1.645-1.726 1.47-.825-.104-1.433-.995-1.203-1.783.116-.524.562-.95 1.088-1.08zm-6.676.545c.614-.103 1.19.57.941 1.144-.182.612-1.086.777-1.486.278-.468-.48-.118-1.356.545-1.422zm10.154.027c.548-.226 1.22.24 1.178.825.022.643-.808 1.087-1.343.711-.607-.337-.496-1.33.165-1.536zm2.838 2.8c-.214-.393.175-.914.62-.841.22-.004.375.167.516.311.029.233.078.511-.119.69-.267.333-.872.238-1.017-.16zm-16.268-.732c.415-.271 1.012.134.918.61-.05.423-.59.664-.945.424-.382-.217-.368-.836.027-1.034zm8.193.883c.543-.235 1.235.23 1.183.818.04.65-.815 1.1-1.346.71-.59-.335-.491-1.321.163-1.528zm-3.794.871c.462-.239 1.082.174 1.04.684.014.418-.4.774-.82.712-.347-.007-.573-.314-.685-.605.006-.317.139-.67.465-.79zm7.686.008c.476-.29 1.152.126 1.107.67.012.57-.752.934-1.195.56-.428-.293-.376-.997.088-1.23zm1.337 3.25c-.212-.314.037-.693.38-.765.277.055.57.26.511.574-.04.427-.674.557-.891.192zm-10.611-.273c.084-.25.288-.497.587-.432.435.03.564.676.183.875-.342.227-.74-.084-.77-.443zm5.12.287c.083-.37.568-.549.888-.353.212.09.274.322.328.52a8.822 8.822 0 00-.08.31c-.131.152-.3.305-.518.3-.405.047-.771-.404-.619-.777z" id="b"/></defs><g fill="none"><circle cx="16" cy="16" r="16" fill="#0D1E30"/><use fill="#000" filter="url(#a)" xlink:href="#b"/><use fill="#FFF" xlink:href="#b"/></g></svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="16" cy="16" r="16" fill="#2E3148"/><g transform="translate(6 5)" fill="#FFF"><path d="M10.02.53c-1.295 0-2.345 4.697-2.345 10.49s1.05 10.49 2.345 10.49c1.294 0 2.344-4.697 2.344-10.49S11.314.53 10.02.53zm.162 20.387c-.148.198-.297.05-.297.05-.596-.692-.894-1.975-.894-1.975-1.043-3.357-.795-10.564-.795-10.564.49-5.721 1.382-7.073 1.685-7.373a.185.185 0 01.238-.019c.44.313.81 1.617.81 1.617 1.09 4.048.991 7.848.991 7.848.099 3.308-.546 7.01-.546 7.01-.497 2.814-1.192 3.406-1.192 3.406z"/><path d="M19.118 5.8c-.645-1.124-5.24.303-10.267 3.186-5.027 2.883-8.573 6.13-7.93 7.254.645 1.124 5.241-.303 10.268-3.186 5.027-2.883 8.574-6.131 7.93-7.254zM1.515 16.085c-.246-.03-.19-.234-.19-.234.302-.86 1.266-1.758 1.266-1.758 2.393-2.575 8.769-5.946 8.769-5.946 5.206-2.422 6.823-2.32 7.233-2.208a.185.185 0 01.135.198c-.05.537-1 1.507-1 1.507-2.966 2.961-6.312 4.768-6.312 4.768-2.82 1.732-6.353 3.013-6.353 3.013-2.688.968-3.548.66-3.548.66z"/><path d="M19.095 16.277c.65-1.12-2.887-4.383-7.898-7.288C6.187 6.085 1.593 4.641.944 5.763c-.65 1.123 2.888 4.383 7.9 7.288 5.013 2.904 9.602 4.348 10.251 3.226zM1.375 6.196c-.097-.228.106-.283.106-.283.897-.17 2.157.217 2.157.217 3.427.78 9.538 4.608 9.538 4.608 4.705 3.292 5.427 4.743 5.535 5.154a.185.185 0 01-.103.215c-.49.225-1.805-.11-1.805-.11-4.05-1.086-7.289-3.075-7.289-3.075-2.91-1.57-5.788-3.985-5.788-3.985-2.187-1.842-2.35-2.74-2.35-2.74l-.002-.001z"/><circle cx="9.995" cy="10.995" r="1.234"/><circle cx="15.055" cy="6.256" r="1"/><circle cx="3.306" cy="8.774" r="1"/><circle cx="8.539" cy="17.856" r="1"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle fill="#E84142" fill-rule="nonzero" cx="16" cy="16" r="16"/><path d="M11.518 22.75H8.49c-.636 0-.95 0-1.142-.123A.77.77 0 017 22.025c-.012-.226.145-.503.46-1.055l7.472-13.193c.318-.56.48-.84.682-.944a.77.77 0 01.698 0c.203.104.364.384.682.944l1.536 2.686.008.014c.343.6.517.906.593 1.226a2.26 2.26 0 010 1.066c-.076.323-.249.63-.597 1.24l-3.926 6.95-.01.017c-.346.606-.52.913-.764 1.145a2.284 2.284 0 01-.93.54c-.319.089-.675.089-1.387.089zm7.643 0h4.336c.64 0 .962 0 1.154-.126a.768.768 0 00.348-.607c.011-.219-.142-.484-.443-1.005l-.032-.054-2.172-3.722-.025-.042c-.305-.517-.46-.778-.657-.879a.762.762 0 00-.693 0c-.2.104-.36.377-.678.925l-2.165 3.722-.007.013c-.317.548-.476.821-.464 1.046a.777.777 0 00.348.606c.188.123.51.123 1.15.123z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 891 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none"><circle cx="16" cy="16" r="16" fill="#F3BA2F"/><path fill="#FFF" d="M12.116 14.404L16 10.52l3.886 3.886 2.26-2.26L16 6l-6.144 6.144 2.26 2.26zM6 16l2.26-2.26L10.52 16l-2.26 2.26L6 16zm6.116 1.596L16 21.48l3.886-3.886 2.26 2.259L16 26l-6.144-6.144-.003-.003 2.263-2.257zM21.48 16l2.26-2.26L26 16l-2.26 2.26L21.48 16zm-3.188-.002h.002V16L16 18.294l-2.291-2.29-.004-.004.004-.003.401-.402.195-.195L16 13.706l2.293 2.293z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 505 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#F7931A"/><path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 953 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#C3A634"/><path fill="#FFF" d="M13.248 14.61h4.314v2.286h-4.314v4.818h2.721c1.077 0 1.958-.145 2.644-.437.686-.291 1.224-.694 1.615-1.21a4.4 4.4 0 00.796-1.815 11.4 11.4 0 00.21-2.252 11.4 11.4 0 00-.21-2.252 4.396 4.396 0 00-.796-1.815c-.391-.516-.93-.919-1.615-1.21-.686-.292-1.567-.437-2.644-.437h-2.721v4.325zm-2.766 2.286H9v-2.285h1.482V8h6.549c1.21 0 2.257.21 3.142.627.885.419 1.607.99 2.168 1.715.56.724.977 1.572 1.25 2.543.273.971.409 2.01.409 3.115a11.47 11.47 0 01-.41 3.115c-.272.97-.689 1.819-1.25 2.543-.56.725-1.282 1.296-2.167 1.715-.885.418-1.933.627-3.142.627h-6.549v-7.104z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 738 B |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle fill="#E6007A" cx="16" cy="16" r="16"/><path d="M16.272 6.625c-3.707 0-6.736 3.012-6.736 6.736 0 .749.124 1.48.356 2.192a.95.95 0 001.194.589.95.95 0 00.588-1.194 4.745 4.745 0 01-.267-1.73c.071-2.512 2.103-4.58 4.616-4.704a4.86 4.86 0 015.115 4.847 4.862 4.862 0 01-4.58 4.848s-.945.053-1.408.125c-.232.035-.41.071-.535.089-.054.018-.107-.036-.09-.09l.161-.783.873-4.028a.934.934 0 00-.712-1.105.934.934 0 00-1.105.713s-2.103 9.802-2.121 9.909a.934.934 0 00.713 1.105.934.934 0 001.105-.713c.017-.107.303-1.408.303-1.408a2.367 2.367 0 011.996-1.854 21.43 21.43 0 011.051-.089 6.744 6.744 0 006.22-6.719c0-3.724-3.03-6.736-6.737-6.736zm.481 15.505a1.122 1.122 0 00-1.336.873c-.125.606.25 1.212.873 1.337a1.122 1.122 0 001.337-.874c.124-.623-.25-1.212-.874-1.336z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 893 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#627EEA"/><g fill="#FFF" fill-rule="nonzero"><path fill-opacity=".602" d="M16.498 4v8.87l7.497 3.35z"/><path d="M16.498 4L9 16.22l7.498-3.35z"/><path fill-opacity=".602" d="M16.498 21.968v6.027L24 17.616z"/><path d="M16.498 27.995v-6.028L9 17.616z"/><path fill-opacity=".2" d="M16.498 20.573l7.497-4.353-7.497-3.348z"/><path fill-opacity=".602" d="M9 16.22l7.498 4.353v-7.701z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 525 B |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle fill="#2A5ADA" cx="16" cy="16" r="16"/><path d="M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 380 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#BFBBBB"/><path fill="#FFF" d="M10.427 19.214L9 19.768l.688-2.759 1.444-.58L13.213 8h5.129l-1.519 6.196 1.41-.571-.68 2.75-1.427.571-.848 3.483H23L22.127 24H9.252z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 331 B |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle fill="#6F41D8" cx="16" cy="16" r="16"/><path d="M21.092 12.693c-.369-.215-.848-.215-1.254 0l-2.879 1.654-1.955 1.078-2.879 1.653c-.369.216-.848.216-1.254 0l-2.288-1.294c-.369-.215-.627-.61-.627-1.042V12.19c0-.431.221-.826.627-1.042l2.25-1.258c.37-.216.85-.216 1.256 0l2.25 1.258c.37.216.628.611.628 1.042v1.654l1.955-1.115v-1.653a1.16 1.16 0 00-.627-1.042l-4.17-2.372c-.369-.216-.848-.216-1.254 0l-4.244 2.372A1.16 1.16 0 006 11.076v4.78c0 .432.221.827.627 1.043l4.244 2.372c.369.215.849.215 1.254 0l2.879-1.618 1.955-1.114 2.879-1.617c.369-.216.848-.216 1.254 0l2.251 1.258c.37.215.627.61.627 1.042v2.552c0 .431-.22.826-.627 1.042l-2.25 1.294c-.37.216-.85.216-1.255 0l-2.251-1.258c-.37-.216-.628-.611-.628-1.042v-1.654l-1.955 1.115v1.653c0 .431.221.827.627 1.042l4.244 2.372c.369.216.848.216 1.254 0l4.244-2.372c.369-.215.627-.61.627-1.042v-4.78a1.16 1.16 0 00-.627-1.042l-4.28-2.409z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1016 B |
@@ -0,0 +1 @@
|
||||
Couldn't find the requested file /svg/color/shib.svg in spothq/cryptocurrency-icons.
|
||||
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle fill="#66F9A1" cx="16" cy="16" r="16"/><path d="M9.925 19.687a.59.59 0 01.415-.17h14.366a.29.29 0 01.207.497l-2.838 2.815a.59.59 0 01-.415.171H7.294a.291.291 0 01-.207-.498l2.838-2.815zm0-10.517A.59.59 0 0110.34 9h14.366c.261 0 .392.314.207.498l-2.838 2.815a.59.59 0 01-.415.17H7.294a.291.291 0 01-.207-.497L9.925 9.17zm12.15 5.225a.59.59 0 00-.415-.17H7.294a.291.291 0 00-.207.498l2.838 2.815c.11.109.26.17.415.17h14.366a.291.291 0 00.207-.498l-2.838-2.815z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 589 B |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle fill="#FF007A" fill-rule="nonzero" cx="16" cy="16" r="16"/><g fill="#FFF"><path d="M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z" fill-rule="nonzero"/><path d="M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z" fill-rule="nonzero"/><path d="M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z" fill-rule="nonzero"/><path d="M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#26A17B"/><path fill="#FFF" d="M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117"/></g></svg>
|
||||
|
After Width: | Height: | Size: 648 B |
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="16" cy="16" r="16" fill="#23292F"/><path d="M23.07 8h2.89l-6.015 5.957a5.621 5.621 0 01-7.89 0L6.035 8H8.93l4.57 4.523a3.556 3.556 0 004.996 0L23.07 8zM8.895 24.563H6l6.055-5.993a5.621 5.621 0 017.89 0L26 24.562h-2.895L18.5 20a3.556 3.556 0 00-4.996 0l-4.61 4.563z" fill="#FFF"/></g></svg>
|
||||
|
After Width: | Height: | Size: 399 B |
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"e4b8dca3f1b4ede4c30371002441c88c12187e
|
||||
|
||||
_flutter.loader.load({
|
||||
serviceWorkerSettings: {
|
||||
serviceWorkerVersion: "494072610" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
|
||||
serviceWorkerVersion: "3768417549" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
|
||||
}
|
||||
});
|
||||
|
||||
@@ -9,8 +9,7 @@ import '../../../../core/theme/app_color_scheme.dart';
|
||||
import '../../../../core/theme/app_spacing.dart';
|
||||
import '../../../../core/utils/toast_utils.dart';
|
||||
import '../../../../providers/asset_provider.dart';
|
||||
import '../../../components/glass_panel.dart';
|
||||
import '../../../components/neon_glow.dart';
|
||||
|
||||
import '../../../shared/ui_constants.dart';
|
||||
|
||||
// ============================================
|
||||
@@ -135,10 +134,13 @@ void showDepositDialog(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: GlassPanel(
|
||||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(AppRadius.xl),
|
||||
),
|
||||
backgroundColor: colorScheme.surfaceContainer,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(AppSpacing.lg),
|
||||
constraints: const BoxConstraints(maxWidth: 400),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -198,19 +200,17 @@ void showDepositDialog(BuildContext context) {
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '取消',
|
||||
type: NeonButtonType.outline,
|
||||
child: TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
height: 48,
|
||||
showGlow: false,
|
||||
style: TextButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(48),
|
||||
),
|
||||
child: const Text('取消'),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.sm),
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '下一步',
|
||||
type: NeonButtonType.primary,
|
||||
child: FilledButton(
|
||||
onPressed: () async {
|
||||
if (formKey.currentState!.validate()) {
|
||||
Navigator.of(ctx).pop();
|
||||
@@ -226,8 +226,10 @@ void showDepositDialog(BuildContext context) {
|
||||
}
|
||||
}
|
||||
},
|
||||
height: 48,
|
||||
showGlow: true,
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(48),
|
||||
),
|
||||
child: const Text('下一步'),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -250,18 +252,21 @@ void showDepositResultDialog(BuildContext context, Map<String, dynamic> data) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: GlassPanel(
|
||||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(AppRadius.xl),
|
||||
),
|
||||
backgroundColor: colorScheme.surfaceContainer,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(AppSpacing.lg),
|
||||
constraints: const BoxConstraints(maxWidth: 400),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
NeonIcon(
|
||||
icon: Icons.check_circle,
|
||||
Icon(
|
||||
Icons.check_circle,
|
||||
color: context.appColors.up,
|
||||
size: 24,
|
||||
),
|
||||
@@ -316,19 +321,17 @@ void showDepositResultDialog(BuildContext context, Map<String, dynamic> data) {
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '稍後確認',
|
||||
type: NeonButtonType.outline,
|
||||
child: TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
height: 44,
|
||||
showGlow: false,
|
||||
style: TextButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('稍後確認'),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.sm),
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '已打款',
|
||||
type: NeonButtonType.primary,
|
||||
child: FilledButton(
|
||||
onPressed: () async {
|
||||
Navigator.of(ctx).pop();
|
||||
final response = await context.read<AssetProvider>().confirmPay(orderNo);
|
||||
@@ -340,8 +343,10 @@ void showDepositResultDialog(BuildContext context, Map<String, dynamic> data) {
|
||||
);
|
||||
}
|
||||
},
|
||||
height: 44,
|
||||
showGlow: true,
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('已打款'),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -386,10 +391,13 @@ void showWithdrawDialog(BuildContext context, String? balance) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: GlassPanel(
|
||||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(AppRadius.xl),
|
||||
),
|
||||
backgroundColor: colorScheme.surfaceContainer,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(AppSpacing.lg),
|
||||
constraints: const BoxConstraints(maxWidth: 400),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -562,19 +570,17 @@ void showWithdrawDialog(BuildContext context, String? balance) {
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '取消',
|
||||
type: NeonButtonType.outline,
|
||||
child: TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
height: 44,
|
||||
showGlow: false,
|
||||
style: TextButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('取消'),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.sm),
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '提交',
|
||||
type: NeonButtonType.primary,
|
||||
child: FilledButton(
|
||||
onPressed: () async {
|
||||
if (formKey.currentState!.validate()) {
|
||||
Navigator.of(ctx).pop();
|
||||
@@ -595,8 +601,10 @@ void showWithdrawDialog(BuildContext context, String? balance) {
|
||||
}
|
||||
}
|
||||
},
|
||||
height: 44,
|
||||
showGlow: true,
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('提交'),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -628,10 +636,13 @@ void showResultDialog(BuildContext context, String title, String? message) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: GlassPanel(
|
||||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(AppRadius.xl),
|
||||
),
|
||||
backgroundColor: colorScheme.surfaceContainer,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(AppSpacing.lg),
|
||||
constraints: const BoxConstraints(maxWidth: 400),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
@@ -654,12 +665,12 @@ void showResultDialog(BuildContext context, String title, String? message) {
|
||||
const SizedBox(height: AppSpacing.lg),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: NeonButton(
|
||||
text: '確定',
|
||||
type: NeonButtonType.primary,
|
||||
child: FilledButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
height: 44,
|
||||
showGlow: false,
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -7,6 +7,7 @@ import '../../../core/theme/app_spacing.dart';
|
||||
import '../../../core/utils/toast_utils.dart';
|
||||
import '../../../providers/asset_provider.dart';
|
||||
import '../../components/material_input.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
|
||||
/// 充值页面
|
||||
class DepositPage extends StatefulWidget {
|
||||
@@ -88,22 +89,12 @@ class _DepositPageState extends State<DepositPage> {
|
||||
Future<void> _confirmPay() async {
|
||||
if (_orderNo == null) return;
|
||||
|
||||
final confirmed = await showDialog<bool>(
|
||||
final confirmed = await ModernDialog.confirm(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('確認已打款'),
|
||||
content: const Text('確認您已完成向指定地址的轉賬?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(ctx, false),
|
||||
child: const Text('取消'),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(ctx, true),
|
||||
child: const Text('確認'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '確認已打款',
|
||||
description: '確認您已完成向指定地址的轉賬?',
|
||||
confirmText: '確認',
|
||||
cancelText: '取消',
|
||||
);
|
||||
|
||||
if (confirmed != true || !mounted) return;
|
||||
|
||||
@@ -7,6 +7,7 @@ import '../../../core/theme/app_theme.dart';
|
||||
import '../../../core/theme/app_theme_extension.dart';
|
||||
import '../../../providers/auth_provider.dart';
|
||||
import '../../components/material_input.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
import '../main/main_page.dart';
|
||||
import 'register_page.dart';
|
||||
|
||||
@@ -296,18 +297,10 @@ class _LoginPageState extends State<LoginPage> {
|
||||
}
|
||||
|
||||
void _showErrorDialog(String message) {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Text('登錄失敗'),
|
||||
content: Text(message),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '登錄失敗',
|
||||
description: message,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import '../../../providers/auth_provider.dart';
|
||||
import '../../components/glass_panel.dart';
|
||||
import '../../components/neon_glow.dart';
|
||||
import '../../components/material_input.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
import '../main/main_page.dart';
|
||||
|
||||
/// 註冊頁面(兩步註冊:賬號信息 + 身份證上傳)
|
||||
@@ -590,34 +591,18 @@ class _RegisterPageState extends State<RegisterPage> {
|
||||
MaterialPageRoute(builder: (_) => const MainPage()),
|
||||
);
|
||||
} else {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('註冊失敗'),
|
||||
content: Text(response.message ?? '請稍後重試'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '註冊失敗',
|
||||
description: response.message ?? '請稍後重試',
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('註冊失敗'),
|
||||
content: Text(e.toString()),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '註冊失敗',
|
||||
description: e.toString(),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import '../kyc_page.dart';
|
||||
import '../welfare_center_page.dart';
|
||||
import '../../../shared/modern_dialog.dart';
|
||||
import 'menu_group_container.dart';
|
||||
import 'menu_row.dart';
|
||||
import 'menu_trailing_widgets.dart';
|
||||
@@ -74,17 +75,10 @@ class MenuGroup1 extends StatelessWidget {
|
||||
}
|
||||
|
||||
void _showKycStatusDialog(BuildContext context) {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('實名認證'),
|
||||
content: const Text('您的實名認證已通過'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '實名認證',
|
||||
description: '您的實名認證已通過',
|
||||
buttonText: '確定',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import '../../../core/theme/app_theme.dart';
|
||||
import '../../../providers/auth_provider.dart';
|
||||
import '../../components/glass_panel.dart';
|
||||
import '../../components/neon_glow.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
|
||||
/// KYC 實名認證頁面
|
||||
class KycPage extends StatefulWidget {
|
||||
@@ -431,61 +432,41 @@ class _KycPageState extends State<KycPage> {
|
||||
if (!mounted) return;
|
||||
|
||||
if (response.success) {
|
||||
showDialog(
|
||||
ModernDialog.show(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: Row(
|
||||
children: [
|
||||
NeonIcon(
|
||||
icon: Icons.check_circle,
|
||||
color: AppColorScheme.up,
|
||||
size: 20,
|
||||
),
|
||||
SizedBox(width: AppSpacing.sm),
|
||||
const Text('認證成功'),
|
||||
],
|
||||
),
|
||||
content: const Text('您的實名認證已通過,現在可以進行提現操作'),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('確定'),
|
||||
onPressed: () {
|
||||
Navigator.of(ctx).pop();
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
titleWidget: Row(
|
||||
children: [
|
||||
NeonIcon(
|
||||
icon: Icons.check_circle,
|
||||
color: AppColorScheme.up,
|
||||
size: 20,
|
||||
),
|
||||
SizedBox(width: AppSpacing.sm),
|
||||
const Text('認證成功'),
|
||||
],
|
||||
),
|
||||
description: '您的實名認證已通過,現在可以進行提現操作',
|
||||
actions: [
|
||||
ModernDialogAction(
|
||||
label: '確定',
|
||||
isPrimary: true,
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('認證失敗'),
|
||||
content: Text(response.message ?? '請稍後重試'),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('確定'),
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '認證失敗',
|
||||
description: response.message ?? '請稍後重試',
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('認證失敗'),
|
||||
content: Text(e.toString()),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('確定'),
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '認證失敗',
|
||||
description: e.toString(),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
|
||||
import '../../../core/theme/app_theme.dart';
|
||||
import '../../../core/theme/app_spacing.dart';
|
||||
import '../../../providers/auth_provider.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
import '../auth/login_page.dart';
|
||||
import 'components/avatar_circle.dart';
|
||||
import 'components/logout_button.dart';
|
||||
@@ -61,80 +62,60 @@ class _MinePageState extends State<MinePage>
|
||||
}
|
||||
|
||||
void _showComingSoon(String feature) {
|
||||
showDialog(
|
||||
ModernDialog.info(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('功能開發中'),
|
||||
content: Text('$feature功能正在開發中,敬請期待'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: const Text('知道了'),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '功能開發中',
|
||||
description: '$feature功能正在開發中,敬請期待',
|
||||
);
|
||||
}
|
||||
|
||||
void _showAboutDialog() {
|
||||
showDialog(
|
||||
ModernDialog.show(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: Row(
|
||||
children: [
|
||||
AvatarCircle(radius: 16, fontSize: 12),
|
||||
const SizedBox(width: 8),
|
||||
const Text('模擬所'),
|
||||
],
|
||||
),
|
||||
content: const Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('虛擬貨幣模擬交易平臺'),
|
||||
SizedBox(height: 8),
|
||||
Text('版本: 1.0.0'),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: const Text('確定'),
|
||||
),
|
||||
titleWidget: Row(
|
||||
children: [
|
||||
AvatarCircle(radius: 16, fontSize: 12),
|
||||
const SizedBox(width: 8),
|
||||
const Text('模擬所'),
|
||||
],
|
||||
),
|
||||
content: const Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('虛擬貨幣模擬交易平臺'),
|
||||
SizedBox(height: 8),
|
||||
Text('版本: 1.0.0'),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
ModernDialogAction(label: '確定', isPrimary: true),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
void _handleLogout(AuthProvider auth) {
|
||||
final colorScheme = Theme.of(context).colorScheme;
|
||||
showDialog(
|
||||
ModernDialog.show(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: const Text('退出登錄'),
|
||||
content: const Text('確定要退出登錄嗎?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
child: Text('取消',
|
||||
style: TextStyle(color: colorScheme.onSurfaceVariant)),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.of(ctx).pop();
|
||||
await auth.logout();
|
||||
if (ctx.mounted) {
|
||||
Navigator.of(ctx).pushAndRemoveUntil(
|
||||
MaterialPageRoute(builder: (_) => const LoginPage()),
|
||||
(route) => false,
|
||||
);
|
||||
}
|
||||
},
|
||||
child: Text('退出', style: TextStyle(color: colorScheme.error)),
|
||||
|
||||
),
|
||||
],
|
||||
),
|
||||
title: '退出登錄',
|
||||
description: '確定要退出登錄嗎?',
|
||||
actions: [
|
||||
ModernDialogAction(label: '取消'),
|
||||
ModernDialogAction(
|
||||
label: '退出',
|
||||
isPrimary: true,
|
||||
isDestructive: true,
|
||||
onPressed: () async {
|
||||
await auth.logout();
|
||||
if (context.mounted) {
|
||||
Navigator.of(context).pushAndRemoveUntil(
|
||||
MaterialPageRoute(builder: (_) => const LoginPage()),
|
||||
(route) => false,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import '../../../core/utils/toast_utils.dart';
|
||||
import '../../../core/event/app_event_bus.dart';
|
||||
import '../../../providers/asset_provider.dart';
|
||||
import '../../../data/models/order_models.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
|
||||
/// 充提訂單頁面
|
||||
class FundOrdersPage extends StatefulWidget {
|
||||
@@ -502,28 +503,19 @@ class _FundOrdersPageState extends State<FundOrdersPage> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool?> showShadConfirmDialog({
|
||||
Future<bool> showShadConfirmDialog({
|
||||
required BuildContext context,
|
||||
required String title,
|
||||
required String description,
|
||||
bool destructive = false,
|
||||
}) {
|
||||
return showDialog<bool>(
|
||||
return ModernDialog.confirm(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(title),
|
||||
content: Text(description),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('取消'),
|
||||
onPressed: () => Navigator.pop(context, false),
|
||||
),
|
||||
TextButton(
|
||||
child: Text(destructive ? '確定取消' : '確認'),
|
||||
onPressed: () => Navigator.pop(context, true),
|
||||
),
|
||||
],
|
||||
),
|
||||
title: title,
|
||||
description: description,
|
||||
confirmText: destructive ? '確定取消' : '確認',
|
||||
cancelText: '取消',
|
||||
isDestructive: destructive,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import '../../../../core/theme/app_spacing.dart';
|
||||
import '../../../../core/theme/app_theme.dart';
|
||||
import '../../../../core/theme/app_theme_extension.dart';
|
||||
import '../../../components/glass_panel.dart';
|
||||
import '../../../components/neon_glow.dart';
|
||||
|
||||
/// 交易確認對話框
|
||||
///
|
||||
@@ -27,15 +25,19 @@ class ConfirmDialog extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final actionColor = isBuy
|
||||
? context.appColors.up
|
||||
: context.appColors.down;
|
||||
|
||||
return Dialog(
|
||||
backgroundColor: Colors.transparent,
|
||||
child: GlassPanel(
|
||||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||||
padding: EdgeInsets.all(AppSpacing.lg),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(AppRadius.xl),
|
||||
),
|
||||
backgroundColor: theme.colorScheme.surfaceContainer,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(AppSpacing.lg),
|
||||
constraints: const BoxConstraints(maxWidth: 400),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -59,22 +61,23 @@ class ConfirmDialog extends StatelessWidget {
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '取消',
|
||||
type: NeonButtonType.outline,
|
||||
child: TextButton(
|
||||
onPressed: () => Navigator.of(context).pop(false),
|
||||
height: 44,
|
||||
showGlow: false,
|
||||
style: TextButton.styleFrom(
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: const Text('取消'),
|
||||
),
|
||||
),
|
||||
SizedBox(width: AppSpacing.sm),
|
||||
Expanded(
|
||||
child: NeonButton(
|
||||
text: '確認${isBuy ? '買入' : '賣出'}',
|
||||
type: isBuy ? NeonButtonType.tertiary : NeonButtonType.error,
|
||||
child: FilledButton(
|
||||
onPressed: () => Navigator.of(context).pop(true),
|
||||
height: 44,
|
||||
showGlow: true,
|
||||
style: FilledButton.styleFrom(
|
||||
backgroundColor: actionColor,
|
||||
minimumSize: const Size.fromHeight(44),
|
||||
),
|
||||
child: Text('確認${isBuy ? '買入' : '賣出'}'),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../../../core/theme/app_spacing.dart';
|
||||
import '../../../core/theme/app_theme_extension.dart';
|
||||
@@ -9,6 +8,7 @@ import '../../../providers/market_provider.dart';
|
||||
import '../../../providers/asset_provider.dart';
|
||||
import '../../../data/services/trade_service.dart';
|
||||
import '../../components/neon_glow.dart';
|
||||
import '../../shared/modern_dialog.dart';
|
||||
import 'components/coin_selector.dart';
|
||||
import 'components/price_card.dart';
|
||||
import 'components/placeholder_card.dart';
|
||||
@@ -283,30 +283,26 @@ class _TradePageState extends State<TradePage>
|
||||
}
|
||||
|
||||
void _showResultDialog(bool success, String title, String message) {
|
||||
showDialog(
|
||||
final colorScheme = Theme.of(context).colorScheme;
|
||||
ModernDialog.show(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
title: Row(
|
||||
children: [
|
||||
NeonIcon(
|
||||
icon: success ? Icons.check_circle : Icons.error,
|
||||
color: success
|
||||
? ctx.appColors.up
|
||||
: Theme.of(ctx).colorScheme.error,
|
||||
size: 24,
|
||||
),
|
||||
SizedBox(width: AppSpacing.sm),
|
||||
Text(title),
|
||||
],
|
||||
),
|
||||
content: Text(message),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('確定'),
|
||||
onPressed: () => Navigator.of(ctx).pop(),
|
||||
titleWidget: Row(
|
||||
children: [
|
||||
NeonIcon(
|
||||
icon: success ? Icons.check_circle : Icons.error,
|
||||
color: success
|
||||
? context.appColors.up
|
||||
: colorScheme.error,
|
||||
size: 24,
|
||||
),
|
||||
SizedBox(width: AppSpacing.sm),
|
||||
Text(title),
|
||||
],
|
||||
),
|
||||
description: message,
|
||||
actions: [
|
||||
ModernDialogAction(label: '確定', isPrimary: true),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,8 +169,8 @@ class ModernDialog extends StatelessWidget {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
if (action.isPrimary) {
|
||||
return ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
return FilledButton(
|
||||
style: FilledButton.styleFrom(
|
||||
backgroundColor: action.isDestructive ? theme.colorScheme.error : theme.colorScheme.primary,
|
||||
),
|
||||
onPressed: () {
|
||||
@@ -181,7 +181,7 @@ class ModernDialog extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
return OutlinedButton(
|
||||
return TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(action.returnValue);
|
||||
action.onPressed?.call();
|
||||
|
||||