湖底海綿感染疾病 貝加爾湖水質恐遭污染

摘錄自2020年7月23日公視報導

有最美湖泊之稱的俄羅斯「貝加爾湖」,向來具有豐富的生物多樣性,有超過3600種動植物,在這裡棲息。但是,近年來湖底部分地區的海綿,卻因為感染不知名的疾病,發生變色、垂死的狀況。讓研究人員憂心已產生生態危機。

過去5年來,研究員針對貝加爾湖的海底生態進行觀察,發現感染不明疾病的海綿會喪失原有的顏色,讓貝加爾湖泊流域中靠近「利斯特維揚卡」海灣地區的湖底,海床遭到垂死的有機物質覆蓋,海綿的種類逐漸減少,數量急速的降低。

「湖沼研究所」認為,目前政府應該要採取嚴厲措施,暫時禁止遊客進入「利斯特維揚卡」海灣,防止污染加重,讓大自然有時間可以自我療癒。

生物多樣性
國際新聞
俄羅斯
貝加爾湖
海綿
水文

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

倆小孩的家,說走就走的旅程是怎麼實現的

我們都知道,帶着一個小朋友出門得帶多少瑣碎的東西,如衣服、玩具、零食、備用藥品等等。當帶着兩個孩子出門時,出行所帶的物品自是翻倍。這時,可把第三排放倒,大大的拓寬了後備廂的空間,有充裕的空間放置行李,哪怕還要放上一輛兒童自行車,也不成問題。

2016年發生了不少大事,G20峰會舉辦、軍隊改革、註冊制提上議程等等,但是真正讓廣大中國老百姓關注的只有一件事,那就是二胎政策全面放開。

計劃生育這已經實行了三十多年的基本國策,深深地影響了現在已成為社會中流砥柱的80后這一代人。

有人說80后是最牛(tong)逼(ku)的一代,80後讀小學時讀大學不要錢,80後讀大學時讀小學不要錢;80后沒工作時工作是包分配的,80后開始找工作時只能自己拼搏;80后沒到結婚年齡時騎單車就能結婚,80後到了結婚年齡時必須有車子房子才能結婚,而二胎政策放開后,80后更是需要養四個老人加上兩個孩子。

儘管有着重重的困難,但根據一份對80后555人隨機調查的數據表示,還是有92%的人都是想生二胎的。因為對於80后這代來說,實在是太了解獨生子女的難處了:商量事情,找父母不合適,找朋友不是時刻在身邊;沒有能撒嬌的哥哥姐姐,沒有能展現對弟弟妹妹關懷的機會;和家人出外更加是沒有同齡人相伴玩耍,只能跟着爸媽,少了很多童年應該有的歡樂。

所以即使是現在奶粉、尿片要找海淘,去一次醫院檢查要排上大半天的隊,從幼兒園開始就要擔憂戶口所在地、有沒有學位房,每周安排滿滿的補習班、興趣班……這些繁重的壓力,他們還是想生二胎,為的就是能給下一代一個更好的生長環境。

當然,除去壓力之外,80后也很注重人與人之間的互動。他們會經常與朋友相聚、運動,也會時常和家人外出遊玩,讓孩子有更廣闊的視野和活動空間。因為他們都是不愛受拘束的人,所以他們的出行首選就是自駕游。這樣對於這一代的二胎家庭來說,家庭用車的選擇就至關重要了。安全舒適是必須要保證的,然後上有老下有小,足夠的座位也是不可或缺的。

小編覺得選擇一台7座SUV車型就是最合適的,因為一家四口,加上兩位老人家,這是他們最基本的用車需求。7座SUV不僅能夠滿足一個大家庭對於座位空間以及舒適性的需求,而帥氣的外觀以及不錯的通過性又能夠賦予它一些越野能力,比MpV更顯個性。7座SUV不僅可以滿足一家人日常使用以及車主的個性需求,還能帶你走更遠的路,去想去的地方。

當然這台7座SUV除了有寬敞的空間、優秀的舒適性以及可靠性外,安全性也必須是佼佼者,在小編看來廣汽豐田漢蘭達就是這樣的一款車。為什麼呢?

大空間

毫無爭議的同級第一

大空間是這個級別SUV的生存之本,漢蘭達作為這個級別SUV的開創者,在空間表現上自然不會讓人失望。漢蘭達的車身尺寸為4855*1925*1720mm,軸距為2790mm,這已經是一台全尺寸SUV的尺寸表現了。大尺寸帶來最大的好處就是大空間,漢蘭達的第二排腿部空間最大能夠達到1270mm,而同級的福特銳界僅為800mm,即使是售價百萬的加長奔馳S級,也僅僅為930mm而已。

而且相較於MpV而言,擁有大7座空間的漢蘭達更是宜商宜家。三排座位足夠7人乘坐,5人乘坐時折起第三排可是小貨車級別超大後備廂。座椅完全可依據乘坐的人數與放置的行李數量靈活地調整,二、三排座位可以根據不同需要拆分放倒調節,想坐哪裡就坐哪裡,想裝啥就裝啥,更加便捷實用。

我們都知道,帶着一個小朋友出門得帶多少瑣碎的東西,如衣服、玩具、零食、備用藥品等等。當帶着兩個孩子出門時,出行所帶的物品自是翻倍。這時,可把第三排放倒,大大的拓寬了後備廂的空間,有充裕的空間放置行李,哪怕還要放上一輛兒童自行車,也不成問題。

同時,漢蘭達在第二排處設計了兩個兒童安全座椅接口。而足夠寬敞的第二排,即使裝了兩個安全座椅,仍有比較充裕的空間,方便家長照顧孩子。當然,現在二胎家庭的孩子年齡會有一定差距,很多時候只需要安裝一張安全座椅,乘坐的空間更顯充裕。

安全性

北美同級SUV中唯一“頂級安全+”評價

對於家庭用戶來說,汽車的安全性是很重要的一個指標,畢竟一台家用7座SUV上往往滿載着三代人,漢蘭達在安全性上的表現怎樣呢?漢蘭達在我國的C-NACp測試中獲得5星評價,其中難度較高的側面碰撞和鞭打測試漢蘭達均獲得滿分。

這當然不是巧合,漢蘭達的工程師在設計研發階段便十分下功夫,漢蘭達獨有的GOA車身大家都不陌生,GOA車身的核心便是超高剛性的車身與有效的吸能設計。要知道發生強烈碰撞時,乘坐艙不變形以及發動機艙的緩衝吸能才是保證生命安全的關鍵。其它諸如VSC車身穩定系統,ACC自適應巡航、pCS預碰撞剎車輔助系統、RCTA倒車警示系統、BSM行車變道警示系統等諸多主動安全配置也能夠為安全行駛保駕護航。

