Reason Pun

增加了口音选择弹出菜单

[
{
"id": 1,
"bankName": "民生银行",
"firstLetter": "M"
},
{
"id": 2,
"bankName": "工商银行",
"firstLetter": "G"
},
{
"id": 3,
"bankName": "农业银行",
"firstLetter": "N"
},
{
"id": 4,
"bankName": "中国银行",
"firstLetter": "Z"
},
{
"id": 5,
"bankName": "建设银行",
"firstLetter": "J"
},
{
"id": 6,
"bankName": "交通银行",
"firstLetter": "J"
},
{
"id": 7,
"bankName": "中信银行",
"firstLetter": "Z"
},
{
"id": 8,
"bankName": "招商银行",
"firstLetter": "Z"
},
{
"id": 9,
"bankName": "兴业银行",
"firstLetter": "X"
},
{
"id": 10,
"bankName": "浦发银行",
"firstLetter": "P"
},
{
"id": 16,
"bankName": "光大银行",
"firstLetter": "G"
},
{
"id": 17,
"bankName": "华夏银行",
"firstLetter": "H"
},
{
"id": 18,
"bankName": "广发银行",
"firstLetter": "G"
},
{
"id": 19,
"bankName": "平安银行",
"firstLetter": "P"
},
{
"id": 20,
"bankName": "北京银行",
"firstLetter": "B"
},
{
"id": 43,
"bankName": "上海银行",
"firstLetter": "S"
},
{
"id": 44,
"bankName": "南京银行",
"firstLetter": "N"
},
{
"id": 48,
"bankName": "杭州银行",
"firstLetter": "H"
},
{
"id": 49,
"bankName": "宁波银行",
"firstLetter": "N"
},
{
"id": 54,
"bankName": "浙江稠州商业银行",
"firstLetter": "Z"
},
{
"id": 83,
"bankName": "汉口银行",
"firstLetter": "H"
},
{
"id": 84,
"bankName": "长沙银行",
"firstLetter": "C"
},
{
"id": 116,
"bankName": "浙商银行",
"firstLetter": "Z"
},
{
"id": 118,
"bankName": "渤海银行",
"firstLetter": "B"
},
{
"id": 127,
"bankName": "上海农商银行",
"firstLetter": "S"
},
{
"id": 128,
"bankName": "北京农商行",
"firstLetter": "B"
},
{
"id": 143,
"bankName": "中国邮储银行",
"firstLetter": "Y"
}
]
\ No newline at end of file
[
{
"id": 13035,
"bankName": "西安市城南支行",
"firstLetter": "X"
},
{
"id": 13036,
"bankName": "西安经济技术开发区支行",
"firstLetter": "X"
},
{
"id": 13037,
"bankName": "西安市东新街支行",
"firstLetter": "X"
},
{
"id": 13038,
"bankName": "西安南大街支行",
"firstLetter": "X"
},
{
"id": 13039,
"bankName": "西安市解放路支行",
"firstLetter": "X"
},
{
"id": 13040,
"bankName": "西安市太华路支行",
"firstLetter": "X"
},
{
"id": 13041,
"bankName": "西安民乐园支行",
"firstLetter": "X"
},
{
"id": 13042,
"bankName": "西安市东大街支行",
"firstLetter": "X"
},
{
"id": 13043,
"bankName": "西安南院门支行",
"firstLetter": "X"
},
{
"id": 13044,
"bankName": "西安东关支行",
"firstLetter": "X"
},
{
"id": 13045,
"bankName": "西安和平路支行",
"firstLetter": "X"
},
{
"id": 13046,
"bankName": "西安互助路支行",
"firstLetter": "X"
},
{
"id": 13047,
"bankName": "西安市北大街支行",
"firstLetter": "X"
},
{
"id": 13048,
"bankName": "西安西大街支行",
"firstLetter": "X"
},
{
"id": 13049,
"bankName": "西安星火路支行",
"firstLetter": "X"
},
{
"id": 13050,
"bankName": "西安市南关支行",
"firstLetter": "X"
},
{
"id": 13051,
"bankName": "西安小寨支行",
"firstLetter": "X"
},
{
"id": 13052,
"bankName": "西安雁塔路支行",
"firstLetter": "X"
},
{
"id": 13053,
"bankName": "西安含光路支行",
"firstLetter": "X"
},
{
"id": 13054,
"bankName": "西安铁路局支行",
"firstLetter": "X"
},
{
"id": 13055,
"bankName": "西安电子工业区支行",
"firstLetter": "X"
},
{
"id": 13056,
"bankName": "西安大雁塔支行",
"firstLetter": "X"
},
{
"id": 13057,
"bankName": "西安市土门支行",
"firstLetter": "X"
},
{
"id": 13058,
"bankName": "西安市纺织城支行",
"firstLetter": "X"
},
{
"id": 13059,
"bankName": "西安市韩森寨支行",
"firstLetter": "X"
},
{
"id": 13060,
"bankName": "西安咸宁路支行",
"firstLetter": "X"
},
{
"id": 13061,
"bankName": "西安市韩森寨支行万寿路分理处",
"firstLetter": "X"
},
{
"id": 13062,
"bankName": "西安市阎良区支行",
"firstLetter": "X"
},
{
"id": 13063,
"bankName": "西安市周至县支行",
"firstLetter": "X"
},
{
"id": 13064,
"bankName": "西安市户县支行",
"firstLetter": "X"
},
{
"id": 13065,
"bankName": "西安市临潼区支行",
"firstLetter": "X"
},
{
"id": 13066,
"bankName": "西安市高新技术开发区支行",
"firstLetter": "X"
},
{
"id": 13067,
"bankName": "西安劳动南路支行",
"firstLetter": "X"
},
{
"id": 13068,
"bankName": "西安市未央支行",
"firstLetter": "X"
},
{
"id": 13069,
"bankName": "西安徐家湾支行",
"firstLetter": "X"
},
{
"id": 17731,
"bankName": "西安莲湖路支行",
"firstLetter": "X"
},
{
"id": 17747,
"bankName": "陕西省西安凤城八路分理处",
"firstLetter": "S"
},
{
"id": 17748,
"bankName": "西安长乐中路支行",
"firstLetter": "X"
},
{
"id": 17749,
"bankNumber": "102791013020",
"bankName": "陕西省西安咸宁中路支行",
"firstLetter": "S"
},
{
"id": 17750,
"bankName": "西安万寿南路分理处",
"firstLetter": "X"
},
{
"id": 17759,
"bankName": "陕西省西安紫薇田园都市分理处",
"firstLetter": "S"
}
]
\ No newline at end of file
This diff is collapsed. Click to expand it.
[
{
"id": "1",
"name": "超市便利"
},
{
"id": "2",
"name": "生鲜果蔬"
},
{
"id": "3",
"name": "零食小吃"
},
{
"id": "4",
"name": "美食餐饮"
},
{
"id": "5",
"name": "鲜花烘培"
},
{
"id": "6",
"name": "生活服务"
},
{
"id": "7",
"name": "其他"
},
{
"id": "8",
"name": "综合"
},
{
"id": "10",
"name": "美容个护"
},
{
"id": "11",
"name": "家居生活"
},
{
"id": "12",
"name": "服饰箱包"
},
{
"id": "13",
"name": "母婴玩具"
},
{
"id": "15",
"name": "海淘进口"
},
{
"id": "755",
"name": "快递代收"
},
{
"id": "756",
"name": "食品保健"
},
{
"id": "764",
"name": "家居生活"
},
{
"id": "769",
"name": "米面杂粮"
},
{
"id": "786",
"name": "水果生鲜"
},
{
"id": "807",
"name": "社区健身"
},
{
"id": "811",
"name": "艺术礼品"
},
{
"id": "814",
"name": "今日特卖"
},
{
"id": "816",
"name": "周边旅游"
},
{
"id": "820",
"name": "家装建材"
},
{
"id": "823",
"name": "虚拟商品"
},
{
"id": "14057",
"name": "生活用品"
},
{
"id": "14181",
"name": "手机数码"
}
]
\ No newline at end of file
[
{
"id": "15677",
"name": "厨房用具"
},
{
"id": "15690",
"name": "精美餐具"
},
{
"id": "15698",
"name": "家纺"
},
{
"id": "15717",
"name": "家具"
},
{
"id": "15740",
"name": "灯具"
},
{
"id": "15755",
"name": "生活日用"
},
{
"id": "15765",
"name": "宠物用品"
},
{
"id": "15773",
"name": "家装建材"
},
{
"id": "15795",
"name": "赠品"
},
{
"id": "15797",
"name": "家装软饰"
},
{
"id": "15814",
"name": "收纳用品"
},
{
"id": "26541",
"name": "演出票务"
},
{
"id": "26551",
"name": "健康体检"
},
{
"id": "26554",
"name": "教育培训"
},
{
"id": "26561",
"name": "汽车保养"
},
{
"id": "26563",
"name": "影视会员"
},
{
"id": "26565",
"name": "摄影、摄像"
}
]
\ No newline at end of file
[
{
"id": "15691",
"name": "酒具/杯具"
},
{
"id": "15692",
"name": "水具"
},
{
"id": "15693",
"name": "筷勺/刀叉"
},
{
"id": "15694",
"name": "碗碟"
},
{
"id": "15695",
"name": "组合套装"
},
{
"id": "15696",
"name": "美食工具"
},
{
"id": "15697",
"name": "茶具/咖啡具"
}
]
\ No newline at end of file
[
{
"id": "1",
"name": "普通话"
},
{
"id": "2",
"name": "四川话"
},
{
"id": "3",
"name": "山东话"
},
{
"id": "4",
"name": "闽南话"
},
{
"id": "5",
"name": "东北话"
}
]
\ No newline at end of file
......@@ -4,8 +4,15 @@
// This file is automatically generated. DO NOT EDIT, all your changes would be lost.
import 'package:one_poem/account/models/user_entity.dart';
import 'package:one_poem/generated/json/user_entity.g.dart';
import 'package:one_poem/category/models/category_item_entity.dart';
import 'package:one_poem/generated/json/category_item_entity.g.dart';
import 'package:one_poem/poem/models/lang_sort_entity.dart';
import 'package:one_poem/generated/json/lang_sort_entity.g.dart';
import 'package:one_poem/poem/models/search_entity.dart';
import 'package:one_poem/generated/json/search_entity.g.dart';
import 'package:one_poem/timeline/models/friend_entity.dart';
import 'package:one_poem/generated/json/friend_entity.g.dart';
JsonConvert jsonConvert = JsonConvert();
......@@ -82,6 +89,21 @@ class JsonConvert {
if(type == (CategoryItemEntity).toString()){
return CategoryItemEntity.fromJson(json) as M;
}
if(type == (LangSortEntity).toString()){
return LangSortEntity.fromJson(json) as M;
}
if(type == (SearchEntity).toString()){
return SearchEntity.fromJson(json) as M;
}
if(type == (SearchItems).toString()){
return SearchItems.fromJson(json) as M;
}
if(type == (SearchItemsOwner).toString()){
return SearchItemsOwner.fromJson(json) as M;
}
if(type == (SearchItemsLicense).toString()){
return SearchItemsLicense.fromJson(json) as M;
}
if(type == (FriendEntity).toString()){
return FriendEntity.fromJson(json) as M;
}
......@@ -102,6 +124,21 @@ class JsonConvert {
if(<CategoryItemEntity>[] is M){
return data.map<CategoryItemEntity>((Map<String, dynamic> e) => CategoryItemEntity.fromJson(e)).toList() as M;
}
if(<LangSortEntity>[] is M){
return data.map<LangSortEntity>((Map<String, dynamic> e) => LangSortEntity.fromJson(e)).toList() as M;
}
if(<SearchEntity>[] is M){
return data.map<SearchEntity>((Map<String, dynamic> e) => SearchEntity.fromJson(e)).toList() as M;
}
if(<SearchItems>[] is M){
return data.map<SearchItems>((Map<String, dynamic> e) => SearchItems.fromJson(e)).toList() as M;
}
if(<SearchItemsOwner>[] is M){
return data.map<SearchItemsOwner>((Map<String, dynamic> e) => SearchItemsOwner.fromJson(e)).toList() as M;
}
if(<SearchItemsLicense>[] is M){
return data.map<SearchItemsLicense>((Map<String, dynamic> e) => SearchItemsLicense.fromJson(e)).toList() as M;
}
if(<FriendEntity>[] is M){
return data.map<FriendEntity>((Map<String, dynamic> e) => FriendEntity.fromJson(e)).toList() as M;
}
......
import 'package:one_poem/generated/json/base/json_convert_content.dart';
import 'package:one_poem/poem/models/lang_sort_entity.dart';
LangSortEntity $LangSortEntityFromJson(Map<String, dynamic> json) {
final LangSortEntity langSortEntity = LangSortEntity();
final String? id = jsonConvert.convert<String>(json['id']);
if (id != null) {
langSortEntity.id = id;
}
final String? name = jsonConvert.convert<String>(json['name']);
if (name != null) {
langSortEntity.name = name;
}
return langSortEntity;
}
Map<String, dynamic> $LangSortEntityToJson(LangSortEntity entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = entity.id;
data['name'] = entity.name;
return data;
}
\ No newline at end of file
......@@ -7,13 +7,11 @@ SearchEntity $SearchEntityFromJson(Map<String, dynamic> json) {
if (totalCount != null) {
searchEntity.totalCount = totalCount;
}
final bool? incompleteResults =
jsonConvert.convert<bool>(json['incomplete_results']);
final bool? incompleteResults = jsonConvert.convert<bool>(json['incomplete_results']);
if (incompleteResults != null) {
searchEntity.incompleteResults = incompleteResults;
}
final List<SearchItems>? items =
jsonConvert.convertListNotNull<SearchItems>(json['items']);
final List<SearchItems>? items = jsonConvert.convertListNotNull<SearchItems>(json['items']);
if (items != null) {
searchEntity.items = items;
}
......@@ -50,8 +48,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (private != null) {
searchItems.private = private;
}
final SearchItemsOwner? owner =
jsonConvert.convert<SearchItemsOwner>(json['owner']);
final SearchItemsOwner? owner = jsonConvert.convert<SearchItemsOwner>(json['owner']);
if (owner != null) {
searchItems.owner = owner;
}
......@@ -79,8 +76,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (keysUrl != null) {
searchItems.keysUrl = keysUrl;
}
final String? collaboratorsUrl =
jsonConvert.convert<String>(json['collaborators_url']);
final String? collaboratorsUrl = jsonConvert.convert<String>(json['collaborators_url']);
if (collaboratorsUrl != null) {
searchItems.collaboratorsUrl = collaboratorsUrl;
}
......@@ -92,8 +88,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (hooksUrl != null) {
searchItems.hooksUrl = hooksUrl;
}
final String? issueEventsUrl =
jsonConvert.convert<String>(json['issue_events_url']);
final String? issueEventsUrl = jsonConvert.convert<String>(json['issue_events_url']);
if (issueEventsUrl != null) {
searchItems.issueEventsUrl = issueEventsUrl;
}
......@@ -101,8 +96,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (eventsUrl != null) {
searchItems.eventsUrl = eventsUrl;
}
final String? assigneesUrl =
jsonConvert.convert<String>(json['assignees_url']);
final String? assigneesUrl = jsonConvert.convert<String>(json['assignees_url']);
if (assigneesUrl != null) {
searchItems.assigneesUrl = assigneesUrl;
}
......@@ -134,28 +128,23 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (statusesUrl != null) {
searchItems.statusesUrl = statusesUrl;
}
final String? languagesUrl =
jsonConvert.convert<String>(json['languages_url']);
final String? languagesUrl = jsonConvert.convert<String>(json['languages_url']);
if (languagesUrl != null) {
searchItems.languagesUrl = languagesUrl;
}
final String? stargazersUrl =
jsonConvert.convert<String>(json['stargazers_url']);
final String? stargazersUrl = jsonConvert.convert<String>(json['stargazers_url']);
if (stargazersUrl != null) {
searchItems.stargazersUrl = stargazersUrl;
}
final String? contributorsUrl =
jsonConvert.convert<String>(json['contributors_url']);
final String? contributorsUrl = jsonConvert.convert<String>(json['contributors_url']);
if (contributorsUrl != null) {
searchItems.contributorsUrl = contributorsUrl;
}
final String? subscribersUrl =
jsonConvert.convert<String>(json['subscribers_url']);
final String? subscribersUrl = jsonConvert.convert<String>(json['subscribers_url']);
if (subscribersUrl != null) {
searchItems.subscribersUrl = subscribersUrl;
}
final String? subscriptionUrl =
jsonConvert.convert<String>(json['subscription_url']);
final String? subscriptionUrl = jsonConvert.convert<String>(json['subscription_url']);
if (subscriptionUrl != null) {
searchItems.subscriptionUrl = subscriptionUrl;
}
......@@ -163,8 +152,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (commitsUrl != null) {
searchItems.commitsUrl = commitsUrl;
}
final String? gitCommitsUrl =
jsonConvert.convert<String>(json['git_commits_url']);
final String? gitCommitsUrl = jsonConvert.convert<String>(json['git_commits_url']);
if (gitCommitsUrl != null) {
searchItems.gitCommitsUrl = gitCommitsUrl;
}
......@@ -172,8 +160,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (commentsUrl != null) {
searchItems.commentsUrl = commentsUrl;
}
final String? issueCommentUrl =
jsonConvert.convert<String>(json['issue_comment_url']);
final String? issueCommentUrl = jsonConvert.convert<String>(json['issue_comment_url']);
if (issueCommentUrl != null) {
searchItems.issueCommentUrl = issueCommentUrl;
}
......@@ -193,8 +180,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (archiveUrl != null) {
searchItems.archiveUrl = archiveUrl;
}
final String? downloadsUrl =
jsonConvert.convert<String>(json['downloads_url']);
final String? downloadsUrl = jsonConvert.convert<String>(json['downloads_url']);
if (downloadsUrl != null) {
searchItems.downloadsUrl = downloadsUrl;
}
......@@ -206,13 +192,11 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (pullsUrl != null) {
searchItems.pullsUrl = pullsUrl;
}
final String? milestonesUrl =
jsonConvert.convert<String>(json['milestones_url']);
final String? milestonesUrl = jsonConvert.convert<String>(json['milestones_url']);
if (milestonesUrl != null) {
searchItems.milestonesUrl = milestonesUrl;
}
final String? notificationsUrl =
jsonConvert.convert<String>(json['notifications_url']);
final String? notificationsUrl = jsonConvert.convert<String>(json['notifications_url']);
if (notificationsUrl != null) {
searchItems.notificationsUrl = notificationsUrl;
}
......@@ -224,8 +208,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (releasesUrl != null) {
searchItems.releasesUrl = releasesUrl;
}
final String? deploymentsUrl =
jsonConvert.convert<String>(json['deployments_url']);
final String? deploymentsUrl = jsonConvert.convert<String>(json['deployments_url']);
if (deploymentsUrl != null) {
searchItems.deploymentsUrl = deploymentsUrl;
}
......@@ -265,8 +248,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (size != null) {
searchItems.size = size;
}
final int? stargazersCount =
jsonConvert.convert<int>(json['stargazers_count']);
final int? stargazersCount = jsonConvert.convert<int>(json['stargazers_count']);
if (stargazersCount != null) {
searchItems.stargazersCount = stargazersCount;
}
......@@ -310,13 +292,11 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (disabled != null) {
searchItems.disabled = disabled;
}
final int? openIssuesCount =
jsonConvert.convert<int>(json['open_issues_count']);
final int? openIssuesCount = jsonConvert.convert<int>(json['open_issues_count']);
if (openIssuesCount != null) {
searchItems.openIssuesCount = openIssuesCount;
}
final SearchItemsLicense? license =
jsonConvert.convert<SearchItemsLicense>(json['license']);
final SearchItemsLicense? license = jsonConvert.convert<SearchItemsLicense>(json['license']);
if (license != null) {
searchItems.license = license;
}
......@@ -332,8 +312,7 @@ SearchItems $SearchItemsFromJson(Map<String, dynamic> json) {
if (watchers != null) {
searchItems.watchers = watchers;
}
final String? defaultBranch =
jsonConvert.convert<String>(json['default_branch']);
final String? defaultBranch = jsonConvert.convert<String>(json['default_branch']);
if (defaultBranch != null) {
searchItems.defaultBranch = defaultBranch;
}
......@@ -452,13 +431,11 @@ SearchItemsOwner $SearchItemsOwnerFromJson(Map<String, dynamic> json) {
if (htmlUrl != null) {
searchItemsOwner.htmlUrl = htmlUrl;
}
final String? followersUrl =
jsonConvert.convert<String>(json['followers_url']);
final String? followersUrl = jsonConvert.convert<String>(json['followers_url']);
if (followersUrl != null) {
searchItemsOwner.followersUrl = followersUrl;
}
final String? followingUrl =
jsonConvert.convert<String>(json['following_url']);
final String? followingUrl = jsonConvert.convert<String>(json['following_url']);
if (followingUrl != null) {
searchItemsOwner.followingUrl = followingUrl;
}
......@@ -470,13 +447,11 @@ SearchItemsOwner $SearchItemsOwnerFromJson(Map<String, dynamic> json) {
if (starredUrl != null) {
searchItemsOwner.starredUrl = starredUrl;
}
final String? subscriptionsUrl =
jsonConvert.convert<String>(json['subscriptions_url']);
final String? subscriptionsUrl = jsonConvert.convert<String>(json['subscriptions_url']);
if (subscriptionsUrl != null) {
searchItemsOwner.subscriptionsUrl = subscriptionsUrl;
}
final String? organizationsUrl =
jsonConvert.convert<String>(json['organizations_url']);
final String? organizationsUrl = jsonConvert.convert<String>(json['organizations_url']);
if (organizationsUrl != null) {
searchItemsOwner.organizationsUrl = organizationsUrl;
}
......@@ -488,8 +463,7 @@ SearchItemsOwner $SearchItemsOwnerFromJson(Map<String, dynamic> json) {
if (eventsUrl != null) {
searchItemsOwner.eventsUrl = eventsUrl;
}
final String? receivedEventsUrl =
jsonConvert.convert<String>(json['received_events_url']);
final String? receivedEventsUrl = jsonConvert.convert<String>(json['received_events_url']);
if (receivedEventsUrl != null) {
searchItemsOwner.receivedEventsUrl = receivedEventsUrl;
}
......
import 'dart:convert';
import 'package:one_poem/generated/json/base/json_field.dart';
import 'package:one_poem/generated/json/lang_sort_entity.g.dart';
@JsonSerializable()
class LangSortEntity {
String? id;
String? name;
LangSortEntity();
factory LangSortEntity.fromJson(Map<String, dynamic> json) => $LangSortEntityFromJson(json);
Map<String, dynamic> toJson() => $LangSortEntityToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:one_poem/poem/provider/lang_sort_provider.dart';
import 'package:one_poem/poem/widgets/lang_sort_bottom_sheet.dart';
import 'package:one_poem/res/resources.dart';
import 'package:one_poem/routers/fluro_navigator.dart';
import 'package:one_poem/routers/routers.dart';
import 'package:one_poem/widgets/click_item.dart';
import 'package:one_poem/widgets/my_app_bar.dart';
import 'package:one_poem/extension/int_extension.dart';
......@@ -19,6 +22,9 @@ class PoemPublish extends StatefulWidget {
class _PoemPublishState extends State<PoemPublish> {
bool isPublishing = false;
String _langSortName = "普通话";
int _langSortId = 1;
final LangSortProvider _provider = LangSortProvider();
@override
void initState() {
......@@ -28,6 +34,7 @@ class _PoemPublishState extends State<PoemPublish> {
@override
void dispose() {
super.dispose();
_provider.dispose();
}
@override
......@@ -94,7 +101,25 @@ class _PoemPublishState extends State<PoemPublish> {
],
),
),
Container(
InkWell(
onTap: () {
showModalBottomSheet<void>(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return LangSortBottomSheet(
provider: _provider,
onSelected: (id, name) {
setState(() {
_langSortId = int.parse(id);
_langSortName = name;
});
},
);
},
);
},
child: Container(
padding: EdgeInsets.all(10.px),
alignment: Alignment.centerLeft,
width: double.infinity,
......@@ -106,18 +131,14 @@ class _PoemPublishState extends State<PoemPublish> {
size: 15.px,
),
Gaps.hGap5,
const Text(
"所用口音",
style: TextStyle(color: Colors.black45),
),
Gaps.hGap10,
const Text(
"普通话",
style: TextStyle(color: Colors.black45),
Text(
"所用口音 $_langSortName",
style: const TextStyle(color: Colors.black45),
),
],
),
),
),
const Spacer(),
Expanded(
child: Center(
......
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:one_poem/generated/json/base/json_convert_content.dart';
import 'package:one_poem/poem/models/lang_sort_entity.dart';
class LangSortProvider extends ChangeNotifier {
int _index = 0;
int get index => _index;
List<LangSortEntity> _mLangSort = [];
/// 当前列表数据
List<LangSortEntity> _mList = [];
List<LangSortEntity> get mList => _mList;
/// 三级联动选择的position
final List<int> _positions = [0];
List<int> get positions => _positions;
void setIndex(int index) {
_index = index;
notifyListeners();
}
void indexIncrement() {
_index++;
}
void setList(int index) {
switch (index) {
case 0:
_mList = _mLangSort;
break;
}
}
void initData() {
if (_mList.isNotEmpty) {
return;
}
rootBundle.loadString('assets/data/lang.json').then((String value) {
_mLangSort =
JsonConvert.fromJsonAsT<List<LangSortEntity>>(json.decode(value)) ??
[];
_mList = _mLangSort;
notifyListeners();
});
}
}
import 'package:flutter/material.dart';
import 'package:one_poem/poem/provider/lang_sort_provider.dart';
import 'package:one_poem/res/resources.dart';
import 'package:one_poem/routers/fluro_navigator.dart';
import 'package:provider/provider.dart';
import 'package:one_poem/util/screen_utils.dart';
class LangSortBottomSheet extends StatefulWidget {
const LangSortBottomSheet({
Key? key,
required this.provider,
required this.onSelected,
}) : super(key: key);
final Function(String, String) onSelected;
/// 临时状态
final LangSortProvider provider;
@override
LangSortBottomSheetState createState() => LangSortBottomSheetState();
}
class LangSortBottomSheetState extends State<LangSortBottomSheet>
with SingleTickerProviderStateMixin {
final ScrollController _controller = ScrollController();
@override
void initState() {
super.initState();
WidgetsBinding.instance!.addPostFrameCallback((_) {
widget.provider.initData();
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Material(
child: SizedBox(
height: context.height * 11.0 / 16.0,
/// 为保留状态,选择ChangeNotifierProvider.value,销毁自己手动处理(见 goods_edit_page.dart :dispose())
child: ChangeNotifierProvider<LangSortProvider>.value(
value: widget.provider,
child: Consumer<LangSortProvider>(
builder: (_, provider, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
child!,
Gaps.line,
Expanded(
child: ListView.builder(
controller: _controller,
itemExtent: 48.0,
itemBuilder: (_, index) {
return _buildItem(provider, index);
},
itemCount: provider.mList.length,
),
)
],
);
},
child: Stack(
children: <Widget>[
Container(
width: double.infinity,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: const Text(
'请选择口音',
style: TextStyles.textBold16,
),
),
Positioned(
right: 16.0,
top: 16.0,
bottom: 16.0,
child: InkWell(
onTap: () => NavigatorUtils.goBack(context),
child: const SizedBox(
height: 16.0,
width: 16.0,
child: Icon(Icons.close),
),
),
)
],
),
),
),
),
);
}
Widget _buildItem(LangSortProvider provider, int index) {
return InkWell(
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
alignment: Alignment.centerLeft,
child: Row(
children: <Widget>[
Text(
provider.mList[index].name!,
style: const TextStyle(
fontSize: Dimens.font_sp14,
color: Colors.black45,
),
),
],
),
),
onTap: () {
widget.onSelected(
provider.mList[index].id!, provider.mList[index].name!);
NavigatorUtils.goBack(context);
_controller.animateTo(
0.0,
duration: const Duration(milliseconds: 100),
curve: Curves.ease,
);
},
);
}
}