低油耗

車主油耗9.0L/100km左右

對於漢蘭達這個級別尺寸的大7座SUV來說,除了輕易超過1.8噸的重量之外,往往都搭載了2.0T的發動機,大多數車型百公里油耗也是輕鬆飆上13升以上。這對於上有老下有小的顧家好男人來說,真的是錢包難受有木有?而豐田車省油大家都是比較熟悉的,那麼漢蘭達的油耗是什麼水平呢?

漢蘭達2.0T四驅車型的工信部油耗為8.7L/100km,車主反映實際使用油耗為9.0L/100km左右,而同級的銳界2.0T四驅車型的工信部油耗就已高達10L/100km,大家都知道渦輪增壓車型實際油耗要比工信部油耗高不少,那麼實際油耗想都不敢想了。畢竟兩個孩子耗費的奶粉、紙尿片等等的消耗品花銷真不小,要是油費省下來的就可以更多的花費在小孩子身上了!

大空間能保證一家人出行的便利和舒適,出眾的安全性能夠為家人的安全保駕護航,低油耗意味着低使用成本。在小編看來只有具備了這三個優勢的SUV才能成為一部合格的大7座家用SUV車型,真正走進千家萬戶。

漢蘭達自從推出伊始便受到熱捧,不僅僅是因為多年耕耘下來的口碑使然,更是強大產品實力的印證,漢蘭達的出現為中國的二胎家庭提出了一個完美的出行解決方案,實實在在的大7座空間與感動世界的可靠品質,最高評價的安全性與優異的油耗表現都是中國消費者最需要的,20-30萬左右許許多多的7座SUV可以選擇,而小編推薦的只有漢蘭達這一款。

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

車輪上的家 上汽大通發布全新房車RV80

98萬的價格。而且RV80型譜包含B型和C型房車,擁有短軸/長軸/加長軸,低頂/中頂/高頂多種車身形式,用戶可通過C2B線上交互平台,可直接在線訂製房車,OTD高效透明,消費者可參与試駕、試住等全體驗式互動,享受真正的價值和樂趣。

買一輛房車,開到郊外,給自己一個遠離城市堵車和污染的樂土,傍晚一邊欣賞湖邊那一抹落日一邊和家人烹制一頓可口的晚餐;晚上透過大大的天窗看沒有污染的星空;亦或把車停在海邊,換上泳衣下海衝浪,回來后在寬敞的洗澡間沖個熱水澡這份嚮往其實不僅僅是一輛車,而是一種生活方式更是一種房車生活的文化,這才是一種說走就走的旅行,因為不用規劃路線,不用訂酒店,風景在那,走到那,家在路上。

近日,一場融新款房車上市發布、房車露營大會、草地音樂狂歡節、美酒佳肴於一體的“全體驗式”上市發布會登陸海南博鰲,由“中國房車第一品牌”上汽大通打造的2016“新旅程·心享受”房車之夜暨房車新品上市發布會亮相南海之濱,全新房車RV80在萬眾期待中揭開神秘面紗。

當晚,配合現場炫目的燈光秀,國內首款滿足國五排放標準的高端房車——上汽大通全新房車RV80正式發布。

新款房車憑藉六大產品優勢,定義房車行業新標杆,其搭載源自歐洲的VM柴油發動機,最高功率110KW,綜合油耗百公里僅為8.3L;全系國5排放標準;在國內房車行業中率先使用AMT技術;而且全車座椅是達乘用級安全標準。

消費者最為關心的價格也在上市會上正式揭曉,售:26.98萬至51.98萬的價格。

而且RV80型譜包含B型和C型房車,擁有短軸/長軸/加長軸,低頂/中頂/高頂多種車身形式,用戶可通過C2B線上交互平台,可直接在線訂製房車,OTD高效透明,消費者可參与試駕、試住等全體驗式互動,享受真正的價值和樂趣。

雖然國內房車起步晚,房車少、營地少,在心往來說,移動露營來說比較難實現,但隨着房車市場近幾年的發展,房車露營地的逐漸增多,露營地的規劃與擬建逐漸完善,移動露營的實現,在今天已經變的越來越便利了。

房車,又稱“車輪上的家”,兼具“房”與“車”兩大功能,但其屬性還是車,相比普通汽車,房車上的居家設施有爐具、冰箱、櫥櫃、沙發、餐桌椅、盥洗設施、空調、電視、音響等傢具和電器等,隨心而行,隨景而歇,這是一種房車的生活狀態。

購買房車的理由可以很多,可能是為了帶着父母去旅行,也可能是為了滿足夫妻雙方共同的旅行夢想,也可以一群朋友同事用懷揣探索的心踏上未知的旅途,無論是兩個人駕駛房車出行,要過一次久違的二人世界或帶着一家人遠離都市的喧鬧,這都是我們嚮往的生活,而房車是對於這種嚮往的一個載體,一個最適合的載體。

國內消費者對待房車的消費觀念正在發生轉變,讓目前的房車市場顯得更為火爆,現在很多人的旅遊觀念都在轉變,更加傾向於自駕出遊,而非報團旅行。而自駕的長途旅行,使得房車成為了旅行者的首選。

但相應的配套設施卻略顯單薄,最大的制約就是目前國內房車露營地較少,無法為房車提供停放場所。畢竟在房車內生活,做飯、取暖、照明等都需要電力和水源,雖然房車裡自帶有蓄電池和水源儲蓄,但容量的限制最多只能保證一兩個晚上的生活需求,這也是制約房車發展最重要的一個條件。

對於現在房車的各方面使用性來說,可能有些人覺的買了回來,使用率比較低,上汽大通也在2017年投入超過1200輛房車,試水房車租賃市場,與運營夥伴在全國鋪開租賃網絡。

讓用戶輕鬆體驗到大通房車落地自駕的樂趣;開發了“房車生活家”平台,為房車用戶和潛客用戶提供“@房車”、“@生活”、“@家”三個方面的服務,構建多個使用和體驗場景,實現在線房車自駕游線路推薦和預訂、營地推薦和預訂,閱讀攻略遊記、預約試駕體驗、參加自駕活動等功能。

也可掃二維碼了解更多房車生活及房車租賃信息,而且還有很多優惠信息喔!

@房車生活家本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

別唧唧歪歪了!年輕人第一台SUV就該選TA!

但相信2765mm的軸距將會給用戶一個滿意的乘坐空間。後排無論在橫向還是縱向空間都是足夠大而舒適,頭部空間則因車頂後排頭頂位置為內凹設計,也是很讓人滿意。“低”價格,高配置啟辰T90的內飾給人的感覺跟外觀還是有些不一樣,整體的風格偏向於穩重,但穩重中也沒有忽略運動感的塑造。

在目前的國內市場,SUV尤其的火爆,可以這麼說,當人們有需求的時候,市場就會自動做出調整生產符合消費者要求的產品。在這種情況下,很多廠家也紛紛都將矛頭指向了緊湊型的SUV,以及二胎政策捧紅的7座中型SUV。然而,啟辰獨辟蹊徑,瞄準了85后消費群體,打造了溜背式的中型SUV啟辰T90,憑藉媲美合資車的生產品質、顛覆傳統的驚艷設計、充滿競爭力的價格,勢必成為中型SUV現有市場格局的全新標杆。

12月25日,啟辰全新中型SUV啟辰T90正式上市,售價區間為10.98—15.48萬元,共推出6款車型。

個性時尚的外觀

啟辰T90最大的亮點可以說是外觀造型,無論是前臉還是性感的“背影”,開這麼一款SUV在路上,回頭率都會是極高的。其採用了全新的家族式前臉和溜背式SUV的風雕美學設計。不是華麗的簡單堆砌,而是經過設計師無數次對細節完美追求的結果。總體來看,不管是在研發設計還是產品定位上,啟辰T90的設計感並不亞於一些合資品牌。

寬敞舒適的空間

說到這裏,也許有人會問,採用溜背造型的設計,其後排空間會不會就因此受到影響,要說完全沒有,這個有點不現實。但相信2765mm的軸距將會給用戶一個滿意的乘坐空間。後排無論在橫向還是縱向空間都是足夠大而舒適,頭部空間則因車頂後排頭頂位置為內凹設計,也是很讓人滿意。

“低”價格,高配置

啟辰T90的內飾給人的感覺跟外觀還是有些不一樣,整體的風格偏向於穩重,但穩重中也沒有忽略運動感的塑造。值得一提的還有,中控台上12.3英寸的大屏,從布局上就可以看得出設計的用心,其呈環抱式位置分佈,主駕駛席無需起身即可完成所有操作;真皮座椅,搭配着藍色的氛圍燈,精密的雙縫線,各處接縫的高度契合,使內飾整體更有質感,是現代年輕一代受眾所青睞的。

除了以上提到的,還有智能互聯、高科技配置和安全配置等方面,啟辰T90也展示出非凡的實力,可以說是智超所值。IT-COMMANDER旋鈕式信息控制系統堪稱同級SUV罕有的“鼠標”式車載控制系統,集便利性、簡易性、精美性於一體,觸控隨心所欲;全彩3D平視信息显示系統以駕駛者為中心,操控簡潔。啟辰T90還具備駕駛提醒、胎壓監測、泊車輔助等功能,在白色高亮質感照明和多功能方向盤按鍵控制下,能夠帶來更清晰、更科技、更好操作的显示效果。

總結:如今中型SUV市場,早已是一片紅海,啟辰T90無論是獨樹一幟的外觀,還是空間、配置,以及親民的價格,都可以說,將會讓它在這片紅海中,逆襲上位、脫穎而出,成為業內的一個新標杆。期待在未來,啟辰T90成為下一个中型SUV爆款。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

全球最大濕地「潘塔納烏」 上半年共2534起野火

摘錄自2020年7月28日公視報導

南美洲除了要應付疫情之外,還有森林野火狀況。像巴西的西南邊,靠近玻利維亞和巴拉圭的濕地區域,在今年上半年,起火次數比去年增加158%。

橫跨巴西、玻利維亞和巴拉圭,號稱全球最大熱帶濕地的潘塔納烏。除了是世界第一大的水生植物集中地,也是動植物最密集的生態系統。然而,它和巴西北部的亞馬遜河流域一樣,面臨濫墾濫伐的危機。

外電報導指出,今年上半年當地零星的野火多達2534起,比去年同期的981起暴增百分之158,還沒過完的7月,又增加1300多起。被燒毀的森林和草地總面積,高達5100平方公里,相當於雙北、基隆、桃園再加上半個宜蘭縣的範圍。

儘管巴西政府在7月16日頒布行政命令,禁止農民焚燒林地開墾,有效期限4個月,但禁令頒布以來,野火仍舊超過1000起,凸顯問題的嚴重性。

濕地
生物多樣性
國際新聞
南美洲
野火

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

Flutter實戰】文本組件及五大案例

老孟導讀:大家好,這是【Flutter實戰】系列文章的第二篇,這一篇講解文本組件,文本組件包括文本展示組件(Text和RichText)和文本輸入組件(TextField),基礎用法和五個案例助你快速掌握。
第一篇鏈接:【Flutter實戰】移動技術發展史

Text

Text是显示文本的組件,最常用的組件,沒有之一。基本用法如下:

Text('老孟')

注意:Text組件一定要包裹在Scaffold組件下,否則效果如下:

文本的樣式在style中設置,類型為TextStyleTextStyle中包含很多文本樣式屬性,下面介紹一些常用的。

設置文本大小和顏色:

Text('老孟',style: TextStyle(color: Colors.red,fontSize: 20),),

上面黑色的字體為沒有設置的效果,作為對比。

設置字體粗細:

Text('老孟',style: TextStyle(fontWeight: FontWeight.bold))

字體粗細共有9個級別,為w100w900FontWeight.boldw700

設置斜體:

Text('老孟',style: TextStyle(fontStyle: FontStyle.italic,))

設置自定義的字體:

  1. 首先下載字體庫(比如中華字體庫)
  2. 將字體文件拷貝的項目中,一般目錄是:assets/fonts/,assets和fonts都需要手動創建,此目錄不是必須的,而是約定俗成,資源一般都放在assets目錄下。
  3. 配置pubspec.yaml
fonts:
  - family: maobi 
    fonts:
      - asset: assets/fonts/maobi.ttf

maobi:是自己對當前字體的命名,有意義即可。

asset:字體文件的目錄。

使用:

Text('老孟', style: TextStyle(fontFamily: 'maobi',)),

設置對齊方式:

Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟', textAlign: TextAlign.center),
),

textAlign只是控制水平方向的對齊方式,值說明如下:

  • left:左對齊
  • right:右對齊
  • center:居中
  • justify:兩端對齊,此屬性中文存在bug(Flutter版本:1.17.3)也可以在官方issue中關注此問題
  • start:前端對齊,和TextDirection屬性有關,如果設置TextDirection.ltr,則左對齊,設置TextDirection.rtl則右對齊。
  • end:末端對齊,和TextDirection屬性有關,如果設置TextDirection.ltr,則右對齊,設置TextDirection.rtl則左對齊。

設置文本自動換行:

Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟,專註分享Flutter技術和應用實戰',softWrap: true,),
)

文本超出範圍時的處理:

Container(
  height: 100,
  width: 200,
  color: Colors.blue.withOpacity(.4),
  child: Text('老孟,專註分享Flutter技術和應用實戰',overflow: TextOverflow.ellipsis,),
)

溢出的處理方式:

  • clip:直接裁剪。
  • fade:越來越透明。
  • ellipsis:省略號結尾。
  • visible:依然显示,此時將會溢出父組件。

設置全局字體樣式:

MaterialApptheme中設置如下

MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
   ...
    textTheme: TextTheme(
        bodyText2: TextStyle(color: Colors.red,fontSize: 24),
    )
  ),
  home: Scaffold(
    body: TextDemo(),
  ),
)

Text組件默認為紅色,

Text('老孟'),

Text('老孟',style: TextStyle(color: Colors.blue,fontSize: 20),),

RichText

RichText的屬性和Text基本一樣,使用如下:

RichText(
  text: TextSpan(
      style: DefaultTextStyle.of(context).style,
      children: <InlineSpan>[
        TextSpan(text: '老孟', style: TextStyle(color: Colors.red)),
        TextSpan(text: ','),
        TextSpan(text: '專註分享Flutter技術和應用實戰'),
      ]),
)

TextField

TextField是文本輸入組件,即輸入框,常用組件之一。基本用法:

TextField()

不需要任何參數,一個最簡單的文本輸入組件就出來了,效果如下:

decoration是TextField組件的裝飾(外觀)參數,類型是InputDecoration。

icon显示在輸入框的前面,用法如下:

TextField(
  decoration: InputDecoration(
    icon: Icon(Icons.person),
  ),
)

當輸入框是空而且沒有焦點時,labelText显示在輸入框上邊,當獲取焦點或者不為空時labelText往上移動一點,labelStyle參數表示文本樣式,具體參考TextStyle, 用法如下:

TextField(
  decoration: InputDecoration(
    labelText: '姓名:',
    labelStyle: TextStyle(color:Colors.red)
  ),
)

hasFloatingPlaceholder參數控制當輸入框獲取焦點或者不為空時是否還显示labelText,默認為true,显示。

helperText显示在輸入框的左下部,用於提示用戶,helperStyle參數表示文本樣式,具體參考TextStyle用法如下:

TextField(
  decoration: InputDecoration(
    helperText: '用戶名長度為6-10個字母',
    helperStyle: TextStyle(color: Colors.blue),
    helperMaxLines: 1
  ),
)

hintText是當輸入框為空時的提示,不為空時不在显示,用法如下:

TextField(
  decoration: InputDecoration(
    hintText: '請輸入用戶名',
    hintStyle: TextStyle(color: Colors.grey),
    hintMaxLines: 1
  ),
)

errorText显示在輸入框的左下部,默認字體為紅色,用法如下:

TextField(
  decoration: InputDecoration(
    errorText: '用戶名輸入錯誤',
    errorStyle: TextStyle(fontSize: 12),
    errorMaxLines: 1,
    errorBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.red)),
  ),
)

prefix系列的組件是輸入框前面的部分,用法如下:

TextField(
  decoration: InputDecoration(
    prefixIcon: Icon(Icons.person)
  ),
)

注意prefix和icon的區別,icon是在輸入框邊框的外部,而prefix在裏面。

suffix和prefix相反,suffix在輸入框的尾部,用法如下:

TextField(
  decoration: InputDecoration(
      suffixIcon: Icon(Icons.person)
  ),
)

counter組件統計輸入框文字的個數,counter僅僅是展示效果,不具備自動統計字數的功能, 自動統計字數代碼如下:

var _textFieldValue = '';
TextField(
  onChanged: (value){
    setState(() {
      _textFieldValue = value;
    });
  },
  decoration: InputDecoration(
    counterText: '${_textFieldValue.length}/32'
  ),
)

filled為true時,輸入框將會被fillColor填充,仿QQ登錄輸入框代碼如下:

Container(
  height: 60,
  width: 250,
  child: TextField(
    decoration: InputDecoration(
      fillColor: Color(0x30cccccc),
      filled: true,
      enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00FF0000)),
          borderRadius: BorderRadius.all(Radius.circular(100))),
      hintText: 'QQ號/手機號/郵箱',
      focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00000000)),
          borderRadius: BorderRadius.all(Radius.circular(100))),
    ),
  ),
)

controller是輸入框文本編輯的控制器,可以獲取TextField的內容、設置TextField的內容,下面將輸入的英文變為大寫:

TextEditingController _controller;

@override
void initState() {
  super.initState();
  _controller = TextEditingController()
    ..addListener(() {
      //獲取輸入框的內容,變為大寫
      _controller.text = _controller.text.toUpperCase();

    });
}

@override
Widget build(BuildContext context) {
  return TextField(
    controller: _controller,
  );
}

@override
dispose() {
  super.dispose();
  _controller.dispose();
}

有時輸入框後面帶有“清除”功能,需要controller來實現。如果需要2個TextField的內容進行同步,只需要給2個TextField設置同一個controller即可實現。

keyboardType參數控制軟鍵盤的類型,說明如下:

  • text:通用鍵盤。
  • multiline:當TextField為多行時(maxLines設置大於1),右下角的為“換行” 按鍵。
  • number:数字鍵盤。
  • phone:手機鍵盤,比数字鍵盤多”*”和 “#”。
  • datetime:在ios上和text一樣,在android上出現数字鍵盤、”:”和 “-“。
  • emailAddress:郵箱鍵盤,有”@” 和 “.”按鍵。
  • url:url鍵盤,有”/” 和 “.”按鍵。
  • visiblePassword:既有字幕又有数字的鍵盤。

textInputAction參數控制軟鍵盤右下角的按鍵,說明如下:

  • none:android上显示返回鍵,ios不支持。
  • unspecified:讓操作系統自己決定哪個合適,一般情況下,android显示“完成”或者“返回”。
  • done:android显示代表“完成”的按鈕,ios显示“Done”(中文:完成)。
  • go:android顯示錶達用戶去向目的地的圖標,比如向右的箭頭,ios显示“Go”(中文:前往)。
  • search:android顯示錶達搜索的按鈕,ios显示”Search”(中文:搜索)。
  • send:android顯示錶達發送意思的按鈕,比如“紙飛機”按鈕,ios显示”Send”(中文:發送)。
  • next:android顯示錶達“前進”的按鈕,比如“向右的箭頭”,ios显示”Next”(中文:下一項)。
  • previous:android顯示錶達“後退”的按鈕,比如“向左的箭頭”,ios不支持。
  • continueAction:android 不支持,ios僅在ios9.0+显示”Continue”(中文:繼續)。
  • join:Android和ios显示”Join”(中文:加入)。
  • route:android 不支持,ios显示”Route”(中文:路線)。
  • emergencyCall:android 不支持,ios显示”Emergency Call”(中文:緊急電話)。
  • newline:android顯示錶達“換行”的按鈕,ios显示”換行“。

大家可能發現了,Android上显示的按鈕大部分是不確定的,比如next有的显示向右的箭頭,有的显示前進,這是因為各大廠商對Android ROM定製引發的。

textCapitalization參數是配置鍵盤是大寫還是小寫,僅支持鍵盤模式為text,其他模式下忽略此配置,說明如下:

  • words:每一個單詞的首字母大寫。
  • sentences:每一句話的首字母大寫。
  • characters:每個字母都大寫
  • none:都小寫

這裏僅僅是控制軟鍵盤是大寫模式還是小寫模式,你也可以切換大小寫,系統並不會改變輸入框內的內容。

textAlignVertical表示垂直方向的對齊方式,textDirection表示文本方向,用法如下:

TextField(
  textAlignVertical: TextAlignVertical.center,
  textDirection: TextDirection.rtl,
)

toolbarOptions表示長按時彈出的菜單,有copycutpasteselectAll,用法如下:

TextField(
  toolbarOptions: ToolbarOptions(
    copy: true,
    cut: true,
    paste: true,
    selectAll: true
  ),
)

cursor表示光標,用法如下:

TextField(
  showCursor: true,
  cursorWidth: 3,
  cursorRadius: Radius.circular(10),
  cursorColor: Colors.red,
)

效果如下:

將輸入框設置為密碼框,只需obscureText屬性設置true即可,用法如下:

TextField(
  obscureText: true,
)

通過inputFormatters可以限制用戶輸入的內容,比如只想讓用戶輸入字符,設置如下:

TextField(
  inputFormatters: [
    WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),
  ],
)

這時用戶是無法輸入数字的。

onChanged是當內容發生變化時回調,onSubmitted是點擊回車或者點擊軟鍵盤上的完成回調,onTap點擊輸入框時回調,用法如下:

TextField(
  onChanged: (value){
    print('onChanged:$value');
  },
  onEditingComplete: (){
    print('onEditingComplete');
  },
  
  onTap: (){
    print('onTap');
  },
)

輸入框右下角經常需要字數統計,除了使用上面介紹的方法外,還可以使用buildCounter,建議使用此方法,用法如下:

TextField(
  maxLength: 100,
  buildCounter: (
    BuildContext context, {
    int currentLength,
    int maxLength,
    bool isFocused,
  }) {
    return Text(
      '$currentLength/$maxLength',
    );
  },
)

動態獲取焦點

FocusScope.of(context).requestFocus(_focusNode);

_focusNode為TextField的focusNode:

_focusNode = FocusNode();

TextField(
	focusNode: _focusNode,
	...
)

動態失去焦點

_focusNode.unfocus();

過渡顏色的文字

Builder(
  builder: (BuildContext context) {
    RenderBox box = context.findRenderObject();
    final Shader linearGradient = LinearGradient(
      colors: <Color>[Colors.purple, Colors.blue],
    ).createShader(
        Rect.fromLTWH(0.0, 0.0, box?.size?.width, box?.size?.height));

    return Text(
      '老孟,專註分享Flutter技術和應用實戰',
      style: new TextStyle(
          fontSize: 18.0,
          fontWeight: FontWeight.bold,
          foreground: Paint()..shader = linearGradient),
    );
  },
)

Builder組件是為了計算當前Text組件大小,生成LinearGradient。

帶前後置標籤的文本

RichText(
  text: TextSpan(
      style: DefaultTextStyle.of(context).style,
      children: <InlineSpan>[
        WidgetSpan(
            child: Container(
              margin: EdgeInsets.only(right: 10),
              padding: EdgeInsets.symmetric(horizontal: 10),
              decoration: BoxDecoration(
                  shape: BoxShape.rectangle,
                  borderRadius: BorderRadius.all(Radius.circular(20)),
                  color: Colors.blue),
              child: Text(
                '判斷題',
                style: TextStyle(color: Colors.white),
              ),
            )),
        TextSpan(text: '泡沫滅火器可用於帶電滅火'),

      ]),
)

“服務協議”

通常在登錄頁面的底部會出現登錄即代表同意並閱讀 《服務協議》,其中《服務協議》為藍色且可點擊:

Text.rich(
  TextSpan(
      text: '登錄即代表同意並閱讀',
      style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
      children: [
        TextSpan(
          text: '《服務協議》',
          style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              print('onTap');
            },
        ),
      ]),
)

登錄密碼輸入框

TextField(
  decoration: InputDecoration(
    fillColor: Color(0x30cccccc),
    filled: true,
    enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0x00FF0000)),
        borderRadius: BorderRadius.all(Radius.circular(100))),
    hintText: '輸入密碼',
    focusedBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0x00000000)),
        borderRadius: BorderRadius.all(Radius.circular(100))),

  ),
  textAlign: TextAlign.center,
  obscureText: true,
  onChanged: (value) {

  },
)

評論回復

Text.rich(
  TextSpan(
      text: '回復',
      style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
      children: [
        TextSpan(
          text: '@老孟:',
          style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              print('onTap');
            },
        ),
        TextSpan(
          text: '你好,想知道Flutter發展前景如何?',
        ),
      ]),
)

交流

老孟Flutter博客地址(330個控件用法):http://laomengit.com

歡迎加入Flutter交流群(微信:laomengit)、關注公眾號【老孟Flutter】:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(三)

系列文章

  1. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用 abp cli 搭建項目
  2. 基於 abp vNext 和 .NET Core 開發博客項目 – 給項目瘦身,讓它跑起來
  3. 基於 abp vNext 和 .NET Core 開發博客項目 – 完善與美化,Swagger登場
  4. 基於 abp vNext 和 .NET Core 開發博客項目 – 數據訪問和代碼優先
  5. 基於 abp vNext 和 .NET Core 開發博客項目 – 自定義倉儲之增刪改查
  6. 基於 abp vNext 和 .NET Core 開發博客項目 – 統一規範API,包裝返回模型
  7. 基於 abp vNext 和 .NET Core 開發博客項目 – 再說Swagger,分組、描述、小綠鎖
  8. 基於 abp vNext 和 .NET Core 開發博客項目 – 接入GitHub,用JWT保護你的API
  9. 基於 abp vNext 和 .NET Core 開發博客項目 – 異常處理和日誌記錄
  10. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用Redis緩存數據
  11. 基於 abp vNext 和 .NET Core 開發博客項目 – 集成Hangfire實現定時任務處理
  12. 基於 abp vNext 和 .NET Core 開發博客項目 – 用AutoMapper搞定對象映射
  13. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(一)
  14. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(二)
  15. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(三)
  16. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(一)
  17. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(二)
  18. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(三)
  19. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(四)
  20. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(五)
  21. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(一)
  22. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(二)
  23. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(三)
  24. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(四)
  25. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(五)
  26. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(六)
  27. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(七)
  28. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(八)
  29. 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(九)
  30. 基於 abp vNext 和 .NET Core 開發博客項目 – 終結篇之發布項目

上一篇完成了博客的主題切換,菜單和二維碼的显示與隱藏功能,本篇繼續完成分頁查詢文章列表的數據展示。

添加頁面

現在點擊頁面上的鏈接,都會提示錯誤消息,因為沒有找到對應的路由地址。先在Pages下創建五個文件夾:Posts、Categories、Tags、Apps、FriendLinks。

然後在對應的文件夾下添加Razor組件。

  • Posts文件夾:文章列表頁面Posts.razor、根據分類查詢文章列表頁面Posts.Category.razor、根據標籤查詢文章列表頁面Posts.Tag.razor、文章詳情頁Post.razor
  • Categories文件夾:分類列表頁面Categories.razor
  • Tags文件夾:標籤列表頁面Tags.razor
  • Apps文件夾:Apps.razor準備將友情鏈接入口放在裏面
  • FriendLinks文件夾:友情鏈接列表頁面FriendLinks.razor

先分別創建上面這些Razor組件,差不多除了後台CURD的頁面就這些了,現在來逐個突破。

不管三七二十一,先把所有頁面的路由給確定了,指定頁面路由使用 @page 指令,官方文檔說不支持可選參數,但是可以支持多個路由規則。

默認先什麼都不显示,可以將之前的加載中圈圈寫成一個組件,供每個頁面使用。

在Shared文件夾添加組件Loading.razor

<!--Loading.razor-->
<div class="loader"></div>
//Posts.razor
@page "/posts/"
@page "/posts/page/{page:int}"
@page "/posts/{page:int}"

<Loading />

@code {
    /// <summary>
    /// 當前頁碼
    /// </summary>
    [Parameter]
    public int? page { get; set; }
}

這裏我加了三條,可以匹配沒有page參數,帶page參數的,/posts/page/{page:int}這個大家可以不用加,我是用來兼容目前線上的博客路由的。總的來說可以匹配到:/posts/posts/1/posts/page/1這樣的路由。

//Posts.Category.razor
@page "/category/{name}"

<Loading />

@code {
    /// <summary>
    /// 分類名稱參數
    /// </summary>
    [Parameter]
    public string name { get; set; }
}

根據分類名稱查詢文章列表頁面,name當作分類名稱參數,可以匹配到類似於:/category/aaa/category/bbb這樣的路由。

//Posts.Tag.razor
@page "/tag/{name}"

<Loading />

@code {
    /// <summary>
    /// 標籤名稱參數
    /// </summary>
    [Parameter]
    public string name { get; set; }
}

這個根據標籤名稱查詢文章列表頁面和上面差不多一樣,可以匹配到:/tag/aaa/tag/bbb這樣的路由。

//Post.razor
@page "/post/{year:int}/{month:int}/{day:int}/{name}"

<Loading />

@code {
    [Parameter]
    public int year { get; set; }

    [Parameter]
    public int month { get; set; }

    [Parameter]
    public int day { get; set; }

    [Parameter]
    public string name { get; set; }
}

文章詳情頁面的路由有點點複雜,以/post/開頭,加上年月日和當前文章的語義化名稱組成。分別添加了四個參數年月日和名稱,用來接收URL的規則,使用int來設置路由的約束,最終可以匹配到路由:/post/2020/06/09/aaa/post/2020/06/9/bbb這樣的。

//Categories.razor
@page "/categories"

<Loading />

//Tags.razor
@page "/tags"

<Loading />

//FriendLinks.razor
@page "/friendlinks"

<Loading />

分類、標籤、友情鏈接都是固定的路由,像上面這樣就不多說了,然後還剩一個Apps.razor

//Apps.razor
@page "/apps"

<div class="container">
    <div class="post-wrap">
        <h2 class="post-title">-&nbsp;Apps&nbsp;-</h2>
        <ul>
            <li>
                <a target="_blank" href="https://support.qq.com/products/75616"><h3>吐個槽_留言板</h3></a>
            </li>
            <li>
                <NavLink href="/friendlinks"><h3>友情鏈接</h3></NavLink>
            </li>
        </ul>
    </div>
</div>

在裏面添加了一個友情鏈接的入口,和一個 騰訊兔小巢 的鏈接,歡迎大家吐槽留言噢。

現在可以運行一下看看,點擊所有的鏈接都不會提示錯誤,只要路由匹配正確就會出現加載中的圈圈了。

文章列表

在做文章列表的數據綁定的時候遇到了大坑,有前端開發經驗的都知道,JavaScript弱類型語言中接收json數據隨便玩,但是在Blazor中我試了下動態接受傳遞過來的JSON數據,一直報錯壓根運行不起來。所以在請求api接收數據的時候需要指定接收對象,那就好辦了我就直接引用API中的.Application.Contracts就行了啊,但是緊接着坑又來了,目標框架對不上,引用之後也運行不起來,這裏應該是之前沒有設計好。

於是,我就想了一個折中的辦法吧,將API中的返回對象可以用到的DTO先手動拷貝一份到Blazor項目中,後續可以考慮將公共的返回模型做成Nuget包,方便使用。

那麼,最終就是在Blazor中添加一個Response文件夾,用來放接收對象,裏面的內容看圖:

有點傻,先這樣解決,後面在做進一步的優化吧。

將我們複製進來的東東,在_Imports.razor中添加引用。

//_Imports.razor
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Meowv.Blog.BlazorApp.Shared
@using Response.Base
@using Response.Blog

@inject HttpClient Http
@inject Commons.Common Common

@inject HttpClient Http:注入HttpClient,用它來請求API數據。

現在有了接收對象,接下來就好辦了,來實現分頁查詢文章列表吧。

先添加三個私有變量,限制條數,就是一次加載文章的數量,總頁碼用來計算分頁,還有就是API的返回數據的接收類型參數。

/// <summary>
/// 限制條數
/// </summary>
private int Limit = 15;

/// <summary>
/// 總頁碼
/// </summary>
private int TotalPage;

/// <summary>
/// 文章列表數據
/// </summary>
private ServiceResult<PagedList<QueryPostDto>> posts;

然後當頁面初始化的時候,去加載數據,渲染頁面,因為page參數可能存在為空的情況,所以要考慮進去,當為空的時候給他一個默認值1。

/// <summary>
/// 初始化
/// </summary>
protected override async Task OnInitializedAsync()
{
    // 設置默認值
    page = page.HasValue ? page : 1;

    await RenderPage(page);
}

/// <summary>
/// 點擊頁碼重新渲染數據
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
private async Task RenderPage(int? page)
{
    // 獲取數據
    posts = await Http.GetFromJsonAsync<ServiceResult<PagedList<QueryPostDto>>>($"/blog/posts?page={page}&limit={Limit}");

    // 計算總頁碼
    TotalPage = (int)Math.Ceiling((posts.Result.Total / (double)Limit));
}

在初始化方法中設置默認值,調用RenderPage(...)獲取到API返回來的數據,並根據返回數據計算出頁碼,這樣就可以綁定數據了。

@if (posts == null)
{
    <Loading />
}
else
{
    <div class="post-wrap archive">
        @if (posts.Success && posts.Result.Item.Any())
        {
            @foreach (var item in posts.Result.Item)
            {
                <h3>@item.Year</h3>
                @foreach (var post in item.Posts)
                {
                    <article class="archive-item">
                        <NavLink href="@("/post" + post.Url)">@post.Title</NavLink>
                        <span class="archive-item-date">@post.CreationTime</span>
                    </article>
                }
            }
            <nav class="pagination">
                @for (int i = 1; i <= TotalPage; i++)
                {
                    var _page = i;

                    if (page == _page)
                    {
                        <span class="page-number current">@_page</span>
                    }
                    else
                    {
                        <a class="page-number" @onclick="@(() => RenderPage(_page))" href="/posts/@_page">@_page</a>
                    }
                }
            </nav>
        }
        else
        {
            <ErrorTip />
        }
    </div>
}

在加載數據的時候肯定是需要一個等待時間的,因為不可抗拒的原因數據還沒加載出來的時候,可以讓它先轉一會圈圈,當posts不為空的時候,再去綁定數據。

在綁定數據,for循環頁碼的時候我又遇到了一個坑,這裏不能直接去使用變量i,必須新建一個變量去接受它,不然我傳遞給RenderPage(...)的參數就會是錯的,始終會取到最後一次循環的i值。

當判斷數據出錯或者沒有數據的時候,在把錯誤提示<ErrorTip />扔出來显示。

做到這裏,可以去運行看看了,肯定會報錯,因為還有一個重要的東西沒有改,就是我們接口的BaseAddress,在Program.cs中,默認是當前Blazor項目的運行地址。

我們需要先將API項目運行起來,拿到地址配置在Program.cs中,因為現在還是本地開發,有多種辦法可以解決,可以將.HttpApi.Hosting設為啟動項目直接運行起來,也可以使用命令直接dotnet run

我這裏為了方便,直接發布在IIS中,後續只要電腦打開就可以訪問了,你甚至選擇其它任何你能想到的方式。

關於如何發布這裏先不做展開,有機會的話寫一篇將.net core開發的項目發布到 Windows、Linux、Docker 的教程吧。

所以我的Program.cs中配置如下:

//Program.cs
using Meowv.Blog.BlazorApp.Commons;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace Meowv.Blog.BlazorApp
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");

            var baseAddress = "https://localhost";

            if (builder.HostEnvironment.IsProduction())
                baseAddress = "https://api.meowv.com";

            builder.Services.AddTransient(sp => new HttpClient
            {
                BaseAddress = new Uri(baseAddress)
            });

            builder.Services.AddSingleton(typeof(Common));

            await builder.Build().RunAsync();
        }
    }
}

baseAddress默認為本地開發地址,使用builder.HostEnvironment.IsProduction()判斷是否為線上正式生產環境,改變baseAddress地址。

現在可以看到已經可以正常獲取數據,並且翻頁也是OK的,然後又出現了一個新的BUG。

解決BUG

細心的可以發現,當我點擊頭部組件的Postsa 標籤菜單時候,頁面沒有發生變化,只是路由改變了。

思來想去,我決定使用NavigationManager這個URI和導航狀態幫助程序來解決,當點擊頭部的Postsa 標籤菜單直接刷新頁面得了。

Common.cs中使用構造函數注入NavigationManager,然後添加一個跳轉指定URL的方法。

/// <summary>
/// 跳轉指定URL
/// </summary>
/// <param name="uri"></param>
/// <param name="forceLoad">true,繞過路由刷新頁面</param>
/// <returns></returns>
public async Task RenderPage(string url, bool forceLoad = true)
{
    _navigationManager.NavigateTo(url, forceLoad);

    await Task.CompletedTask;
}

forceLoad = true的時候,將會繞過路由直接強制刷新頁面,如果forceLoad = false,則不會刷新頁面。

緊接着在Header.razor中修改代碼,添加點擊事件。

@*<NavLink class="menu-item" href="posts">Posts</NavLink>*@

<NavLink class="menu-item" href="posts" @onclick="@(async () => await Common.RenderPage("posts"))">Posts</NavLink>

總算是搞定,完成了分頁查詢文章列表的數據綁定,今天就到這裏吧,未完待續…

開源地址:https://github.com/Meowv/Blog/tree/blog_tutorial

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

【翻譯】.NET 5 Preview5發布

今天,發布了.NET 5.0 Preview5。主要對它進行了一小部分新功能和性能的改進。.NET 5.0 Preview 4包含了一些計劃和.NET 5.0要交付的內容。
現在,大多數的功能都已經包含在裏面,但是有許多功能還未到最終狀態。預計這個版本在Preview 7中完善。

可以下載適用於Windows,macOS和Linux的.NET 5.0 Preview 5:

  • Windows and macOS installers
  • Binaries
  • Docker images
  • Snap installer

ASP.NET Core和EF Core也在今天發布了

我們需要使用Visual Studio 2019 16.7才能使用.NET 5.0。 安裝最新版本的C#擴展,以將.NET 5.0與Visual Studio Code結合使用。 Mac的Visual Studio尚不支持.NET 5.0。

發布說明:

  • .NET 5.0 release notes
  • .NET 5.0 known issues
  • GitHub release
  • GitHub tracking issue

RyuJIT改進

對RyuJIT JIT編譯器進行了以下改進

  • 新的、更快的、可移植的tailcall helper實現。
  • ARM64硬件內部物理的實現進程
    • 實現ASIMD Extract Insert ExtractVector64 ExtractVector128
    • 實現 ASIMD widening, narrowing, saturating intrinsics
    • 添加VectorTableList和TableVectorExtension內部函數
    • 添加對ARM64內部函數的CreateScalarUnsafe()支持
    • ARM64對Vector64.Create()和Vector128.Create()的內在支持
    • 使用arm64 intrinsic優化BitOperations.PopCount ()
  • 在影響正則表達式編譯的情況下改進了JIT的速度
  • 使用新的硬件特性BSF/BSR改進英特爾架構性能
  • 實現Vector{Size}.AllBitsSet

Native exports

曾要求為導出本機二進制文件啟用導出功能,這些功能已在很長一段時間內調用.NET代碼。 這是一個很好的方案,現在通過.NET 5.0啟用它。 該功能的構建塊是託管對UnmanagedCallersOnlyAttribute的API支持。

這個功能是創建更高級別體驗的基礎。 團隊的Aaron Robinson一直在從事.NET Native Exports項目,該項目為將.NET組件作為本機庫發布提供了更完整的體驗。 目前正在尋求有關此功能的反饋,以幫助我們確定該方法是否應包含在產品中。

.NET本地導出項目使我們能夠:

  • 公開自定義的 native exports。
  • 不需要像COM這樣的高級互操作技術。
  • 跨平台工作

現有的項目可以實現類似的方案,例如:

  • Unmanaged Exports
  • DllExport

[重大變化]刪除.NET 5.0中內置的WinRT支持

注意:這個變化將出現在預覽6中。這是一個早期的通知。

Windows Runtime(WinRT)是Windows中公開使用的新API的技術和ABI。 您可以通過.NET代碼調用這些API,類似於使用C ++的方法。 在.NET Core 3.0中添加了對WinRT interop的支持,這是對Windows桌面客戶端框架(Windows Forms和WPF)添加支持的一部分。

最近,一直在與Windows團隊緊密合作,以更改和改進WinRT interop與.NET的協作方式。 我們已用Windows團隊在.NET 5.0中提供的C#/WinRT工具鏈替換了內置的WinRT支持。 WinRT互操作中的此更改是一項重大更改,使用WinRT的.NET Core 3.x應用將需要重新編譯。 我們將在即將來臨的預覽中提供更多信息。

在.NET 5中的支持WinRT API中明確指出了這些好處:

  • WinRT互操作可以獨立於.NET runtime進行開發和改進。
  • 使WinRT互操作與為其他操作系統(如iOS和Android)提供的互操作系統對稱。
  • 可以利用許多其他。net特性(AOT, c#特性, IL linking)。
  • 簡化.NET運行時代碼庫(刪除6萬行代碼)。

將System.DirectoryServices.Protocols擴展到Linux和macOS

添加對System.DirectoryServices.Protocols的跨平台支持。 在Preview 5中,添加了對Linux的支持,並在Preview 6中添加了對macOS的支持。對Windows支持已經存在。

System.DirectoryServices.Protocols是比System.DirectoryServices更低級別的API,並且啟用更多方案。 System.DirectoryServices包含僅適用Windows的概念/實現,因此製作跨平台並不是一個很容易的事情。
這兩個API都支持對目錄服務服務器(如LDAP或Active Directory)進行控制和交互。

Alpine 3.12

本周,增加了對Alpine 3.12,.NET Core 3.1和.NET 5的支持。 Alpine Linux的維護者於5月29日宣布發布Alpine 3.12。 與過去相比,以更快,更可預測的方式增加對新Linux發行版的支持。

會發現他們已經開始使用一種新的發布模型來發布新發行版的問題。 這就是我們對Alpine 3.12所做的。 將來,我們計劃更早地發布這些問題。 例如,需要跟蹤的下一個發行版可能是Ubuntu 20.10。 尚未決定,但可能會在7月或8月發布該發行版的類似問題,以準備10月發行的新Ubuntu版本。

最後

感謝大家對.NET 5.0預覽版的反饋以及您的早期反饋。 正如文章的簡介中所建議的那樣,現在才發布大約一半。 現在包括了大多數功能,但是我們希望在接下來的幾個預覽中會進行許多更改,以完成體驗並消除仍然存在的粗糙邊緣。

來源:https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-5/

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

日本廣島法院宣判 擴大認定核爆「黑雨」受害者

摘錄自2020年7月29日中央社報導

美國於二戰末期對日本投下原子彈迄今已近75年。日本廣島地方法院今天(29日)做出罕見判決,擴大認定核彈倖存者。法新社報導,廣島地方法院裁決,84名原告都應獲得給予核彈攻擊受害者的醫療福利。

在1945年8月6日廣島核爆後,若干地區降下放射性物質「黑雨」。日本政府在二戰後為事發時位於這些地區的民眾提供免費醫療照護,上述原告事發時不在被指定的地區,但淋到「黑雨」,他們主張自己遭受的健康衝擊與政府認定地區內受害人相似。

日本放送協會(NHK)報導,廣島地方法院審判長高島義行在庭上表示:「醫療文件顯示,這些居民經歷的疾病據信與核彈有關,這符合認定被爆者的法律要件。」對於多年來主張自己也受苦於核彈攻擊的人士而言,這場官司也具象徵性意義。

污染治理
公害污染
國際新聞
原子彈
核爆

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

垃圾也「三倍」? 研究:各國減塑政策來不及 2040年入海塑膠垃圾將增三倍

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!